AWS活用における便利な小技を簡潔に紹介する連載「AWSチートシート」。今回は「AWS Systems Manager Automation」と「Amazon EventBridge」を利用した「Amazon Relational Database Service」(RDS)のインスタンス停止方法を紹介します。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
「Amazon Web Services」(AWS)活用における便利な小技を簡潔に紹介する連載「AWSチートシート」。以前、本連載の中で「AWS Systems Manager Automation」を利用した「リスクあるリソースの自動検知、自動修復」を紹介しました。今回は同じく運用時に便利なSystems Manager Automationと「Amazon EventBridge」を利用した「Amazon Relational Database Service」(RDS)のインスタンス停止方法を紹介します。
RDSは停止していても7日間で自動で復旧し、インスタンスが起動します。しかし、自動で起動されると余計な料金がかかってしまい、困る場面も多々あります。かといって削除すると、毎回インスタンスを作成しなければならないので手間になります。
例えば、性能環境として用意していて、利用時のみ起動し、それ以外では停止し続けておきたい場合や、開発環境のために、日中のみ起動して夜間は停止したい場合などでSystems Manager AutomationとEventBridgeを利用したRDSのインスタンス管理を利用できます。
今回はテスト用にRDSのインスタンスを自動で作成し、その後RDS停止のAutomationをEventBridgeで定期的に実行し、RDSインスタンスを停止し続けるように設定します。特にスクリプトなどを記載する必要はなく、コンソール上で設定を全て完結できます。
構築の手順は以下の通りです。
テスト用に停止させるRDSのクラスタ、インスタンスを作成します。テスト用なので、デフォルトで作成します。「AWSマネジメントコンソール」にログインし、RDSダッシュボードから「データベースの作成」をクリックします。
遷移した画面で、次のように選択して「データベースの作成」を押します。
※今回、テスト用なので、簡単に作成しますが、現場で利用する際は可用性やセキュリティなどを考慮、検討して設定してください。
ステータスが「利用可能」になったら、本工程は完了です。
次に、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" } ] }
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.