Cronの記述方法はいつも忘れてしまいます。
検証環境のEC2とAuroraを自動起動/停止してコストカットしようと、EventBridgeにて設定を入れたのですが、Cronのプレビューでこけてしまって「さぁ、大変」というお話です。
やりたかったこと
- 平日の10時になったらEC2とAuroraを自動起動
- 平日の22時になったらEC2とAuroraを自動停止
利用するサービス
- EventBridge
- IAM
2年程前は、CloudWatch EventsとSystems Manager/Lambdaの組合せでないと実現できなかったのが、1サービスでOKになったのは嬉しいですね。
ポイント
「EC2 時間停止」とかで検索すると、上記のように複数サービス版がヒットするので注意ですね。
IAM_設定
以下を許可したIAMロールが必要です。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"rds:StartDBCluster",
"rds:StopDBCluster",
"ec2:StartInstances",
"ec2:StopInstances"
],
"Resource": [
"arn:aws:rds:ap-northeast-1:アカウントID:クラスターID",
"arn:aws:ec2:ap-northeast-1:アカウントID:インスタンスID"
]
}
]
}
クラスターIDは以下で確認できます。
RDS>データベース>リージョン別クラスター>設定
インスタンスIDは以下
EC2>インスタンス>該当インスタンス>詳細
項目はなんとなくマスクしています(笑)
EventBridge_Cron設定
Amazon EventBridge>スケジュール>スケジュールを作成>スケジュールのパターン
EC2は3~5分、RDSは10~20分ほど起動にかかるので、それを見越した時間を指定します。
★曜日を指定しなければプレビューが出る。
★曜日の項目を変更すると出ない
★「日付」のセクションを「?」にしないといけなかった。
「曜日」を「?」から、変更した場合には、「日付」の方を「?」にしないといけないみたいです。
「通らない!なぜだ!」ってなっていましたが、
公式ドキュメントにサンプルあったのでこれ見てれば一発でしたね・・・
Amazon EventBridge
スケジュールに従って実行する Amazon EventBridge ルールの作成
https://docs.aws.amazon.com/ja_jp/eventbridge/latest/userguide/eb-create-rule-schedule.html
■該当セクション
EventBridge_Target設定
- ■EC2
ターゲットの選択>すべてのAPI>EC2>StartInstances
- ■RDS
ターゲットの選択>すべてのAPI>StartDBCluster
- ■EC2
ターゲットの選択>すべてのAPI>EC2>StopInstances
- ■RDS
ターゲットの選択>すべてのAPI>StopDBCluster
- 対象リソースの指定方法
上述記載の画像の赤枠部分をそれぞれで指定するだけです。
■EC2
{
"InstanceIds": [
"インスタンスID"
]
}
■RDS-Aurora
{
"DbClusterIdentifier": "DBクラスターID"
}
リソースの指定で変にスペース等が入ってしまうと、上手く発動できないので注意です。
その他設定
残りの設定項目は、以下を指定すればOKです。
これでCronにて指定した時間で、EC2とRDSの起動/停止操作が実施されます。
最後に
Cronの部分で詰まなければ、5分もあれば1設定完了すると思います。
以上、この記事が誰かの役に立てば幸いです。