← ハンズオン一覧に戻る

AWS Hands-on / Serverless

決まった間隔でプログラムを自動実行する

EventBridge スケジューラーを使って、Lambda 関数を「決まった間隔で」自動実行します。ボタンも、外からのアクセスも要らず、時間が来たら勝手に動く——「定期実行」という自動化のかたちを、ログで動いた証拠を見ながら体験します。コードは 1 行ずつ言葉で説明します。

● Lv.2 基本的なリソースを作れる人 ⏱ 所要 30〜50 分 すべてコンソールで完結
01 — Prerequisites

はじめる前に

  • 必須AWS アカウントを持ち、マネジメントコンソールにサインインできること
  • 必須Lambda 関数をコンソールで作り、テスト実行した経験があること
  • あると良い「ログ(処理の記録)」を見たことがある(本文で確認方法を説明します)
  • あると良い「○分ごとに」「毎朝○時に」のような繰り返しスケジュールのイメージ

※ このハンズオンは すべてコンソールだけで完結します。動いた証拠は、画面上の「ログ」で確認します。

🌱 プログラミングがはじめての人へ

コードはこのページにすべて用意してあります。コピーして貼り付けるだけで動きます。書いてある内容は 1 行ずつ日本語で説明するので、いま意味が分からなくても大丈夫。「時間が来たら勝手にプログラムが動く」体験が目的です。

02 — References

参照する公式ドキュメント

手順に迷ったときや、用語の意味を確かめたいときに開きましょう。

※ リンク切れの場合は、ページタイトルで検索してください。

03 — Background

背景・シナリオ

プログラムを動かすきっかけには、いろいろあります。ボタンを押す、Web からアクセスする、ファイルが置かれる——そして「決まった時間が来たら」というきっかけもあります。たとえば「毎朝 9 時にレポートを作る」「1 時間ごとに集計する」「毎日深夜に古いデータを片づける」といった、繰り返しの定期作業です。こうした作業を人が毎回手で実行するのは現実的ではありません。

そこで使うのが EventBridge スケジューラーです。スケジュール(「○分ごと」「毎朝○時」など)を登録しておくと、その時間が来るたびに、AWS が自動で Lambda 関数を呼び出してくれます。今回は、5 分ごとなど短い間隔で Lambda を自動実行し、「決まった間隔で勝手に動いている」ことをログで確かめます。

「スケジュール」と「タイマー」は同じもの?

イメージは近いです。EventBridge スケジューラーは、「いつ・何を動かすか」を登録しておく目覚まし時計のようなもの。設定した時刻や間隔になると、決めておいた相手(今回は Lambda)を自動で呼び出します。

どうやって動いたことを確認するの?

Lambda が動くたびに、プログラムの中でログ(記録)に一言書き出すようにします。あとから CloudWatch Logs を見ると、一定間隔でログが並んでいるのが見え、定期的に動いたことが分かります。

Goal

EventBridge スケジューラーで Lambda 関数を決まった間隔で自動実行するようにし、ログ(CloudWatch Logs)に、一定間隔で実行の記録が並んでいることを確認する。

04 — Architecture

つくる構成

EventBridge スケジューラーが、決めた間隔で Lambda 関数を呼び出します。関数は動くたびにログへ一言書き出すので、あとからログを見れば「定期的に動いた」ことが分かります。

EventBridge
スケジューラー
決めた間隔で
呼び出す
Lambda 関数
自動で動き
ログに一言書く
ログ(記録)
CloudWatch Logs
一定間隔で並ぶ
人は何もしていないのに、決めた間隔でログが増えていきます。これが「時間をきっかけに動く(定期実行)」かたちです。
05 — Requirements

要件

以下の要件を満たし、ログで定期実行を確認してください。

No要件
1リージョンは「東京(ap-northeast-1)」を使用する。
2Lambda 関数を 1 つ作成する。ランタイムは Python(最新版でよい)。本文のサンプル(実行されたことをログに書く)に置き換えて保存(デプロイ)する。
3EventBridge スケジュールを作成する。頻度は短めの間隔(例:5 分ごと)とし、ターゲットに手順 2 の Lambda 関数を指定する(実行用ロールはコンソールに自動作成させてよい)。
4数回ぶんの間隔(例:10〜15 分)待ち、関数のログ(CloudWatch Logs)を確認する。
5ログに、一定間隔で実行された記録が複数並んでいることを確認する。
6確認後、スケジュールを無効化または削除して、自動実行を止める。
06 — Steps

