なつねこメモ

主にプログラミング関連のメモ帳 ♪(✿╹ヮ╹)ノ 書いてあるコードは自己責任でご自由にどうぞ。記事本文の無断転載は禁止です。

AWS CDK で cron イベントを発行したい

定期実行は Azure Functions が楽に使えて良いのですが、ストレージで料金発生していたので、
おとなしく AWS でやることにしたので、そのときのメモです。


CDK でいろいろやるときは、まずは実際どう組むかを知っておく必要があるので、
AWS Lambda を定期実行する方法を探してみました。

AWS の Lambda で cron みたいな感じで定期実行する

CloudWatch からやれば良いらしいということで

+-------------------+   +-----------------+
| CloudWatch Events +-->+ Lambda Function |
+-------------------+   +-----------------+

な Stack を書きます。

前提:

  • AWS CDK 0.22.0
  • TypeScript

CloudWatch Event の Rule を使うには @aws-cdk/aws-events が必要なのでインストールしておきます。
また、 Lambda Function を呼び出すので、 @aws-cdk/aws-lambda も入れておきます。

最終的には、下のような形になりました。

import * as cdk from "@aws-cdk/cdk";
import * as events from "@aws-cdk/aws-events";
import * as lambda from "@aws-cdk/aws-lambda";

export class PixitterStack extends cdk.Stack {
  constructor(parent: cdk.App, name: string, props?: cdk.StackProps) {
    super(parent, name, props);

    const event = new events.EventRule(this, `PixitterEvent`, {
      ruleName: "cloudwatch-event-rule-name",
      description: "Cron Scheduled Event for Lambda",
      scheduleExpression: "cron(10 15 * * ? *)", // run on 00:10:00 JST
    });

    const task = new lambda.Function(this, `PixitterTask`, {
      code: lambda.Code.asset("./dist"),
      handler: "index.handler",
      memorySize: 256,
      timeout: 30,
      runtime: lambda.Runtime.NodeJS810,
    });

    event.addTarget(task);
  }
}

生成されるイベントはこんな感じ

f:id:MikazukiFuyuno:20190127023906p:plain:w300

ということで AWS CDK の記事でした