この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは。サービスグループの武田です。
今回はAWS公式ドキュメントで提供されている、AWS Step FunctionsのステートマシンをAWS CDKで作成するチュートリアルをやってみました。
次のポリシーで進めます。おおむね筆者の好みです。
- aws-cdkはローカルにインストール
- 言語はTypeScriptを選択
- Lambdaのランタイムは最新を使用
環境
次のような環境で実施しました。
$ node -v
v14.18.1
$ npm -v
8.1.1
$ sw_vers
ProductName: macOS
ProductVersion: 11.4
BuildVersion: 20F71
やってみた
まずはプロジェクトを作成し、必要なモジュールなどをインストールします。
$ mkdir step && cd $_
$ npx cdk init --language typescript
$ npm install @aws-cdk/aws-lambda @aws-cdk/aws-stepfunctions @aws-cdk/aws-stepfunctions-tasks
プロジェクトのひな型ができたので、スタックファイルにLambda関数およびStep Functionsのステートマシンを定義します。TypeScriptのコードでステートマシンを定義しているのが新鮮でしょうか。
lib/step-stack.ts
import * as cdk from "@aws-cdk/core";
import * as lambda from "@aws-cdk/aws-lambda";
import * as sfn from "@aws-cdk/aws-stepfunctions";
import * as tasks from "@aws-cdk/aws-stepfunctions-tasks";
export class StepStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const helloFunction = new lambda.Function(this, "MyLambdaFunction", {
code: lambda.Code.fromInline(`
exports.handler = (event, context, callback) => {
callback(null, "Hello World!");
};
`),
runtime: lambda.Runtime.NODEJS_14_X,
handler: "index.handler",
timeout: cdk.Duration.seconds(25),
});
const stateMachine = new sfn.StateMachine(this, "MyStateMachine", {
definition: new tasks.LambdaInvoke(this, "MyLambdaTask", {
lambdaFunction: helloFunction,
}).next(new sfn.Succeed(this, "GreetedWorld")),
});
}
}
準備できたらこれらをデプロイします。ただそのままですとus-east-1
にデプロイしてしまうため、ap-northeast-1
にデプロイされるように少し修正します。
bin/step.ts
#!/usr/bin/env node
import "source-map-support/register";
import * as cdk from "@aws-cdk/core";
import { StepStack } from "../lib/step-stack";
const app = new cdk.App();
new StepStack(app, "StepStack", {
env: { account: process.env.CDK_DEFAULT_ACCOUNT, region: "ap-northeast-1" },
});
修正できたらデプロイしましょう。必要なIAMロールなども自動で作成されとても便利。
$ npx cdk deploy
マネジメントコンソールでStep Functionsのページに行ってみると、次のようなステートマシンが作成されています。
ステートマシンを実行してしばらく待つと成功しました。Lambda関数の実行結果も次の状態に渡されています。
最後に環境を削除しましょう。次のコマンドですべてのリソースが削除されます。
$ npx cdk destroy
まとめ
Step Functionsのステートマシン構築は今回のようにCDKで行うほかに、Workflow Studioを使ってGUIでも可能です。CDKを採用するメリットは環境構築から一貫してコードで管理できることです。しかしコードでステートマシンを定義するのは賛否ある部分かと思われます。IaCとの兼ね合いもありますので、自分たちのプロジェクトに合った方法を採用したいですね。