構築の進め方

「関数を作る → スケジュールを登録する → 待ってログを見る → 止める」の順に進みます。最後に自動実行を必ず止めるところまでがセットです。

  1. リージョンを合わせ、Lambda 関数を作る

    リージョンが東京であることを確認し、Lambda コンソールで「関数の作成」→「一から作成」を選び、関数名 scheduled-function、ランタイム Python(最新版)で作成します。

  2. ログに一言書くコードを貼り付ける

    「コードソース」の中身をすべて消して、次のコードを貼り付け、「Deploy」で保存します。

    📝 ざっくり言うと:実行されるたびに「自動実行された」とログに書くだけのプログラムです。(細かい意味は、コードの下で 1 行ずつ説明します)

    lambda_function.py(このまま貼り付け)
    def lambda_handler(event, context):
        print("スケジュールで自動実行されました!")
        return "OK"
    • def lambda_handler(event, context):関数の「入口」です。スケジュールの時間が来ると、AWS がここを実行します。
    • print("スケジュールで自動実行されました!")print は「ログ(記録)に書き出す」命令です。動くたびに、この一言がログに残ります。あとで CloudWatch Logs で読めます。
    • return "OK"処理が終わったことを表すために「OK」を返しています。
  3. EventBridge スケジュールを作成する

    検索バーから EventBridge Scheduler(または EventBridge の「スケジュール」)を開き、「スケジュールを作成」を押します。スケジュール名(例:every-5-min)を付け、頻度で「定期的なスケジュール」→ レート式で 5 minutes(5 分ごと)を指定します。

    スケジュールを作成 — スケジュールパターン(イメージ)

    スケジュールの種類

    レートベーススケジュール
    「○分ごと」のような単純な間隔で指定する
    Cron 式スケジュール
    「毎朝 9 時」のような決まった時刻で指定する

    今回は「5 分ごと」という単純な間隔なので、レートベーススケジュールを選びます

    「rate(レート)」と「cron」

    「○分ごと・○時間ごと」のような単純な間隔は rate(レート)で指定できます。「毎朝 9 時」のような決まった時刻は cron で指定します。今回は手早く確認するため、短い rate(5 分ごと)にします。

  4. ターゲットに Lambda を指定して作成する

    ターゲットの選択で 「AWS Lambda」→「Invoke」を選び、手順 1 の関数 scheduled-function を指定します。実行に必要なロールは「新規作成」(コンソールにおまかせ)でかまいません。設定を確認してスケジュールを作成します。

    ロールは自動で用意できる

    スケジューラーが Lambda を呼び出すには権限(ロール)が必要ですが、コンソールが必要なロールを自動で作ってくれるので、難しい設定は不要です。「新規作成」を選んで進めましょう。

  5. 数回ぶん待って、ログを確認する

    5 分ごとなら、10〜15 分ほど待つと数回実行されます。Lambda の関数画面で「モニタリング」→「CloudWatch ログを表示」を開き、「スケジュールで自動実行されました!」の記録が、5 分間隔で複数並んでいることを確認します。

    時刻の間隔に注目

    ログに並んだ各記録の時刻を見ると、ほぼ 5 分ごとに増えているはずです。人が何もしていないのに、決めた間隔で動き続けている証拠です。

  6. スケジュールを止める(無効化または削除)

    確認できたら、必ずスケジュールを無効化または削除して、自動実行を止めます。EventBridge の「スケジュール」一覧で対象を選び、無効化(一時停止)または削除します。

    止めないと動き続ける

    スケジュールを残したままにすると、ずっと 5 分ごとに動き続けます。無料枠の範囲に収まることが多いですが、無駄な実行を止めるためにも、確認後は止めておきましょう。

07 — Pitfalls

つまずきポイント

初学者がよく引っかかる箇所を先回りでまとめました。答えそのものは載せていませんが、「どこを見直せばよいか」の手がかりとして使ってください。

Pitfall 01 — 待ってもログが出ない

「いくら待っても、実行の記録が増えない」

