いずみこんな悩みを解決できる記事を書きました!
僕は現役フリーランスエンジニア(歴10年)で、資格は13個保有しています。
「EventBridge SchedulerでLambdaを定期的に動かしたい」とお考えではありませんか?
決まった時刻や一定間隔でLambda関数を呼び出したい方へ。
EventBridge Schedulerを使えば、1つのスケジュールリソースだけでcron実行やrate実行をまとめて管理できます。



サクッと解説します。
ということで、本記事ではEventBridge SchedulerでLambdaを定期実行する方法を解説します。



すぐ読み終わるので、ぜひ最後まで読んでくださいませ。
| 【当サイト】おすすめフリーランスエージェント3選 | |||
|---|---|---|---|
| エージェント | 評価 | ポイント | 公式サイト |
レバテックフリーランス | 5.0 | 業界最大級のエージェント。 高単価案件が豊富。 | 公式 |
Midworks | 4.8 | 満足度調査で 3年連続3冠を達成。 | 公式 |
ITプロパートナーズ | 4.6 | 週2〜3向けの案件が豊富。 | 公式 |
【AWS】EventBridge SchedulerでLambdaを定期実行する
早速ですが、EventBridge SchedulerでLambdaを定期実行する手順を見ていきます。
EventBridge Schedulerとは
EventBridge Schedulerは、cron式やrate式でターゲットを定期的に呼び出すための専用サービスです。
以前はEventBridgeルール(旧CloudWatch Events)のスケジュール実行でLambdaを動かす方法が一般的でした。
EventBridgeルールのスケジュール実行と比べると、EventBridge Schedulerには次のような違いがあります。
- スケジュールが独立した1リソースになり、イベントバスを消費しない
- 270以上のAWSサービス・6000以上のAPIをターゲットに指定できる
- タイムゾーン指定つきのcron式が使える
- リトライ回数・デッドレターキュー・実行時刻の許容幅(フレキシブルタイムウィンドウ)を標準で設定できる
- at式による1回限りの実行を指定できる
新しくスケジュール実行を組む場合、AWSはEventBridge Schedulerの利用を推奨しています。



旧EventBridgeルールでも定期実行はできますが、新規に作るならEventBridge Schedulerのほうが素直です。
事前準備(Lambda関数とIAMロール)
まずはターゲットになるLambda関数と、EventBridge Schedulerが使うIAMロールを用意します。
定期実行したい処理を持つLambda関数を作成しておきます。
関数のARNは後でスケジュールのターゲットに指定するので控えておきます。
EventBridge SchedulerがLambdaを呼び出すためのIAMロールを作ります。
信頼ポリシーのプリンシパルにはscheduler.amazonaws.comを指定します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": { "Service": "scheduler.amazonaws.com" },
"Action": "sts:AssumeRole"
}
]
}許可ポリシーには対象関数へのlambda:InvokeFunctionを付与します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "lambda:InvokeFunction",
"Resource": "arn:aws:lambda:ap-northeast-1:123456789012:function:my-batch"
}
]
}EventBridgeルールのスケジュール実行と違い、EventBridge SchedulerではLambda側のリソースベースポリシー(add-permission)は不要です。
呼び出し権限は、スケジュールに渡したIAMロールで判定されます。



ロールの信頼先をlambda.amazonaws.comにしてしまう事故が多いので注意です。
正しい信頼先はscheduler.amazonaws.comです。
マネジメントコンソールでスケジュールを作成する
EventBridge Schedulerのコンソールを開き、スケジュールを作成を選びます。
名前を入力し、必要ならスケジュールグループを指定します。
定期的なスケジュールを選び、rate式またはcron式を入力します。
cron式の場合はタイムゾーンをAsia/Tokyoに設定できます。
実行時刻を厳密にしたい場合、フレキシブルタイムウィンドウはオフにします。
ターゲットのAPIとしてAWS Lambdaの関数呼び出しを選びます。
対象のLambda関数と、渡すペイロード(JSON)を指定します。
実行ロールには、先ほど作成したIAMロールを選択します。



