- 公開日
- 最終更新日
【AWS初学者向け】EventBridge SchedulerでLambdaを呼び出して実行してみる
この記事を共有する
目次
はじめに
AWSでは、利用していないリソースでも種類によって料金が発生する場合があります。
検証環境などでは、消し忘れたリソースや停止していないインスタンスが残っていないか、定期的に確認することが大切です。
しかし、確認作業を手動で繰り返すと確認漏れの可能性も生じます。
そこで、EventBridge SchedulerとLambdaを組み合わせることで、こういった定期的な設定確認やその他の運用作業において自動化・効率化が実現できます。
本記事では、この2つのサービスを利用して簡易的な確認作業を指定時刻に自動実行する構成を作成していきます。
本記事の対象者
本記事は、次のようなAWS初学者を対象としています。
- EventBridge SchedulerやLambdaを初めて触る方
- EventBridge SchedulerやLambdaを使った作業効率化のイメージを持ちたい方
EventBridge SchedulerとLambdaについて
今回利用する、EventBridge SchedulerとLambdaというAWSサービスについてそれぞれ概要を説明します。
Lambdaはユーザーがサーバー構築や管理をせずに、コードを実行できる環境を提供するサーバ―レスのサービスです。
EventBridgeとは、AWSサービスやアプリケーションなどから後続処理のトリガーとなるイベントを受け取り、指定した条件に合致した場合に他のサービスへイベントを受け渡す、サービス間の橋渡しをするサービスです。 そのEventBridgeのスケジューラ機能を提供している一機能がEventBridge Schedulerとなります。
EventBridge Schedulerでは以下の3通りの方法で起動タイミングを設定できます。
- 指定した日時に1回だけ実行
- cron式での定期実行(年月日、曜日、時間などを指定する方式)
- rate式での繰り返し実行(実行間隔を分、時、日単位の一定間隔で指定する方式)
ターゲットの指定は以下の2種類があります。
- テンプレートターゲット
よく使われるAWSサービスの操作を簡単に指定できるターゲットです。 Lambda関数の呼び出し、Amazon ECSタスクの実行、AWS Step Functionsの開始、Amazon SNSへの通知発行など
- ユニバーサルターゲット
AWS SDKで提供されているAPI操作を指定できるターゲットです。 テンプレートターゲットに対応していないAWSサービスや、対応しているが別のAPI操作をさせたい場合に活用できます。
作成する構成
今回は簡易的な確認作業を模して、以下の処理を動かしてみます。
- Amazon EventBridge Schedulerが指定時刻にLambdaを呼び出します。
- Lambda関数が実行され、CloudWatch Logsのロググループを一覧取得します。その後、保持期間が設定されていないロググループと確認件数を標準出力へ表示します。
- Lambdaからの標準出力がAmazon CloudWatch Logsへ保存されます。
CloudWatch Logsのロググループで保持期間が設定されていないものがリストアップされてログに出力されれば成功とします。 ※実運用の場面では、ロググループの保持期間の変更や不要なログの削除、Amazon SNSと連携して確認結果のメール通知などを実施するかもしれませんが、本ハンズオンでは簡易的な作業として、対象リソースの読み取りと確認結果のログ出力までを実施します。
構成図

前提条件
- AWSアカウントを利用できること
- AWS マネジメントコンソールへサインインできること
※IAMを除く各AWSサービスは、東京リージョン(ap-northeast-1)で操作します。
手順1:Lambda関数を作成する
① AWS マネジメントコンソールの検索欄へ「Lambda」と入力し、Lambdaを選択します。
② 画面右上のリージョンがアジアパシフィック(東京)ap-northeast-1になっていることを確認します。

③ 関数の作成を選択します。

④ 一から作成を選択します。
⑤ 次の値を設定します。
| 項目 | 設定値 |
|---|---|
| 関数名 | eventbridge-lambda-handson |
| ランタイム | Python 3.xx |

⑥ その他の設定を開き、カスタム実行ロールの設定を展開します。

⑦ 基本的なLambdaアクセス権限で新しいロールを作成を選択します。
⑧ ロール名は、EventBridgeLambdaHandsonRoleを入力します。
⑨ 下記のJSONを追加ポリシーの欄に貼り付けて、Lambda実行ロールへポリシー追加します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "CloudWatchLogsRead",
"Effect": "Allow",
"Action": "logs:DescribeLogGroups",
"Resource": "*"
}
]
}

⑩ロールが正常に作成された表示を確認した後に、保存を押下

⑪ そのほかの設定は初期値のまま、関数の作成を選択します。
※関数作成時に、Lambdaが基本的なAmazon CloudWatch Logsへのログ出力に使用する実行ロールが作成されます。ロググループ/aws/lambda/eventbridge-lambda-handsonについても、通常、関数を初回実行したときに作成されます。
手順2:Lambda関数のコードを作成する
Lambdaのコードエディターに表示されているサンプルコードをすべて削除し、次のコードへ置き換えてください。
import boto3
def lambda_handler(event, context):
"""ロググループの保持期間を確認します。"""
del event, context
# 対象リージョンは東京リージョンに固定します。
logs_client = boto3.client("logs", region_name="ap-northeast-1")
count = 0
try:
paginator = logs_client.get_paginator("describe_log_groups")
for page in paginator.paginate():
for log_group in page.get("logGroups", []):
if "retentionInDays" not in log_group:
print(
"保持期間無期限の確認候補:"
+ log_group.get("logGroupName", "")
)
count += 1
except Exception as error:
print("CloudWatch Logsの確認に失敗しました:" + str(error))
print("確認が完了しました。確認件数:" + str(count))
return {"findingCount": count}
コードを貼り付けたらDeployを選択します。

