概要
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