フレキシブルタイムウィンドウをオンにすると、指定した範囲内でばらけて実行されます。
負荷を分散したいバッチ向けの設定です。
AWS CLIでスケジュールを作成する
コンソールと同じ設定は、AWS CLIでも作成できます。
aws scheduler create-schedule \
--name invoke-lambda-hourly \
--schedule-expression 'rate(1 hour)' \
--flexible-time-window '{"Mode": "OFF"}' \
--target '{"Arn":"arn:aws:lambda:ap-northeast-1:123456789012:function:my-batch","RoleArn":"arn:aws:iam::123456789012:role/scheduler-invoke-lambda"}'schedule-expressionにcron式を使う場合は、schedule-expression-timezoneでタイムゾーンを指定します。
aws scheduler create-schedule \
--name invoke-lambda-0900-jst \
--schedule-expression 'cron(0 9 * * ? *)' \
--schedule-expression-timezone 'Asia/Tokyo' \
--flexible-time-window '{"Mode": "OFF"}' \
--target '{"Arn":"arn:aws:lambda:ap-northeast-1:123456789012:function:my-batch","RoleArn":"arn:aws:iam::123456789012:role/scheduler-invoke-lambda"}'boto3(Python)でスケジュールを作成する
Pythonから作成する場合は、boto3のschedulerクライアントを使います。
import boto3
client = boto3.client("scheduler", region_name="ap-northeast-1")
client.create_schedule(
Name="invoke-lambda-0900-jst",
GroupName="default",
ScheduleExpression="cron(0 9 * * ? *)",
ScheduleExpressionTimezone="Asia/Tokyo",
FlexibleTimeWindow={"Mode": "OFF"},
Target={
"Arn": "arn:aws:lambda:ap-northeast-1:123456789012:function:my-batch",
"RoleArn": "arn:aws:iam::123456789012:role/scheduler-invoke-lambda",
"Input": '{"job": "daily"}',
"RetryPolicy": {
"MaximumRetryAttempts": 3,
"MaximumEventAgeInSeconds": 3600,
},
"DeadLetterConfig": {
"Arn": "arn:aws:sqs:ap-northeast-1:123456789012:scheduler-dlq"
},
},
)一時的に止めたい場合は、update_scheduleでStateをDISABLEDに変更します。
不要になったスケジュールはdelete_scheduleで削除できます。



create_scheduleはFlexibleTimeWindowが必須項目です。
使わない場合もMode: OFFを明示的に渡します。
cron式とrate式の使い分け
単純な間隔で回すだけなら、rate式のほうが読みやすいです。
rate式は「正の整数 + 単位」で書き、rate(1 hour)やrate(15 minutes)のように指定します。
単位は数値が1のとき単数形、2以上のとき複数形にする決まりがあります。
毎日9時など時刻を固定したい場合はcron式を使います。
cron式は6フィールド(分・時・日・月・曜日・年)で、日か曜日のどちらかを?にします。
cron(0 9 * * ? *)は毎日9時、cron(0/30 * * * ? *)は30分ごとの実行になります。
リトライとデッドレターキューを設定する
ターゲット呼び出しが失敗したときの挙動は、TargetのRetryPolicyで制御します。
MaximumRetryAttemptsは最大リトライ回数(0〜185)です。
MaximumEventAgeInSecondsは、再試行を続ける最大時間(60〜86400秒)です。
リトライを使い切っても失敗したイベントは、DeadLetterConfigに指定したSQSキューへ送られます。
デッドレターキューを監視しておくと、気付かないうちに定期実行が失敗し続ける事態を防げます。



バッチが失敗しても静かにスキップされると気付けません。
デッドレターキューは早めに用意しておくと安心です。
| 【当サイト】おすすめフリーランスエージェント3選 | |||
|---|---|---|---|
| エージェント | 評価 | ポイント | 公式サイト |
レバテックフリーランス | 5.0 | 業界最大級のエージェント。 高単価案件が豊富。 | 公式 |
Midworks | 4.8 | 満足度調査で 3年連続3冠を達成。 | 公式 |
ITプロパートナーズ | 4.6 | 週2〜3向けの案件が豊富。 | 公式 |
【厳選】フリーランスエンジニアにおすすめなエージェント3選


