3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Cloudwatch EventsとSSM オートメーションを使用してRDSの自動停止・起動を試してみた

Last updated at Posted at 2021-07-06

概要

クラスメソッドさんの記事の通りです。
RDSの設定方法がなかったので、主にRDSの検証内容について記載します。
https://dev.classmethod.jp/articles/tsnote-ec2-ssm-automation/

作業手順

IAMロールの作成

ロール名: event-ssm-automation-role
ポリシーをアタッチ: AmazonSSMAutomationRole

Cloudwatch Eventsにロールを付与するので、信頼関係の編集を実施します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "events.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

■RDS用のポリシー作成
必要な権限は以下の通りです。
※DescribeDBInstances がないとSSMオートメーションの実行前と実行後のステータスチェックができなくなります。ステータスチェックが失敗しても動作はしましたが全体のステータスも失敗になります。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "rds:DescribeDBInstances",
                "rds:StopDBInstance",
                "rds:StartDBInstance"
            ],
            "Resource": "arn:aws:rds:ap-northeast-1:<AWSアカウントID:db:<DBインスタンス名>"
        }
    ]
}

エラーが出ている場合はSSM→StepIDからエラー詳細を確認できます。

An error occurred (AccessDenied) when calling the DescribeDBInstances operation: User: arn:aws:sts::xxxxxxxxxxxx:assumed-role/event-ssm-automation-role/ba0cd0d13d1b38bbae3b4b2f8bb71482 is not authorized to perform: rds:DescribeDBInstances on resource: arn:aws:rds:ap-northeast-1:xxxxxxxxxxxx:db:kaba-test-auto-start-stop-20210706

CloudwatchEventsの設定

CloudwatchEventsの設定方法についてはクラスメソッドさんの記事にある通りなので割愛いたします。
インスタンスIDの部分はRDSのインスタンス識別子でOK
cron方式の場合は、UTCなので注意が必要です。
SSM ドキュメント

  • 停止の場合: AWS-StopRdsInstance
  • 起動の場合: AWS-StartRdsInstance

あれ?っとなったところ

image.png

全体的なステータス が成功してもステップ1が失敗になるのが気になって調べてみました。
SSMドキュメントのAWS-StopRdsInstanceを確認すると DesiredValues: ["stopped", "stopping"] で RDSのステータスがstoppedかstoppingになっていれば、ステータスが成功になるので起動中のRDSに対しては「失敗」になっていることが正常でした。
試しに停止中のRDSへ実行してみると「AssertNotStopped」は成功になりました。
なんか気持ちわるいですね(^^;

ステップ名: AssertNotStopped
アクション: aws:assertAwsResourceProperty
ステータス: 失敗

SSMドキュメントのAWS-StopRdsInstance

##一部抜粋
 -
    name: AssertNotStopped
    action: aws:assertAwsResourceProperty
    isCritical: false
    onFailure: step:StopInstance
    nextStep: CheckStop
    inputs:
      Service: rds
      Api: DescribeDBInstances
      DBInstanceIdentifier: "{{InstanceId}}"
      PropertySelector: "$.DBInstances[0].DBInstanceStatus"
      DesiredValues: ["stopped", "stopping"]

最終的な実行結果

image.png

まとめ

RDSも簡単にcron形式でstop/startが自動化できました!
SNSでSSMオートメーションが失敗した時に通知を送ることもできるようなので次回検証してみたいと思います。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?