自由気ままに書いちゃおう

好きなことをつらつらと・・・

AWS EC2の自動起動と自動停止(SystemsManger+Cloudwatch Events)

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」ダッシュボード>「ロール」>「ロールの作成」をクリックします。

f:id:guri2o1667:20200503101517p:plain


2.「AWSサービス」>「EC2」を選択し、「次のステップ:アクセス権限」をクリックします。

f:id:guri2o1667:20200503101850p:plain


3.「AmazonSSmAutomationRole」をチェックし、「次のステップ:タグ」をクリックします。

f:id:guri2o1667:20200503102014p:plain


4.「次のステップ:確認」をクリックします。
5.「ロールの作成」画面で必要事項を入力し、「ロールの作成」をクリックします。ここでは以下キャプチャの通り入力しています。

f:id:guri2o1667:20200503102214p:plain

6.作成したロールをクリックし、「信頼関係」タブをクリックします。

f:id:guri2o1667:20200503112017p:plain


7.「信頼関係の編集」をクリックします。

f:id:guri2o1667:20200503112058p:plain


8.以下の通り修正し、「信頼ポリシーの更新」をクリックします。修正前: ec2.amazonaws.com
修正後: events.amazonaws.com

f:id:guri2o1667:20200503112349p:plain


9.「信頼されたエンティティ」が「IDプロバイダー evetns.amazonaws.com」に変更されていることを確認します。

f:id:guri2o1667:20200503112545p:plain

※信頼されたエンティティが「ec2.amazonaws.com」のままの場合は、以下2-1.手順5でIAMロールが選択できません。

■2-1.自動起動用ルールの作成


ここでは、「平日9時に指定したEC2が起動する」設定を行います。
※祝日や特定日の判断はCloudwatch Events単体ではできません。これらの要件がある場合には、Lambdaを利用してください。

1.「Cloudwatch」ダッシュボード>「イベント」>「ルール」>「ルールの作成」をクリックします。

f:id:guri2o1667:20200503104807p:plain

2.イベントソースで「スケジュール」を選択し、「Cron式」を選択します。
3.Cron式に以下を記入します。※Cron式の書式は、「cron(分 時間 日にち 月 曜日 年)」です。
 時刻はGMTで設定します。そのため、JSTと9時間の時差があることに注意してください。

■入力する文字列
 0 0 ? * 2-6 *   ※9時間の時差があるため、時間は0です。

f:id:guri2o1667:20200503110107p:plain


4.「ターゲットの追加」をクリックします。

f:id:guri2o1667:20200503111612p:plain

5.以下の通り入力します。

f:id:guri2o1667:20200503112941p:plain


6.ルールの定義画面で必要事項を入力し、「ルールの作成」をクリックします。

f:id:guri2o1667:20200503113151p:plain


7.作成したルールをクリックすると、以下のように詳細の設定が確認できます。※Cron式で登録した内容が「次の10回のトリガー日」に表示されていることも確認できます。

f:id:guri2o1667:20200503113346p:plain

■2-2.自動停止用ルールの作成


ここでは、「平日18時に指定したEC2が停止する」設定を行います。
設定手順は「2-1.自動起動用ルールの作成」と同じです。
設定値が異なるのは、Cron式の値と選択するAutomationドキュメントです。

【Cron式】
0 9 ? * 2-6 *   ※9時間の時差があるため、時間は9です。

【Automationドキュメント】
AWS-StopEC2Instance

■実行時のログについて


実際にCloudwatchEventsにより起動したルールにより、EC2の起動停止が正常に実施できているかを確認します。
※動確のため、Cron式を少しいじりました。そのため、時刻については気にしないでください。あくまで、結果表示の参考にしていただければと思います。

自動起動停止のドキュメントが正常に実施されたかどうかは、SystemsMangerの「自動化」で履歴を確認することができます。

f:id:guri2o1667:20200503115402p:plain


以上です。次回は複数インスタンスをAutomationで指定した際の動作についてです。

 

www.guri2o1667.work