フリーランスエンジニアになるにはエージェントから案件をもらう必要があります。
僕が実際に利用しているおすすめエージェントを紹介しますね。



エージェントは必ず複数登録してください。
担当者によっては「全然案件紹介してくれない…」みたいなこともあるので…
僕は実際に5つのエージェントを使い回していますよ。
フリーランスを始めるなら「レバテックフリーランス


」
- 業界最大級の案件数。
- 業界トップクラスの高単価報酬、低マージン(平均年収862万円)。
- 案件参画中のフォローの充実。
※詳細は「【業界最大手】レバテックフリーランスとは?メリットや利用手順を解説!」を参照。
レバテックフリーランス
![]()
![]()
とにかく案件数が多いので、とりあえず登録しておけば間違いないエージェントです!



僕もはじめてフリーランスの案件を貰ったのはレバテックフリーランス
![]()
![]()
保有している案件数が多いので、業務経験がなくても何かしらの案件は紹介してもらえますよ(僕はJavaの経験3年でも案件を貰えました)。
手厚い保障を重視したいなら「Midworks


」
- 手厚い保障で正社員並みの安心感。
- 還元率60%超え&単価公開でクリアな契約。
- 給与保障制度(審査あり)。
Midworks
![]()
![]()
フリーランスを目指しているけど不安な方や保障を重視したい方におすすめです。



僕も何度か案件を紹介してもらいました。
自分のスキルに合った案件を紹介してもらえましたし、電話のやり取りも非常に丁寧でした。
週2〜3日の案件探しなら「ITプロパートナーズ


」
- IT案件に特化したフリーランスエージェント。
- 週2〜3日の案件が豊富。
- リモート案件が多く、直エンドなので単価も高い。
※詳細は「【週2・3案件】ITプロパートナーズとは?メリットや利用手順を解説!」を参照。
ITプロパートナーズ
![]()
![]()
週2〜3日から参画できる案件が豊富なので、起業したい人にもおすすめです。



週2〜3日の案件はある程度スキルがないと紹介してもらえない印象です。
とはいえ、週5の案件ももちろんありますし、僕が利用した時は迅速・丁寧に対応していただきました!
よくある質問
従来のEventBridgeルール(cron)から移行すべきですか?
新規のスケジュール実行はEventBridge Schedulerが推奨されています。
既存のルールが問題なく動いているなら急いで移行する必要はありませんが、タイムゾーン指定やリトライ設定が欲しくなったタイミングで乗り換えると効果を感じやすいです。
LambdaにInvoke権限のリソースベースポリシーは必要ですか?
EventBridge Schedulerからの呼び出しでは不要です。
スケジュールに渡したIAMロールにlambda:InvokeFunctionが付いていれば動きます。
日本時間で実行するにはどうしますか?
cron式を使い、ScheduleExpressionTimezoneにAsia/Tokyoを指定します。
rate式は作成時刻からの相対間隔で動くため、タイムゾーンの指定はありません。
1回だけ実行したい場合はどうしますか?
at式(例: at(2026-01-01T09:00:00))を使うと単発実行になります。
ActionAfterCompletionにDELETEを指定すると、実行後にスケジュール自体を自動削除できます。
まとめ
今回は、EventBridge SchedulerでLambdaを定期実行する方法について解説しました。
以下が本記事のまとめになります。



最後までお読みいただき、ありがとうございました!
| 【当サイト】おすすめフリーランスエージェント3選 | |||
|---|---|---|---|
| エージェント | 評価 | ポイント | 公式サイト |
レバテックフリーランス | 5.0 | 業界最大級のエージェント。 高単価案件が豊富。 | 公式 |
Midworks | 4.8 | 満足度調査で 3年連続3冠を達成。 | 公式 |
ITプロパートナーズ | 4.6 | 週2〜3向けの案件が豊富。 | 公式 |
- クソおすすめ本



海外のエンジニアがどういった思考で働いているかが理解できます。
海外に行く気はないけど海外エンジニアの動向が気になる雑魚エンジニアにおすすめです(本当におすすめな本しか紹介しないのでご安心を)。








