AWSを使用しているシステムの更改に向けて、今までLambdaとCloudwatch Eventsで実施していたEC2の自動起動、停止をノンコード化(SystemsManger+Cloudwatch Events)しようと思い、備忘を兼ね記載致します。
SystemsManger(今回使うのはAutomation)の詳細の説明は別の機会で書きたいと思います。
ここでは、まずは実践ということで設定手順のみを記載致します。
■設定順序
1.IAMロールの設定
2.Cloudwatch Eventsの作成 ※SystemsMangerのAutomationを指定(EC2自動起動/停止の設定)
2-1.自動起動用ルールの作成
2-2.自動停止用ルールの作成
■1.IAMロールの設定
EC2の起動停止は前述の通り、SSM Automationを使用します。
Cloudwatch EventsがSSMを呼び出すための権限(=IAMロール)を作成します。
※これがないと、Cloudwatch EventsからSSMを呼び出すことができず、処理が失敗します。
1.「IAM」ダッシュボード>「ロール」>「ロールの作成」をクリックします。
2.「AWSサービス」>「EC2」を選択し、「次のステップ:アクセス権限」をクリックします。
3.「AmazonSSmAutomationRole」をチェックし、「次のステップ:タグ」をクリックします。
4.「次のステップ:確認」をクリックします。
5.「ロールの作成」画面で必要事項を入力し、「ロールの作成」をクリックします。ここでは以下キャプチャの通り入力しています。
6.作成したロールをクリックし、「信頼関係」タブをクリックします。
7.「信頼関係の編集」をクリックします。
8.以下の通り修正し、「信頼ポリシーの更新」をクリックします。修正前: ec2.amazonaws.com
修正後: events.amazonaws.com
9.「信頼されたエンティティ」が「IDプロバイダー evetns.amazonaws.com」に変更されていることを確認します。
※信頼されたエンティティが「ec2.amazonaws.com」のままの場合は、以下2-1.手順5でIAMロールが選択できません。
■2-1.自動起動用ルールの作成
ここでは、「平日9時に指定したEC2が起動する」設定を行います。
※祝日や特定日の判断はCloudwatch Events単体ではできません。これらの要件がある場合には、Lambdaを利用してください。
1.「Cloudwatch」ダッシュボード>「イベント」>「ルール」>「ルールの作成」をクリックします。
2.イベントソースで「スケジュール」を選択し、「Cron式」を選択します。
3.Cron式に以下を記入します。※Cron式の書式は、「cron(分 時間 日にち 月 曜日 年)」です。
時刻はGMTで設定します。そのため、JSTと9時間の時差があることに注意してください。
■入力する文字列
0 0 ? * 2-6 * ※9時間の時差があるため、時間は0です。
4.「ターゲットの追加」をクリックします。
5.以下の通り入力します。
6.ルールの定義画面で必要事項を入力し、「ルールの作成」をクリックします。
7.作成したルールをクリックすると、以下のように詳細の設定が確認できます。※Cron式で登録した内容が「次の10回のトリガー日」に表示されていることも確認できます。
■2-2.自動停止用ルールの作成
ここでは、「平日18時に指定したEC2が停止する」設定を行います。
設定手順は「2-1.自動起動用ルールの作成」と同じです。
設定値が異なるのは、Cron式の値と選択するAutomationドキュメントです。
【Cron式】
0 9 ? * 2-6 * ※9時間の時差があるため、時間は9です。
【Automationドキュメント】
AWS-StopEC2Instance
■実行時のログについて
実際にCloudwatchEventsにより起動したルールにより、EC2の起動停止が正常に実施できているかを確認します。
※動確のため、Cron式を少しいじりました。そのため、時刻については気にしないでください。あくまで、結果表示の参考にしていただければと思います。
自動起動停止のドキュメントが正常に実施されたかどうかは、SystemsMangerの「自動化」で履歴を確認することができます。
以上です。次回は複数インスタンスをAutomationで指定した際の動作についてです。