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.
})],
});
...
}