⏱️

AWS Systems Managerを使ったAmazon RDSの自動停止・起動について

2023/10/30に公開

概要

MEGAZONE JAPANのジョンです。🫡

今回はAWS Systems Manager(以下(SSM)という)を使ったAmazon RDS(以下(RDS)という)の自動停止・起動について説明します。タイトルの通り、RDSのコスト削減に役に立つと思います。また、シンプルに対応できるのがメリットだと思いますね。今回実装する内容は以下の通りです。

SSMの一機能であるState Managerで、RDSを停止と起動の設定を行います。State ManagerはAWSリソースを定義された状態に保つプロセスを自動化するものですが、具体的な管理内容はAWS Consoleの AWS Systems Manager > Documentsから確認した方が良いと思います。

本設定にあたっての前提条件はRDSが作成されていることです。
なお、実装の手順は以下の通りです。

  1. IAM Policy作成
  2. IAM Role作成
  3. SSM(RDS Stop) 作成
  4. SSM(RDS Start) 作成
  5. 動作結果

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の自動停止・起動についての記事でした。
ありがとうございました!

MEGAZONE株式会社 Tech Blog

Discussion