TOP>コラム一覧>Auroraクラスターの自動起動を検知して停止させる方法

Auroraクラスターの自動起動を検知して停止させる方法

はじめに

こんにちは、雨宮です。 AWSが提供するデータベースのマネージドサービスであるRDSの仕様として停止して7日後に自動で起動するというものがあります。(公式

これは重要な更新を常に当て続けるためのものですが、自動起動後に自動停止まではしてくれないため、検証用に作成したRDSなどで予期せぬ課金が発生する可能性があります。

今回はEventBridgeのイベントパターンを使用してAuroraの自動起動を検知⇒Systems Managerオートメーションで自動停止させる方法について記載したいと思います。
AWSの公式BlogにもStep FunctionsとLambdaを用いた実装方法が掲載されています。今回はこちらで紹介されている実装よりもよりシンプルな方法になります。
※RDSの停止はあくまで検証や開発用途のための機能になります。本番用途のDB向けに提供されている機能ではないことを理解しておきましょう。AWS公式からの引用

“一時的なテストや毎日の開発作業のために、断続的に DB インスタンスを使用するとします。その場合は、コストを節約するために一時的に Amazon RDS DB インスタンスを停止できます。”

1. 概要

今回使用するAmazon EventBridge は、アプリケーションをさまざまなソースからのデータに接続するために使用できるサーバーレスのイベントバスサービスです。実装の流れとしては下記となります。

  1. ① Systems Managerオートメーション用のIAMポリシー・ロールの作成
  2. ② Auroraクラスターの起動イベントの確認
  3. ③ EventBridgeルールの作成
  4. ④ 動作確認

<前提条件>

  • Auroraクラスターは事前に作成済み
    • -DBクラスター名:autostop-testdb
    • -DBインスタンス名:autostop-testdb-instance-1
  • IAMポリシー・ロール、SSMの作成権限があるIAMユーザで操作を行う

2. Systems Managerオートメーション用のIAMポリシー・ロールの作成

まず、Systems ManagerオートメーションでAuroraクラスターを自動停止させるために必要なIAMポリシーとIAMロールを作成します。

① IAMポリシーの作成

IAMポリシーの作成で「JSON」タブを選択し、下記ポリシーをコピペしてください。
rdsのResourceに対象のAuroraクラスターのARNを記載してください。
ポリシー名、説明は下記としました。

  • ポリシー名:aurora-autostop-policy
  • 説明:Aurora Autmation Stop Policy

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "rds",
                "Effect": "Allow",
                "Action": [
                    "rds:StopDBCluster",
                    "rds:DescribeDBClusters"
                ],
                "Resource": [
                    "arn:aws:rds:ap-northeast-1:xxxxxxxxx:cluster:autostop-testdb"
                ]
            },
            {
                "Sid": "ssm",
                "Effect": "Allow",
                "Action": "ssm:*",
                "Resource": "*"
            }
        ]
    }
    

※xxxxxxxの部分はご自身のAWSアカウントのIDに置き換えてください。

② IAMロールの作成

信頼されたエンティティタイプ:「カスタム信頼ポリシー」
下記の信頼ポリシーを設定してください。


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

許可を追加で①で作成した「aurora-autostop-policy」を選択して次へ。

ロール名および説明は下記としました。

ロール名:aurora-autostop-role
説明:Aurora Autmation Stop Role

最後に「ロールを作成」を押下してください。

3. Auroraの起動イベントの確認

Auroraを手動で起動させ起動時のイベントパターンを下記のaws CLIコマンドで確認します。


    aws rds describe-events \
    --source-identifier <Auroraクラスター名>\
    --source-type <DBインスタンス名>

実行結果は下記となります。


    ~~~
    略
    ~~~
            {
                "SourceIdentifier": " autostop-testdb-instance-1",
                "SourceType": "db-instance",
                "Message": "Finished updating DB parameter group",
                "EventCategories": [
                    "configuration change"
                ],
                "Date": "2023-02-20T00:47:40.721000+00:00",
                "SourceArn":"arn:aws:rds:ap-northeast-1:xxxxxx:db:autostop-testdb-instance-1"
            }
        ]
    }

確認した最後のイベント「Finished updating DB parameter group 」を次のステップのEventBridgeのイベントパターンに登録します。

4. EventBridgeルールの作成

サービスからEventBridgeの「ルールを作成」を選択。

  • ルール名:aurora-autostop-rule(任意の名前)
  • 説明:Auroraの自動起動を検知して停止させるルール(任意の説明)
  • ルールタイプ:イベントパターンを持つルール
  • イベントソース:AWS イベントまたは EventBridge パートナーイベント
  • 作成のメソッド:カスタムパターン(JSONエディタ)

イベントパターンに下記を設定してください。


    {
        "detail-type": ["RDS DB Instance Event"],
        "source": ["aws.rds"],
        "detail": {
          "EventCategories": ["configuration change"],
          "SourceType": ["DB_INSTANCE"],
          "SourceArn": ["arn:aws:rds:ap-northeast-1:xxxxxxx:db: autostop-testdb-instance-1 "],
          "Message": ["Finished updating DB parameter group"]
        }
      }

※xxxxxxxはご自身のAWSアカウントIDに読み替えてください。
<ポイント>
※SourceArnには対象DBのインスタンス名を全て記載。
※MessageはDB設定によって起動完了時に出力されるイベントログが変わる為、事前に確認した対象DBの起動イベントログを設定してください。

  • ターゲットタイプ:AWSのサービス
  • ターゲットを選択:System Managerオートメーション
  • ドキュメント:AWS-StartStopAuroraCluster
  • ClusterName: 対象DBクラスター識別子名
  • Action: Stop
  • 実行ロール:aurora-autostop-role

以上でEventBridgeルールの作成は完了です。

5. 動作確認

最後にAuroraを手動で起動させEventBridgeルールによって自動で停止されるか確認してみましょう。
アクションから「開始」を選択。
ステータスが「起動中」→「利用可能」→「停止中」→「一時的に停止済み」に遷移することを確認できました。







EventBridgeのモニタンリングタブからも起動時刻付近に正しくルールが実行されたことを確認できました。

まとめ

Auroraクラスターの自動起動を検知して停止させる方法について記載させて頂きました。
EventBrigde+Lambdaの定期実行による自動停止パターンはよく目にしていたのですが、イベントパターンを使用した記事はあまり見かけなかったので作成してみました。
どなたかのお役にたてば幸いです。

CTCは、AWSのビジネス利活用に向けて、お客様のステージに合わせた幅広い構築・運用支援サービスを提供しています。
経験豊富なエンジニアが、ワンストップかつ柔軟にご支援します。
ぜひ、お気軽にお問い合わせください。

お問い合わせ

【著者プロフィール】

雨宮 啓太(あめみや けいた)

伊藤忠テクノソリューションズ株式会社 クラウドエンジニア

AWSを中心にエンタープライズ向けのクラウド基盤のプリセールス及び設計・導入を担当。
社内活動としてクラウドネイティブ構成の標準化に取り組んでいる。

雨宮 啓太(あめみや けいた)

TOP>コラム一覧>Auroraクラスターの自動起動を検知して停止させる方法

pagetop