🐥

EventBridge Schedulerを使用してEC2を定期的に停止する

2023/06/03に公開

EventBridge Schedulerを使用して、EC2の停止を試してみました。
こいつを使うことで、タイムゾーンを指定できたり、Lambdaを管理しなくてすみます。
運用する側に優しいです。

手順

IAMRole作成

  • 信頼関係は以下のように、scheduler.amazonaws.comをPrincipalで指定します
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "scheduler.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
  • ポリシーはstopinstanceを出来るポリシーをアタッチします。

Schedule作成

cron式、rateベース(~分おき、~時間に1度)が選択出来ます。
毎日17:00にEC2を停止する場合、以下のようなcronを作成します。

00 17 * * ? *

https://docs.aws.amazon.com/ja_jp/scheduler/latest/UserGuide/schedule-types.html#cron-based

API・ターゲット指定

今回はEC2のstopinstancesAPIを叩くので、
Service:EC2、API:stopinstancesを指定します。

対象のインスタンスについてはjsonで指定します。

{ "InstanceIds": [ "<instanceid>" ] }

IAMロールアタッチ・動作確認

先程作成したIAMロールをアタッチし、ターゲットとして指定したEC2が止まっていることが確認できればOKです。

ログ

EventBridge Schedulerのログはcloudtrailから確認することが出来ます。
絞り込む場合はEvent name > Stopinstancesで絞り込めばOKです

Cloudformationテンプレート

こちらのDevelopersIOの記事が大変わかりやすいです。
そのままでも問題なく動作します。
https://dev.classmethod.jp/articles/cloudformation-template-eventbridge-scheduler-ec2-start-stop/

参考

https://aws.amazon.com/jp/blogs/compute/introducing-amazon-eventbridge-scheduler/
https://tech.nri-net.com/entry/easy_implementation_with_eventbridge_scheduler

Discussion