手順3:Lambdaを手動でテストする
① Lambda関数のテストタブを開きます。
② テストイベント名にHandsonTestを入力します。
③ イベントJSONへ次の空JSONを入力します。
{}
④ 保存を選択します。
⑤ Testを選択します。

実行結果には、次のような内容が表示されます。確認件数やロググループ名は実施環境のロググループ設定によって変わります。
保持期間無期限の確認候補:/example/log-group
確認が完了しました。確認件数:1

確認候補がない場合は、次のように件数0の正常な結果になります。
確認が完了しました。確認件数:0
手順4:CloudWatch Logsで実行結果を確認する
① Lambda関数のモニタリングタブを開きます。
② CloudWatchログを表示を選択します。

③ ロググループ「/aws/lambda/eventbridge-lambda-handson」を開きます。
④ 最新のログストリームを開きます。

⑤ 「保持期間無期限の確認候補」と「確認が完了しました。確認件数:」の行を確認します。

保持期間が設定されていないロググループの洗い出しがされていることを確認できます。

手順5:EventBridge Schedulerでテストを実行する
① AWS マネジメントコンソールの検索欄へ「EventBridge」と入力し、Amazon EventBridgeを選択します。

② 左側のメニューからスケジュールを選択します。
③ スケジュールを作成 を選択します。

④ 次の値を設定し、次へを押下します。
| 項目 | 設定値 |
|---|---|
| スケジュール名 | eventbridge-lambda-handson-schedule |
| スケジュールグループ | default |
| スケジュールのパターン | 1回限りのスケジュール |
| 実行時刻 | 現在時刻から5~10分後 |
| タイムゾーン | Asia/Tokyo |
| フレックスタイムウィンドウ | オフ |

⑤ ターゲットとしてLambda関数「eventbridge-lambda-handson」を指定します。
⑥ 入力に次の空JSONを指定して、次へを押下します。
{}

⑦ スケジュール完了後のアクションはNONEを選択します。(DELETEを選択すると処理実行後にスケジュールが自動削除されます。)
⑧ 実行ロールはこのスケジュールの新しいロールを作成を選択し、ロール名を「EventBridgeLambdaHandsonSchedulerRole」と記入します。
※必要なポリシーは自動で設定されるのでここではロール名の指定だけでOKです。

⑧ スケジュールを作成を選択します。

EventBridge Schedulerの実行ロールについて
今回はIAMポリシーが自動作成されるため意識されないかもしれませんが、実行ロールにはポリシーが必ず揃っている必要があります。
Lambda関数を呼び出す際には「lambda:InvokeFunction」のActionを許可するポリシーの付与が必要となります。
もし、後続の手順でLambda関数が呼び出されない場合には、EventBridge Schedulerの実行ロールでIAMポリシーが上手く設定されているかを確認しましょう。
※また、本ハンズオンではIAMロールが2種類登場しています。
それぞれ権限を利用する/利用されるサービスが異なり必要なポリシーも違うため、混同しないように注意しましょう。
- Lambda実行ロール: Lambda関数がCloudWatch Logsを読み取るために使用します。
- EventBridge Scheduler実行ロール: EventBridge SchedulerがLambda関数を呼び出すために使用します。
誰が、どのサービスに対して、何をするのかを意識して、IAMロールを使い回したり過剰な権限を付与することがないようにしましょう。
手順6:Schedulerの実行結果をLambdaの実行ログから確認する
設定した指定時刻を過ぎた後、次の順序で確認します。
① ロググループ「/aws/lambda/eventbridge-lambda-handson」で、指定時刻付近の新しいログを確認します。

② 「確認が完了しました。確認件数:」の行を確認し、保持期間が設定されていないロググループが検出されていること確認します。

Schedulerが成功し、Lambdaログに確認結果が出力されていれば、指定時刻にLambdaを呼び出す処理が動作したと判断できます。
定期実行へ発展させる
EventBridge Schedulerでスケジュールパターンを変更すれば、繰り返しの定期スケジュールへ変更できます。
例えば、1日ごとに実行する場合は次のrate式を使用します。
rate(1 day)

毎月1日の午前9時に実行する例は、タイムゾーンをAsia/Tokyoに設定したうえで次のcron式を使用します。
cron(0 9 1 * ? *)

実運用では、再試行、デッドレターキュー、通知、実行時間上限なども検討します。まず少数の対象で動作を確認し、検知、通知、所有者確認、承認の順に段階的に導入してください。
まとめ
本記事では、Amazon EventBridge SchedulerからLambda関数を指定時刻に呼び出し、自動実行できることを確認しました。繰り返しスケジュールへ変更すれば、定期的な確認作業へ発展できます。
今回はロググループの保持期間を確認してログ出力するだけの簡易的な内容としましたが、実運用では未使用のElastic IPやEBSボリュームの定期的な確認および通知や、EC2やRDSインスタンスの自動起動・自動停止など日々の作業を簡単に効率化できます。
このハンズオンを通して、EventBridge SchedulerとLambdaを組み合わせることで、運用作業を自動化・効率化できるイメージを持っていただければ幸いです。
この記事は私が書きました
T.Hosoi
記事一覧2025年11月入社です。AWS資格の全冠目指して修行中です。 カレー屋巡りが趣味です。