検索
連載

停止したのに自動復旧で損してる? 「Amazon RDS」のインスタンス管理を「AWS Systems Manager Automation」で自動化する方法AWSチートシート

AWS活用における便利な小技を簡潔に紹介する連載「AWSチートシート」。今回は「AWS Systems Manager Automation」と「Amazon EventBridge」を利用した「Amazon Relational Database Service」(RDS)のインスタンス停止方法を紹介します。

PC用表示 関連情報
Share
Tweet
LINE
Hatena

 「Amazon Web Services」(AWS)活用における便利な小技を簡潔に紹介する連載「AWSチートシート」。以前、本連載の中で「AWS Systems Manager Automation」を利用した「リスクあるリソースの自動検知、自動修復」を紹介しました。今回は同じく運用時に便利なSystems Manager Automationと「Amazon EventBridge」を利用した「Amazon Relational Database Service」(RDS)のインスタンス停止方法を紹介します。

RDSのインスタンス管理について

 RDSは停止していても7日間で自動で復旧し、インスタンスが起動します。しかし、自動で起動されると余計な料金がかかってしまい、困る場面も多々あります。かといって削除すると、毎回インスタンスを作成しなければならないので手間になります。

 例えば、性能環境として用意していて、利用時のみ起動し、それ以外では停止し続けておきたい場合や、開発環境のために、日中のみ起動して夜間は停止したい場合などでSystems Manager AutomationとEventBridgeを利用したRDSのインスタンス管理を利用できます。

サービスの構築

 今回はテスト用にRDSのインスタンスを自動で作成し、その後RDS停止のAutomationをEventBridgeで定期的に実行し、RDSインスタンスを停止し続けるように設定します。特にスクリプトなどを記載する必要はなく、コンソール上で設定を全て完結できます。

 構築の手順は以下の通りです。

  1. RDSのインスタンス作成
  2. IAMの作成
  3. EventBridgeの作成

1.RDSのインスタンスの作成

 テスト用に停止させるRDSのクラスタ、インスタンスを作成します。テスト用なので、デフォルトで作成します。「AWSマネジメントコンソール」にログインし、RDSダッシュボードから「データベースの作成」をクリックします。

 遷移した画面で、次のように選択して「データベースの作成」を押します。

※今回、テスト用なので、簡単に作成しますが、現場で利用する際は可用性やセキュリティなどを考慮、検討して設定してください。

 ステータスが「利用可能」になったら、本工程は完了です。

2.IAMの作成

 次に、EventBridgeで利用する「AWS Identity and Access Management」(IAM)のロールを作成します。

 AWSマネジメントコンソールにログインし、IAMダッシュボードから「ロール」→「ロールの作成」とクリックして遷移した画面で、次のように選択して「次へ」を押します。

 今回必要なポリシーは「Amazon Aurora」、RDSの起動、停止に必要なポリシーのみなので、新しくポリシーを作成します。「ポリシーの作成」→「JSON」タブで次のようにJSONを設定します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": "ssm:StartAutomationExecution",
            "Effect": "Allow",
            "Resource": [
                "arn:aws:ssm:【リージョン名】:*:automation-definition/AWS-StartStopAuroraCluster:$DEFAULT",
                "arn:aws:ssm:【リージョン名】::automation-definition/AWS-StopRdsInstance:$DEFAULT"
            ]
        },
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "rds:StopDBCluster",
                "rds:StopDBInstance",
                "rds:DescribeDBClusters"
            ],
            "Resource": [
                "arn:aws:rds:*:【アカウントID】:cluster:*",
                "arn:aws:rds:*:【アカウントID】:db:*"
            ]
        }
    ]
}

 設定したら「次のステップ」→「次のステップ」を押します。

 ポリシーの名前、説明を設定し、「ポリシーの作成」を押します。

 ポリシーの作成が完了したら元のタブに戻り、IAMロールに先ほど作成したポリシーをアタッチして「次へ」を押します。

 ロール名に任意の名前を入力します。今回は「rds-stop-sample-role」という名前で登録します。

 ロールが作成されました。

 このままだとEventBridge、RDSが信頼されていないので、カスタマイズします。ロールの一覧から先ほど作成したロール名→「信頼関係」→「信頼ポリシーを編集」を押します。

 次のように編集し、「ポリシーを更新」を押します。

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

3. EventBridgeの作成

 EventBridgeダッシュボードを開き「ルール」をクリック後に「ルールの作成」を押します。開いた画面で以下のように設定します。名前、説明については任意の値を設定します。今回のAPI名は「rds-stop-sample-rule」とします。

 設定できたら「続行してルールを作成する」を押します。

 テストで確認するために5分おきに実行されるスケジュールに設定します。運用する際は他の処理などと重複しない時間帯など、要件に応じた時間に「cron」を設定してください。設定したら「次へ」を押します。

 次にターゲットを設定します。今回は、ここでSystems Manager Automationを設定します。以下のように設定し、「次へ」→「次へ」→「ルールの作成」を押します。

 ターゲットに「Systems Manager Automation」、ドキュメントに「AWS-StopRdsInstance」を設定すると、自動でRDSを停止します。対象のインスタンスとして、先ほど作成したRDSのインスタンスID(今回は「rds-stop-sample-instance-1」)を入力し、実行ロールには先ほど作成したIAMロール「rds-stop-sample-role」を設定します。

 ルールが作成されたら、構築は完了です。

動作確認

 ルールが作成されたので、RDSが停止されるかどうかを確認します。RDSは作成時のままなので、「利用可能」状態です。

 最初のEventBridgeが実行されました。

 その後、RDSインスタンスが「停止中」に切り替わることを確認できました。

終わりに

 今回はSystems Manager AutomationとEventBridgeを利用した、RDSインスタンスの停止方法を紹介しました。停止に関係するIAMポリシーとAutomationのドキュメントを変更することで定期起動も可能です。必要なときに、必要なものだけを起動する方法はAWSコスト管理の中でも重要になってきます。試してみてはいかがでしょうか。

筆者紹介

金光 適(かなみつ かなう)

株式会社システムシェアード システム開発事業部所属

最高の貢献を最高の仲間と届けることをミッションに普段はWebアプリケーションの開発を実施。API基盤開発、「AWS IoT Core」を利用した基盤構築とIoT機器から収集したデータを利用した機械学習によるレコメンドシステム開発、VM環境からAWS環境へのリプレースやAWS環境上で実施する性能試験など先端技術を用いた開発に従事。


Copyright © ITmedia, Inc. All Rights Reserved.

[an error occurred while processing this directive]
ページトップに戻る