LoginSignup
2
1

EventBridge スケジュールでLambdaを定期実行する

Last updated at Posted at 2024-01-05

目次

  1. はじめに
  2. CloudWatch ロググループ作成
  3. Lambdaを用意する
    1. ポリシー、ロールの作成
    2. Lambdaの作成
  4. EventBridge スケジュールの設定
    1. ポリシー、ロールの作成
    2. スケジュールの作成
  5. 動作確認
  6. 最後に

はじめに

最近、知識をアウトプットできていなかったので、今年からちょこちょこやっていきます!
手始めに簡単なところからということで、最近触れているAWS関連の記事です。
ほかに同じような内容の記事があるかもしれませんが、できるだけ差別化できるように努力しますので、ご容赦ください。

CloudWatch ロググループ作成

ではでは、早速やっていきましょう。
まずは、Lambdaの動作確認のために、CloudWatch ロググループを作成していきます。
設定は以下です。

image.png

Lambdaの用意

次はLambdaの用意ということですが、Lambda作成にあたって必要なポリシー、ロールから、まずは用意していきます。
今回必要な権限は、LambdaがCloudWatchにログを出力する権限です。
先ほど作成した、ロググループにLambdaのログを出力するための権限になります。

ポリシー、ロールの作成

ポリシーの作成を行っていきます。
AWSが事前に用意しているものを使ってもよいですが、多くの場合、権限を与えすぎてしまうため、最小限の権限にとどめるために、今回は新規作成いたします。
与える権限は以下です。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "createLogs",
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "arn:aws:logs:ap-northeast-1:アカウントID:log-group:/aws/lambda/test-lambda-event-bridge:*"
        }
    ]
}

ログ出力だけであれば、CreateLogStreamPutLogEventsだけで問題ないです。
そしてできたのが、以下ポリシーです。

image.png

次は、ロールの作成です。
今回は、Lambdaに付けるロールなので、「信頼されたエンティティを選択」では、以下設定を行います。

  • 信頼されたエンティティタイプ:AWSのサービス
  • ユースケース:Lambda

そして、「許可を追加」では、先ほど作成したポリシーを追加してあげます。
あとは、名前を設定をして、作成!
以下のようにロールが完成します。

image.png

Lambdaの用意

ポリシー、ロールができたので、以下設定でLambda関数作成していきます。

  • ランタイム:Node.js 20.x
  • アーキテクチャ:arm46
  • アクセス権限:既存のロールを使用する(先ほど作成のロールを選択)

コードは動作確認ができればよいので、consoleに出力する処理だけ書きました。(後ほど少しアレンジしていきます。)

export const handler = async (event) => {
    console.log("実行しました")
};

さて、Lambdaが作成できたので、テスト実行してみましょう。
テストの際は、テストイベントの設定が必要です。
以下の設定で作成しました。

image.png

実行後、ログがCloudWatchに作成されているので、成功です!
ログの出力値も確認できました!

image.png

EventBridge スケジュールの設定

では、作成したLambdaを定期実行するスケジュースを作成していきます。
が、その前に、EventBridgeからLambdaを実行するポリシー、ロールの作成をしていきましょう。

ポリシー、ロールの作成

Lambdaを実行するポリシーを作成します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "invokeLambdaFunction",
            "Effect": "Allow",
            "Action": "lambda:InvokeFunction",
            "Resource": "arn:aws:lambda:ap-northeast-1:アカウントID:function:test-lambda-event-bridge"
        }
    ]
}

ロールも作成し、先ほどのポリシーをアタッチします。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "admitEventBridge",
            "Effect": "Allow",
            "Principal": {
                "Service": "scheduler.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

image.png

スケジュールの作成

ポリシー、ロールができたら、いよいよメインのスケジュースを作成していきます。
設定一覧は以下です。

  • スケジュールの詳細の指定
    • スケジュール名:test-event-schedule
    • 説明:任意
    • スケジュールグループ:default
    • スケジュールパターン:定期的なスケジュール
    • cronベースのスケジュール
      • cron ( 0 18 * * ? * )
    • フレックスタイムウィンドウ:オフ
    • タイムゾーン:Asia/Tokyo
  • ターゲットの詳細
    • AWS Lambda Invoke
    • Lambda関数:先ほど作成したLambda
    • ペイロード:{"greeting": "Hello"}
  • 設定 - オプション
    • スケジュールを有効化
    • 再試行ポリシー:OFF
    • アクセス許可
      • 既存のロール使用
      • ロール名:先ほど作成したロール

ざっくりポイントを説明しますと、

  • 今回定期実行ということで、スケジュールパターン:定期的なスケジュールを選択
  • スケジュールの設定は、cron式を今回選択しました。今回は17:45に設定しています。
    • 時間を設定すると、以下画像のように直前10回の実行時間が表示されますので、そちらを参考に自分が想定しているような設定ができているか確認するとよいと思います。
    • 値の設定はこちらの記事を参考にしています。(参考:cron 式のリファレンス

image.png

  • スケジュールということで、タイムゾーンも指定できます。今回は、日本時間で設定。
  • ターゲットでは、LambdaのInvoke APIを使用し、先ほど作成したLambdaをターゲットに設定。ペイロードとは、Lambda実行の際に渡せる引数です。渡せているか確認するため、適当な値を設定(後ほど確認)
  • アクセス許可で、先ほど作成したEventBridgeのためのロールを指定する。

動作確認

スケジュールができたので、動作確認をしてみましょう。
その前に、Lambdaのコードを少し修正。

export const handler = async (event) => {
    console.log("実行しました", event)
};

ペイロードで渡した値が、取れているかの確認のため、少し修正しました。

・・・さてさて、時間になったのでCloudWatchを確認。

image.png

おお!
起動していますね~
ペイロードの値も確認できました。成功です。
やったー!!!

最後に

さらっと書くつもりでしたが、思ったより長くなってしまいましたw
分かりやすいと思っていただければ幸いです。
これからは、もっとアウトプットする機会を増やせればと思います。
最後まで読んでいただきありがとうございました。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1