AWS Systems Managerを使ったAmazon RDSの自動停止・起動について
概要
MEGAZONE JAPANのジョンです。🫡
今回はAWS Systems Manager(以下(SSM)という)を使ったAmazon RDS(以下(RDS)という)の自動停止・起動について説明します。タイトルの通り、RDSのコスト削減に役に立つと思います。また、シンプルに対応できるのがメリットだと思いますね。今回実装する内容は以下の通りです。
SSMの一機能であるState Managerで、RDSを停止と起動の設定を行います。State ManagerはAWSリソースを定義された状態に保つプロセスを自動化するものですが、具体的な管理内容はAWS Consoleの AWS Systems Manager > Documents
から確認した方が良いと思います。
本設定にあたっての前提条件はRDSが作成されていることです。
なお、実装の手順は以下の通りです。
- IAM Policy作成
- IAM Role作成
- SSM(RDS Stop) 作成
- SSM(RDS Start) 作成
- 動作結果
Hands-on
1. IAM Policy作成
SSMに必要なIAM Role及びPolicyを作成します。まずはPolicyから作成しましょう。
Step1 : 以下のJSONで設定します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "RdsStartStop",
"Effect": "Allow",
"Action": [
"rds:StopDBInstance",
"rds:StartDBInstance"
],
"Resource": "${RDS_ARN}"
},
{
"Sid": "RdsDescribe",
"Effect": "Allow",
"Action": "rds:DescribeDBInstances",
"Resource": "*"
}
]
}
Step2 : Policy名を入力し、Policyを作成します。
2. IAM Role作成
次は、Policyを紐づけて、AWSのサービスができることを定義します。
Step1 :
- Trusted entity type : AWS service
- Use case > Service or use case : Systems Manager
- Use case > Use case : Systems Manager
Step2 :
- Permissions policies : 先ほど作成したPolicy
Step3 :
- Role name : Role名
設定ができたら、IAM Roleを作成します。
3. SSM(RDS Stop) 作成
これからはSSMを作成します。AWS Systems Manager > State Manager > Create association
に移動して、RDSの停止から作成します。
- Name : RDS Stop用のState Manager名
- Document : AWS-StopRdsInstance
- Execution : Simple execution
- InstanceId : DB instance ID (e.g., arn:aws:rds:us-east-1:123456789012:db:My-SQL-InstanceのMy-SQL-Instanceとなる。)
- AutomationAssumeRole : 先ほど作成したIAM Role
- Specify schedule : On Schedule
- Specify with : CRON schedule builder
- CRON schedule builder : Daily
- When to run the association : CRON時間はGMT基準となる。(e.g., 日本時間はGMT+9時間)
- Apply association only at the next specified cron interval : Checked
チェックを行う場合、次のCron設定時間から稼働する。
例:現在時間が12時、Cron設定を11時にすると、翌日11時からCronが動く
チェックを行わない場合、そのままトリガーされる。
例:現在時間が12時、Cron設定を11時にすると、12時なので、Cronが動く
上記の設定が終わったら、作成します。一つ注意点は、InstanceIdを入力する際に、Space無しでお願いします。SSMがRDSのことを認識しなくなって、Failになるためです。
4. SSM(RDS Start) 作成
SSMのRDS起動は停止設定と同じページ(AWS Systems Manager > State Manager > Create association
)でで以下の通りに設定します。
- Name : RDS Stop用のState Manager名
- Document : AWS-StartRdsInstance
- Execution : Simple execution
- InstanceId : DB instance ID (e.g., arn:aws:rds:us-east-1:123456789012:db:My-SQL-InstanceのMy-SQL-Instanceとなる。)
- AutomationAssumeRole : 先ほど作成したIAM Role
- Specify schedule : On Schedule
- Specify with : CRON schedule builder
- CRON schedule builder : Daily
- When to run the association : CRON時間はGMT基準となる。(e.g., 日本時間はGMT+9時間)
- Apply association only at the next specified cron interval : No Checked
チェックを行う場合、次のCron設定時間から稼働する。
例:現在時間が12時、Cron設定を11時にすると、翌日11時からCronが動く
チェックを行わない場合、そのままトリガーされる。
例:現在時間が12時、Cron設定を11時にすると、12時なので、Cronが動く
上記の設定が終わったら、作成します。当たり前の話ですが、RDS停止までの時間かかるため、起動時間が被らないように設定するのが良いでしょう。
5. 動作結果
State ManagerのRDS停止が動くと、しばらくしたらRDSのStatusがStopped temporarily
になっていることが確認できます。
State ManagerのRDS起動が動くと、RDSのStatusがAvailable
になっていることが確認できます。
最後に
RDSの自動停止・起動の実装方法はいくつかありますが、AWSは多様なサービスを提供していて、個人の好みや要件に合わせて選択できます。これにより、RDSのコストを削減してみるのはいかがでしょうか。
以上、AWS Systems Managerを使ったAmazon RDSの自動停止・起動についての記事でした。
ありがとうございました!
Discussion