要件
複数のEC2を指定された時間に自動的に停止及び起動をさせる。実行が失敗した際に、SNSでメールを送信する必要があるとする。
STEP1:IAMロールの作成
■ IAMのロール作成の画面を開く
■ ユースケース⇒「他のAWSのサービスのユースケース」に「Systems Manager」を選択する
■ 許可ポリシーを追加:
AWSの管理ポリシー:AmazonSSMAutomationRoleをアタッチする
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "events.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
STEP2:CloudWatch イベントのルールの作成
■ CloudWatch⇒ルール⇒CloudWatch Eventに戻るを順にクリックする
■左側:
・イベントソース:スケジュールを選択する
・Cron式:今回は「15 11 * * ? *」を入力し、毎日 11:15 UTC 時間 にイベントを発火させる。
Cron式の参考ページ:https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/events/ScheduledEvents.html#CronExpressions
右側:
・ターゲット:SSM Automation
・ドキュメント:
⇒インスタンス停止:AWS-StopEC2Instance
⇒インスタンス起動:AWS-StartEC2Instance
・定数⇒InstanceId:
※1つのインスタンスの場合:
i-06fbf5xxxxxxxxxxxxxx
※複数インスタンスの場合:
["i-0155xxxxxxxxxx", "i-05f477cb8xxxxxxxx", "i-0aeb0be818xxxxxxxx"]
・既存のルールを使用:今回作成したIAMロールを選択する
test-auto-stop-and-start-ec2
Step3: イベントの実施が失敗したときのSNS通信対応
左側:
イベントソース:
・イベントパターン:
⇒サービス名:Systems Manager
⇒イベントタイプ:Automation
・特定の詳細タイプ:EC2 Automation Execution Status-change Notification
・特定のステータス:Failed、TimeOut、Cancelled
Step4: テスト
指定されているお時間になると、EC2は自動停止 or 起動ができました。(今回の例は停止)
失敗したSNSの通信テストも成功した。