AWS CDK(v2): Lambda を Cron実行する

CDK を使うと、Lambda と EventBridge を使って簡単にスケジュール実行をすることができます。 スケジュールの表記にはいわゆる cron 方式 を使います。

ちょっと注意が必要なのは「1 つのイベントに応じてルールが複数回トリガーされることがある」ということです (公式トラブルシューティングより)。 そこさえなんとかできれば、非常にお手軽で便利です。

Version

  • node: 16.13.1
  • aws-cdk: 2.2.0
  • tsc: 4.5.4

書き方

例えば、以下のような myLambda を 10 分毎に呼び出す場合以下のように書くことができます。 {path: "/call"} の部分で Lambda に渡す event の内容を指定できます。

/// lib/xyz-stack.ts
export class XyzStack extends Stack {
  constructor(scope: Construct, id: string, props?: StackProps) {
    super(scope, id, props);
...

    const myLambda = new NodejsFunction(this, "MyAwesomeFunction", {
      entry: path.join(__dirname, './lambda/main.ts'),
      handler: "handler",
    });

    const rule = new Rule(this, "CallMyLambda", {
      schedule: Schedule.cron({
        year: "*",
        month: "*",
        day: "*",
        hour: "*",
        minute: "*/10",
      }),
      targets: [new LambdaFunction(myLambda, {
        event: RuleTargetInput.fromObject({path: "/call"}), // specify an object to pass the lambda handler.
      })],
    });

...
}

Reference