概要
EC2やRDSのスケジュール起動、停止について色々な実現方法がありますがSSM Automation
でも行うことができるのでAWS CLIから設定してみます。
手順
IAM Roleの作成
CloudWatch Eventsが使用するIAMRoleを作成します。
付与するポリシーは環境や要件に合わせて調整してください。
AssumeRolePolicyDocument.json
を作成します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "events.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
StartStopDB.json
を作成します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "rds:DescribeDBInstances", "rds:StartDBInstance", "rds:StopDBInstance" ], "Resource": [ "*" ] } ] }
IAM RoleCWEventsStartStopAutomationRole
を作成します。
aws iam create-role --role-name CWEventsStartStopAutomationRole --assume-role-policy-document file://AssumeRolePolicyDocument.json
CWEventsStartStopAutomationRole
にAmazonSSMAutomationRole
ポリシーを付与します。
aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/service-role/AmazonSSMAutomationRole --role-name CWEventsStartStopAutomationRole
CWEventsStartStopAutomationRole
にStartStopDB
ポリシーを付与します。
aws iam put-role-policy --role-name CWEventsStartStopAutomationRole --policy-name StartStopDB --policy-document file://StartStopDB.json
各ポリシーが付与されていることを確認します。
aws iam list-attached-role-policies --role-name CWEventsStartStopAutomationRole aws iam list-role-policies --role-name CWEventsStartStopAutomationRole
起動スケジュールの作成
StartTarget.json
を作成します。ターゲットにAutomationドキュメントのAWS-StartEC2Instance
とAWS-StartRdsInstance
を指定し。開始したいインスタンスIDを設定します。
[ { "Id": "1", "Arn": "arn:aws:ssm:ap-northeast-1::automation-definition/AWS-StartEC2Instance:$DEFAULT", "RoleArn": "arn:aws:iam::<AWSアカウントID>:role/CWEventsStartStopAutomationRole", "Input": "{\"InstanceId\":[\"<EC2インスタンスID>\"]}" }, { "Id": "2", "Arn": "arn:aws:ssm:ap-northeast-1::automation-definition/AWS-StartRdsInstance:$DEFAULT", "RoleArn": "arn:aws:iam::<AWSアカウントID>:role/CWEventsStartStopAutomationRole", "Input": "{\"InstanceId\":[\"<RDSインスタンスID>\"]}" } ]
起動ルールStartInstance
を作成します。日本時間で月-金の10時に起動します。
aws events put-rule --name StartInstance --schedule-expression "cron(0 1 ? * 2-6 *)"
StartInstance
にターゲットを紐付けます。
aws events put-targets --rule StartInstance --targets file://StartTarget.json
停止スケジュールの作成
StopTarget.json
を作成します。ターゲットにAutomationドキュメントのAWS-StopEC2Instance
とAWS-StopRdsInstance
を指定し、停止したいインスタンスIDを設定します。
[ { "Id": "1", "Arn": "arn:aws:ssm:ap-northeast-1::automation-definition/AWS-StopEC2Instance:$DEFAULT", "RoleArn": "arn:aws:iam::<AWSアカウントID>:role/CWEventsStartStopAutomationRole", "Input": "{\"InstanceId\":[\"<EC2インスタンスID>\"]}" }, { "Id": "2", "Arn": "arn:aws:ssm:ap-northeast-1::automation-definition/AWS-StopRdsInstance:$DEFAULT", "RoleArn": "arn:aws:iam::<AWSアカウントID>:role/CWEventsStartStopAutomationRole", "Input": "{\"InstanceId\":[\"<RDSインスタンスID>\"]}" } ]
停止ルールStopInstance
を作成します。日本時間で月-金の19時に停止します。
aws events put-rule --name StopInstance --schedule-expression "cron(0 10 ? * 2-6 *)"
StopInstance
にターゲットを紐付けます。
aws events put-targets --rule StopInstance --targets file://StopTarget.json
参考
- 自動化を CloudWatch Events のターゲットとして設定する (オプション)
- https://docs.aws.amazon.com/AmazonCloudWatchEvents/latest/APIReference/API_PutTargets.html