はじめる前に
- 必須AWS アカウントを持ち、マネジメントコンソールにサインインできること
- 必須Lambda 関数をコンソールで作り、テスト実行した経験があること
- あると良い「ログ(処理の記録)」を見たことがある(本文で確認方法を説明します)
- あると良い「○分ごとに」「毎朝○時に」のような繰り返しスケジュールのイメージ
※ このハンズオンは すべてコンソールだけで完結します。動いた証拠は、画面上の「ログ」で確認します。
🌱 プログラミングがはじめての人へ
コードはこのページにすべて用意してあります。コピーして貼り付けるだけで動きます。書いてある内容は 1 行ずつ日本語で説明するので、いま意味が分からなくても大丈夫。「時間が来たら勝手にプログラムが動く」体験が目的です。
参照する公式ドキュメント
手順に迷ったときや、用語の意味を確かめたいときに開きましょう。
※ リンク切れの場合は、ページタイトルで検索してください。
背景・シナリオ
プログラムを動かすきっかけには、いろいろあります。ボタンを押す、Web からアクセスする、ファイルが置かれる——そして「決まった時間が来たら」というきっかけもあります。たとえば「毎朝 9 時にレポートを作る」「1 時間ごとに集計する」「毎日深夜に古いデータを片づける」といった、繰り返しの定期作業です。こうした作業を人が毎回手で実行するのは現実的ではありません。
そこで使うのが EventBridge スケジューラーです。スケジュール(「○分ごと」「毎朝○時」など)を登録しておくと、その時間が来るたびに、AWS が自動で Lambda 関数を呼び出してくれます。今回は、5 分ごとなど短い間隔で Lambda を自動実行し、「決まった間隔で勝手に動いている」ことをログで確かめます。
「スケジュール」と「タイマー」は同じもの?
イメージは近いです。EventBridge スケジューラーは、「いつ・何を動かすか」を登録しておく目覚まし時計のようなもの。設定した時刻や間隔になると、決めておいた相手(今回は Lambda)を自動で呼び出します。
どうやって動いたことを確認するの?
Lambda が動くたびに、プログラムの中でログ(記録)に一言書き出すようにします。あとから CloudWatch Logs を見ると、一定間隔でログが並んでいるのが見え、定期的に動いたことが分かります。
EventBridge スケジューラーで Lambda 関数を決まった間隔で自動実行するようにし、ログ(CloudWatch Logs)に、一定間隔で実行の記録が並んでいることを確認する。
つくる構成
EventBridge スケジューラーが、決めた間隔で Lambda 関数を呼び出します。関数は動くたびにログへ一言書き出すので、あとからログを見れば「定期的に動いた」ことが分かります。
スケジューラー
呼び出す
ログに一言書く
一定間隔で並ぶ
要件
以下の要件を満たし、ログで定期実行を確認してください。
| No | 要件 |
|---|---|
| 1 | リージョンは「東京(ap-northeast-1)」を使用する。 |
| 2 | Lambda 関数を 1 つ作成する。ランタイムは Python(最新版でよい)。本文のサンプル(実行されたことをログに書く)に置き換えて保存(デプロイ)する。 |
| 3 | EventBridge スケジュールを作成する。頻度は短めの間隔(例:5 分ごと)とし、ターゲットに手順 2 の Lambda 関数を指定する(実行用ロールはコンソールに自動作成させてよい)。 |
| 4 | 数回ぶんの間隔(例:10〜15 分)待ち、関数のログ(CloudWatch Logs)を確認する。 |
| 5 | ログに、一定間隔で実行された記録が複数並んでいることを確認する。 |
| 6 | 確認後、スケジュールを無効化または削除して、自動実行を止める。 |
構築の進め方
「関数を作る → スケジュールを登録する → 待ってログを見る → 止める」の順に進みます。最後に自動実行を必ず止めるところまでがセットです。
-
リージョンを合わせ、Lambda 関数を作る
リージョンが東京であることを確認し、
Lambdaコンソールで「関数の作成」→「一から作成」を選び、関数名scheduled-function、ランタイム Python(最新版)で作成します。 -
ログに一言書くコードを貼り付ける
「コードソース」の中身をすべて消して、次のコードを貼り付け、「Deploy」で保存します。
📝 ざっくり言うと:実行されるたびに「自動実行された」とログに書くだけのプログラムです。(細かい意味は、コードの下で 1 行ずつ説明します)
def lambda_handler(event, context): print("スケジュールで自動実行されました!") return "OK"
- def lambda_handler(event, context):関数の「入口」です。スケジュールの時間が来ると、AWS がここを実行します。
- print("スケジュールで自動実行されました!")
printは「ログ(記録)に書き出す」命令です。動くたびに、この一言がログに残ります。あとで CloudWatch Logs で読めます。 - return "OK"処理が終わったことを表すために「OK」を返しています。
-
EventBridge スケジュールを作成する
検索バーから
EventBridge Scheduler(または EventBridge の「スケジュール」)を開き、「スケジュールを作成」を押します。スケジュール名(例:every-5-min)を付け、頻度で「定期的なスケジュール」→ レート式で5 minutes(5 分ごと)を指定します。スケジュールの種類
レートベーススケジュール「○分ごと」のような単純な間隔で指定するCron 式スケジュール「毎朝 9 時」のような決まった時刻で指定する↳今回は「5 分ごと」という単純な間隔なので、レートベーススケジュールを選びます
「rate(レート)」と「cron」「○分ごと・○時間ごと」のような単純な間隔は rate(レート)で指定できます。「毎朝 9 時」のような決まった時刻は cron で指定します。今回は手早く確認するため、短い rate(5 分ごと)にします。
-
ターゲットに Lambda を指定して作成する
ターゲットの選択で 「AWS Lambda」→「Invoke」を選び、手順 1 の関数
scheduled-functionを指定します。実行に必要なロールは「新規作成」(コンソールにおまかせ)でかまいません。設定を確認してスケジュールを作成します。ロールは自動で用意できるスケジューラーが Lambda を呼び出すには権限(ロール)が必要ですが、コンソールが必要なロールを自動で作ってくれるので、難しい設定は不要です。「新規作成」を選んで進めましょう。
-
数回ぶん待って、ログを確認する
5 分ごとなら、10〜15 分ほど待つと数回実行されます。Lambda の関数画面で「モニタリング」→「CloudWatch ログを表示」を開き、「スケジュールで自動実行されました!」の記録が、5 分間隔で複数並んでいることを確認します。
時刻の間隔に注目ログに並んだ各記録の時刻を見ると、ほぼ 5 分ごとに増えているはずです。人が何もしていないのに、決めた間隔で動き続けている証拠です。
-
スケジュールを止める(無効化または削除)
確認できたら、必ずスケジュールを無効化または削除して、自動実行を止めます。EventBridge の「スケジュール」一覧で対象を選び、無効化(一時停止)または削除します。
止めないと動き続けるスケジュールを残したままにすると、ずっと 5 分ごとに動き続けます。無料枠の範囲に収まることが多いですが、無駄な実行を止めるためにも、確認後は止めておきましょう。
つまずきポイント
初学者がよく引っかかる箇所を先回りでまとめました。答えそのものは載せていませんが、「どこを見直せばよいか」の手がかりとして使ってください。
「いくら待っても、実行の記録が増えない」
①スケジュールが「有効」になっているか(無効のままだと動きません)、②ターゲットの Lambda 関数が正しく指定されているか、③最初の 1 回目が来るまで、間隔ぶん待ったか(5 分ごとなら、作成直後はまだ動いていないことがあります)を見直しましょう。実行用ロールの作成をスキップしていないかも確認します。
「気づいたらずっと動き続けていた」
スケジュールは、止めるまで延々と決めた間隔で動き続けます。学習では短い間隔(5 分ごと)にしているぶん、止め忘れると実行回数が積み上がります。確認できたら、スケジュールの無効化・削除を忘れずに行いましょう。後片づけでも改めて確認します。
完了チェック
要件の再確認ではなく、画面のどこを見れば達成を確認できるかをまとめました。Lambda・EventBridge・CloudWatch のコンソールを開いて、次を順に確かめましょう。
- Lambda 関数
scheduled-functionがあり、コードが Deploy 済みになっている。 - EventBridge の「スケジュール」に、作成したスケジュール(例:
every-5-min)がある。 - そのスケジュールのターゲットが、その Lambda 関数になっている。
- 関数のログ(CloudWatch Logs)に、一定間隔で実行された記録が複数並んでいる。
- 確認後、スケジュールを無効化または削除して自動実行を止めた。
考えてみよう
手を動かすことに加えて、次の問いに自分の言葉で答えられるようにしておくと、理解がより深まります。
- 「ボタンで動かす」「アクセスで動かす」「ファイルが置かれたら動かす」「決まった時間に動かす」——いろいろなきっかけがあります。今回の「定期実行」が向いているのは、どんな作業でしょうか。
ヒント
「毎日・毎時・毎週」のように、決まったタイミングで繰り返す作業に向いています。集計、片づけ、定期レポート、見回りなど。「誰かの操作を待つ」のではなく「時間が来たらやる」作業を思い浮かべてみましょう。 - 今回は「5 分ごと(rate)」で試しました。「毎朝 9 時だけ」のように決まった時刻に動かしたいときは、どんな指定にすればよさそうでしょうか。
ヒント
単純な間隔は rate、決まった時刻・曜日は cron で指定します。「毎朝 9 時」「平日だけ」のような細かい指定は cron が得意です。rate と cron の使い分け、という観点で考えてみましょう。 - 定期実行はとても便利ですが、止め忘れると動き続けます。安全に使うために、運用ではどんな工夫が考えられるでしょうか。
ヒント
不要になったら無効化・削除する、必要な間隔まで広げる(短すぎる間隔にしない)、一度だけ動かしたいなら「1 回限りのスケジュール」を使う、などが考えられます。「動かしすぎない」ための工夫、という観点で考えてみましょう。
後片づけ
いちばん大事なのは、自動実行を止めることです。次の順で片づけます。
- スケジュールを削除する:EventBridge の「スケジュール」一覧で、作成したスケジュールを削除します。これで自動実行が止まります。
- Lambda 関数を削除する:「関数」一覧で
scheduled-functionを選び、「アクション」→「削除」で消します。 - ログを削除する(任意):CloudWatch の「ロググループ」から、この関数のログを削除できます。
- 自動作成されたロールを削除する(任意):スケジューラー用にコンソールが作ったロールが残っていれば、不要なら IAM から削除できます。
関数だけ消しても、スケジュールは残る
Lambda 関数だけ削除しても、スケジュール自体は残り、呼び出しを試み続けます(対象がなくエラーになります)。確実に止めるには、先にスケジュールを削除(または無効化)しましょう。
コストに関する注意: EventBridge スケジューラーは、呼び出し回数に応じた料金で、毎月一定回数までの無料利用枠があります。Lambda も呼び出し回数・実行時間に応じた課金で、毎月かなりの回数までの無料枠があります。CloudWatch Logs もログ量に応じた料金(少量なら無料枠の範囲)です。5 分ごとの実行を短時間試す程度なら、ほぼ無料の範囲に収まることが多いですが、スケジュールを止め忘れて長期間動かし続けると、実行回数が積み上がります。使い終えたら、上の「後片づけ」でスケジュール・関数・ログを片づけましょう。最新の料金は AWS の公式料金ページで確認してください。