以前の記事でRedshiftのクラスターの一時停止と再開とマネジメントコンソールから手動で実行しました。
今度はスケジュールで実行するように設定してみます。
前回の記事↓↓
capybara-engineer.hatenablog.com
実施作業
準備
Redshiftクラスター作成
まずはスケジュール設定するためのRedshiftクラスターを作成します。
作成方法は過去記事に書いてあるので割愛します。
capybara-engineer.hatenablog.com
IAMロール作成
以前の記事でも少し書いたかもしれませんが、クラスターの一時停止と再開をスケジュール設定するとき、ユーザの代わりにRedshiftにアクセスして操作するIAMロールを指定する必要があります。
以下のドキュメントを参照しながらIAMロールを作成していきます。
docs.aws.amazon.com
IAMのコンソールからロールの作成を実行し、以下の流れでユースケースを選択します。
この手順だとデフォルトでFullAccessポリシーが設定されます。
内容を確認して、ロールを作成します。
ロールが作成できていることを確認します。
それでは早速設定...といきたいところですが、現状だとredshiftのschedulerへの信頼関係は設定されていても、redshiftへの信頼関係は設定されていないため、IAMロールの信頼関係を以下のように修正します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "scheduler.redshift.amazonaws.com", "redshift.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
無事に修正できたらIAMロールの設定は完了です。
Redshiftのスケジュール設定
準備ができたら実際にスケジュールを設定していきます。
一時停止する方法は3種類ありますが、今回はスケジュールで設定するので、一番右を選択します。
次に
①スケジュール名
②スケジュールの説明
③開始日
④終了日
の4項目を設定します。
終了日を設定しないと永続的に実行されてしまうので、期間指定でやりたい場合は忘れずに設定しましょう。
※補足
開始日と終了日ですが、この作業をしている当日(7/3)には設定できないようで、翌日(7/4)から設定することが可能でした。
スケジュールの設定方法としてエディタでの設定かCRON構文での設定かの2種類があります。
- エディタ
- CRON構文
エディタでの設定では実行間隔として「月、週、日」の3つがあり、以下のように設定が可能です。
月 → 指定した日付or指定した曜日に停止・再開する(時間も指定可) 週 → 毎週指定した曜日に停止・再開する(時間も指定可) 日 → 毎日指定した時間に停止・再開する
ただ、エディタの設定だと平日朝9時に再開し、夕方18時に一時停止する、といった柔軟な設定ができないため、そのような設定をしたい場合は、CRON構文での設定が必須になってきます。
以下に月曜~金曜まで朝9時開始夕方18時停止する設定したCRON構文を載せておきます。
※時間はUTCでの計算になるため注意が必要
<2020/7/7追記>
resumeのCRON構文が間違っていました。
正しくは本記事の下部途中に記載しています。
最後にIAMロールを設定してスケジュール設定を完了します。
うまく設定できるとコンソールに以下のようなメッセージが出力されます。
※特に画面遷移などはしません
感想及び所感
時刻の計算でミスがありましたが、概ねやりたいことは実施することができました。
コンピュートノードだけでも停止できるとコストが大分削減できると思うので、是非やってみてください。