AWS CLIでEventBridge Schedulerを活用して、イベント駆動型アプリケーションをスケジュールする

Uncategorized

はじめに

EventBridge Schedulerは 2022年11月に発表されたサービスで、イベント駆動型のアプリケーションを簡単にスケジュールすることができるサービスです。この記事では、EventBridge Schedulerの概要や使い方を紹介していきます。

EventBridge Rules との違い

従来より AWS には EventBridge Rules というサービスが存在していました。EventBridge Rulesは、イベントパターンに基づいてイベントをルーティングする機能です。一方、EventBridge Schedulerは、定期的なイベントをトリガーするためのサービスです。EventBridge RulesとSchedulerの主な違いは、Schedulerが時間ベースのイベントスケジューリングに特化していることです。
以下はIntroducing Amazon EventBridge Scheduler | AWS Compute Blogより抜粋した表です。時間ベースのイベントスケジューリングを行う場合、EventBridge Scheduler の方がより高機能と言えそうです。
特に以下の点は個人的に EventBridge Rules から使い勝手が良くなったと考えている点です。

  • ターゲットの豊富さ(6000以上ものAWSサービスのAPIが直接コールできる)
  • タイムゾーンの指定ができる
  • 1回限りのスケジュールの指定が可能になった
FeatureAmazon EventBridge SchedulerAmazon EventBridge rules
Quota on schedules1 million per account300 rule limit per account per Region
Event invocation throughputAble to support throughput in 1,000s of TPSBecause of the schedule limit, you can only have 300 1-minute schedules for max throughput of 5 TPS
TargetsOver 270 services and over 6,000 API Actions with AWS SDK targets20+ targets supported by EventBridge
Time expression and time-zonesat(), cron(), rate()
All time-zones and DST
cron(), rate(), UTC
No support for DST
One-time schedulesYesNo
Time window schedulesYesNo
Event bus supportNo event bus is neededDefault bus only
Rule quota consumptionNo. 1 million schedules soft limitYes, consumes from 2,000 rules per bus

EventBridge Schedulerを作成してみる

EventBridge Scheduler スケジュールを作成します。AWS CLIを使用して作成します。

IAM ポリシー, IAMロールを作成する

  1. 最初のコマンドは、スケジューラーがIAMロール(SchedulerExecutionRole)を引き受けることを許可するポリシーを指定し、そのロールを作成します。作成されたロールのARNを出力します。
  2. 2番目のコマンドは、EC2インスタンスの起動と停止を許可するポリシー(EC2StartAndStopPermissions)を作成し、そのポリシーを先程作成したロール(SchedulerExecutionRole)にアタッチします。
POLICY_JSON='{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "scheduler.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}'

ROLE_ARN_RAW=$(aws iam create-role --role-name SchedulerExecutionRole --assume-role-policy-document $POLICY_JSON --query "Role.Arn")
ROLE_ARN=$(echo $ROLE_ARN_RAW | tr -d '"')
echo $ROLE_ARN
POLICY_JSON='{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:StartInstances",
                "ec2:StopInstances"
            ],
            "Resource": "*"
        }
    ]
}'

POLICY_ARN_RAW=$(aws iam create-policy --policy-name EC2StartAndStopPermissions --policy-document $POLICY_JSON --query "Policy.Arn")
POLICY_ARN=$(echo $POLICY_ARN_RAW | tr -d '"')
echo $POLICY_ARN

aws iam attach-role-policy --policy-arn $POLICY_ARN --role-name SchedulerExecutionRole

EventBridge Schedulerスケジュールを作成する

EventBridge Schedulerを使ってスケジュールを作成する手順は以下の通りです。

このコマンドは、AWS CLIを使って特定のEC2インスタンス(i-a1b2c3d4e5f6g7h8i9)を毎月1日の9時(Asia/Tokyoタイムゾーン)に起動するEventBridgeスケジュールを作成するものです。スケジュール名はstart-ec2で、柔軟な実行ウィンドウは無効に設定されています。

INSTANCE_ID="i-a1b2c3d4e5f6g7h8i9"

aws scheduler create-schedule \
  --name start-ec2 \
  --schedule-expression "cron(0 9 1 * ? *)" \
  --schedule-expression-timezone "Asia/Tokyo" \
  --flexible-time-window '{ "Mode": "OFF"}' \
  --target '{"RoleArn": "'"${ROLE_ARN}"'", "Arn": "arn:aws:scheduler:::aws-sdk:ec2:startInstances", "Input": "{\"InstanceIds\" : [\"'"${INSTANCE_ID}"'\"] }" }'

おわりに

本記事では、AWS CLI を使用して、IAM ポリシーとロールを設定し、EventBridge Scheduler で EC2 インスタンスの起動をスケジュールする方法を紹介しました。
EventBridge Schedulerは、ターゲットの豊富さやタイムゾーンの指定など、EventBridge Rulesよりも使い勝手が向上しています。
この記事がどなたかの参考になれば幸いです。

参考

コメント