Edited at

AWS CLIからSSM Automationを使用したEC2/RDSのスケジュール起動・停止を設定する


概要

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

CWEventsStartStopAutomationRoleAmazonSSMAutomationRoleポリシーを付与します。

aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/service-role/AmazonSSMAutomationRole --role-name CWEventsStartStopAutomationRole

CWEventsStartStopAutomationRoleStartStopDBポリシーを付与します。

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-StartEC2InstanceAWS-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-StopEC2InstanceAWS-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


参考