はじめに
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回限りのスケジュールの指定が可能になった
Feature | Amazon EventBridge Scheduler | Amazon EventBridge rules |
---|---|---|
Quota on schedules | 1 million per account | 300 rule limit per account per Region |
Event invocation throughput | Able to support throughput in 1,000s of TPS | Because of the schedule limit, you can only have 300 1-minute schedules for max throughput of 5 TPS |
Targets | Over 270 services and over 6,000 API Actions with AWS SDK targets | 20+ targets supported by EventBridge |
Time expression and time-zones | at(), cron(), rate() All time-zones and DST | cron(), rate(), UTC No support for DST |
One-time schedules | Yes | No |
Time window schedules | Yes | No |
Event bus support | No event bus is needed | Default bus only |
Rule quota consumption | No. 1 million schedules soft limit | Yes, consumes from 2,000 rules per bus |
EventBridge Schedulerを作成してみる
EventBridge Scheduler スケジュールを作成します。AWS CLIを使用して作成します。
IAM ポリシー, IAMロールを作成する
- 最初のコマンドは、スケジューラーがIAMロール(SchedulerExecutionRole)を引き受けることを許可するポリシーを指定し、そのロールを作成します。作成されたロールのARNを出力します。
- 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よりも使い勝手が向上しています。
この記事がどなたかの参考になれば幸いです。
コメント