はじめに
AWSのRDSは停止しても7日間経過すると自動で起動されてしまいます。知らないうちに起動されて課金されることを防ぐためにRDS(今回はDocDB)を自動停止する仕組みをSSMオートメーションで試してみました。
準備
まずSSMドキュメントを実行するロールを作ります。
AmazonEC2FullAccessは無くても良いですがEC2も停止するケースも考慮して含めています。
作成したロールの信頼関係を編集をします。
作成したロールを選択して信頼関係の編集から
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"events.amazonaws.com",
"ssm.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}
保存すると信頼されたエンティティに2つ表示されます。
events.amazonaws.comはCloudWatch Eventsからcron的に呼び出す際に必要、ssm.amazonaws.comはSSMのマネージメントコンソールからテスト実行する際に必要になります。
次にPassRole用インラインポリシーを作成してアタッチします。
作成したロールのアクセス権限 > インラインポリシーの追加から
これでSSMサービスへこのロールを渡して使えるようになります。
自動化用SSMドキュメントを作る
SSM > ドキュメント > オートメーションを作成する と進んでエディタタブから編集します。
description: stop docdb
schemaVersion: '0.3'
assumeRole: '{{ AutomationAssumeRole }}'
parameters:
AutomationAssumeRole:
type: String
description: (Optional) The ARN of the role that allows Automation to perform the actions on your behalf.
default: 'arn:aws:iam::xxxxxxxxxxxx:role/xxxxxxxx-ssm-automation-role'
mainSteps:
- name: "stop_xxxxxxxx_docdb"
action: 'aws:executeAwsApi'
maxAttempts: 3
onFailure: Continue
inputs:
Service: docdb
Api: StopDBCluster
DBClusterIdentifier: xxxxxxxx-docdb
- name: "stop_xxxxxxxx_docdb"
action: 'aws:executeAwsApi'
maxAttempts: 3
onFailure: Continue
inputs:
Service: docdb
Api: StopDBCluster
DBClusterIdentifier: xxxxxxxx-docdb
テスト実行
SSM > ドキュメント > 自己所有 > 作成したドキュメント > オートメーションを実行する
後はこのSSMドキュメントをCloudWatch Eventsからcronスケジュールで呼び出せば自動停止の完成です。