①スケジュールが「有効」になっているか(無効のままだと動きません)、②ターゲットの Lambda 関数が正しく指定されているか③最初の 1 回目が来るまで、間隔ぶん待ったか(5 分ごとなら、作成直後はまだ動いていないことがあります)を見直しましょう。実行用ロールの作成をスキップしていないかも確認します。

Pitfall 02 — 確認が終わったのに止め忘れる

「気づいたらずっと動き続けていた」

スケジュールは、止めるまで延々と決めた間隔で動き続けます。学習では短い間隔(5 分ごと)にしているぶん、止め忘れると実行回数が積み上がります。確認できたら、スケジュールの無効化・削除を忘れずに行いましょう。後片づけでも改めて確認します。

08 — Checklist

完了チェック

要件の再確認ではなく、画面のどこを見れば達成を確認できるかをまとめました。Lambda・EventBridge・CloudWatch のコンソールを開いて、次を順に確かめましょう。

  • Lambda 関数 scheduled-function があり、コードが Deploy 済みになっている。
  • EventBridge の「スケジュール」に、作成したスケジュール(例:every-5-min)がある。
  • そのスケジュールのターゲットが、その Lambda 関数になっている。
  • 関数のログ(CloudWatch Logs)に、一定間隔で実行された記録が複数並んでいる
  • 確認後、スケジュールを無効化または削除して自動実行を止めた。
09 — Think

考えてみよう

手を動かすことに加えて、次の問いに自分の言葉で答えられるようにしておくと、理解がより深まります。

  1. 「ボタンで動かす」「アクセスで動かす」「ファイルが置かれたら動かす」「決まった時間に動かす」——いろいろなきっかけがあります。今回の「定期実行」が向いているのは、どんな作業でしょうか。
    ヒント
    「毎日・毎時・毎週」のように、決まったタイミングで繰り返す作業に向いています。集計、片づけ、定期レポート、見回りなど。「誰かの操作を待つ」のではなく「時間が来たらやる」作業を思い浮かべてみましょう。
  2. 今回は「5 分ごと(rate)」で試しました。「毎朝 9 時だけ」のように決まった時刻に動かしたいときは、どんな指定にすればよさそうでしょうか。
    ヒント
    単純な間隔は rate、決まった時刻・曜日は cron で指定します。「毎朝 9 時」「平日だけ」のような細かい指定は cron が得意です。rate と cron の使い分け、という観点で考えてみましょう。
  3. 定期実行はとても便利ですが、止め忘れると動き続けます。安全に使うために、運用ではどんな工夫が考えられるでしょうか。
    ヒント
    不要になったら無効化・削除する、必要な間隔まで広げる(短すぎる間隔にしない)、一度だけ動かしたいなら「1 回限りのスケジュール」を使う、などが考えられます。「動かしすぎない」ための工夫、という観点で考えてみましょう。
10 — Clean up

後片づけ

いちばん大事なのは、自動実行を止めることです。次の順で片づけます。

  1. スケジュールを削除する:EventBridge の「スケジュール」一覧で、作成したスケジュールを削除します。これで自動実行が止まります。
  2. Lambda 関数を削除する:「関数」一覧で scheduled-function を選び、「アクション」→「削除」で消します。
  3. ログを削除する(任意):CloudWatch の「ロググループ」から、この関数のログを削除できます。
  4. 自動作成されたロールを削除する(任意):スケジューラー用にコンソールが作ったロールが残っていれば、不要なら IAM から削除できます。
Caution — まずスケジュールを止める

関数だけ消しても、スケジュールは残る

Lambda 関数だけ削除しても、スケジュール自体は残り、呼び出しを試み続けます(対象がなくエラーになります)。確実に止めるには、先にスケジュールを削除(または無効化)しましょう。

コストに関する注意: EventBridge スケジューラーは、呼び出し回数に応じた料金で、毎月一定回数までの無料利用枠があります。Lambda も呼び出し回数・実行時間に応じた課金で、毎月かなりの回数までの無料枠があります。CloudWatch Logs もログ量に応じた料金(少量なら無料枠の範囲)です。5 分ごとの実行を短時間試す程度なら、ほぼ無料の範囲に収まることが多いですが、スケジュールを止め忘れて長期間動かし続けると、実行回数が積み上がります。使い終えたら、上の「後片づけ」でスケジュール・関数・ログを片づけましょう。最新の料金は AWS の公式料金ページで確認してください。