はじめに
Step FunctionsをCloudFormationで作る際、以下のようなことを行っていて面倒でした。
- CloudFormationで、簡単なStep Functionsを書いて作成
- 作られたStep FunctionsをコンソールのWorkflow Studioから修正
- 修正後のASLで、CloudFormationテンプレートのStep Functionsの箇所を差し替え
- Lambda関数などを使う場合は、該当箇所を変数に差し替え
- スタックを更新
- 2.から5.を繰り返して調整
Application Composerでは、Workflow Studioが使えるようになっており、リソースを動的に参照できます。
そのため最初に書いたような、差し替えして文字列置き換え、のような面倒なことがしなくて済むようになります。
今回はこの内容について、簡単に確認してみました。
概要
- AWS Application Composerで、Step FunctionsがあるSAMテンプレートを作成
- その際Workflow Studioを使うことで、リソースを動的参照するコードが生成されることを確認
- AWS Application Composerは、PCにインストールしたVSCodeで実行
- SAMは、Cloud9を構築して実行
やってみた
準備
VSCodeの拡張機能で、AWS Toolkit
を検索してインストールします。
フォルダを作って、template.yaml
を作り、Open with Application Composer
で開きます。
Lambda関数を1つ設置
Lambda関数を置きます。
ランタイムをPythonにしておきます。(3.9にしているのは、この後Cloud9で動かす際に、デフォルトでインストールされているバージョンのためです。)
Step Functionsステートマシンを置きます。デフォルトでLambda Taskが作られています
Lambda TaskとLambda関数を結びます。
Composer上の詳細では以下のように紐づけられます。
Cloud9上に移して、SAMで動かしていきます。
sam build
sam validate
sam deploy --guided
作成されたASLは以下になります。
{
"StartAt": "LambdaTask",
"States": {
"LambdaTask": {
"End": true,
"Parameters": {
"FunctionName": "arn:aws:lambda:ap-northeast-1:123456789012:function:sam-app-Function-CAnigRNGzDvR",
"Payload.$": "$"
},
"Resource": "arn:aws:states:::lambda:invoke",
"Type": "Task"
}
}
}
以前であれば、「コンソールのWorkflow Studioから修正されたASLをコピペして、Lambda関数の個所を変数に置き換える」ということをやっていましたが、AWS Application Composerを使えばそのような手間がなくなりました。
Workflow Studioを使って、Lambda関数をもう一つ設置
Lambda関数をもう一つ作って、Step Functionsに追加してみます。
AWS Application ComposerのWorkflow Studioを起動します。
2個目のLambda関数を設置しました。
Function nameを、CloudFormation 置換を入力
にします。
変数名を指定します。ここでは${LambdaFunction2}
としています。
右上で保存をして、Application Composerに戻ります。
Step Functionsに2つ目のLambdaが認識されていました。
Lambdaをもう一つ追加して、繋いでみます。
変数のマッピングも作ってくれます。
再度、上げなおしてデプロイします。
作られたASLは以下で、ちゃんとLambda関数の部分が置換されています。
{
"StartAt": "LambdaTask",
"States": {
"Lambda Invoke": {
"End": true,
"OutputPath": "$.Payload",
"Parameters": {
"FunctionName": "arn:aws:lambda:ap-northeast-1:123456789012:function:sam-app-Function2-M8Ljf0sG9Hfo",
"Payload.$": "$"
},
"Resource": "arn:aws:states:::lambda:invoke",
"Retry": [
{
"BackoffRate": 2,
"ErrorEquals": [
"Lambda.ServiceException",
"Lambda.AWSLambdaException",
"Lambda.SdkClientException",
"Lambda.TooManyRequestsException"
],
"IntervalSeconds": 1,
"MaxAttempts": 3
}
],
"Type": "Task"
},
"LambdaTask": {
"Next": "Lambda Invoke",
"Parameters": {
"FunctionName": "arn:aws:lambda:ap-northeast-1:123456789012:function:sam-app-Function-CAnigRNGzDvR",
"Payload.$": "$"
},
"Resource": "arn:aws:states:::lambda:invoke",
"Type": "Task"
}
}
}
片付け
sam delete
でAWS上のリソースは削除されます。ロググループは保持されていますので、コンソールから削除してください。
Cloud9やPCで作成したファイル群は適宜削除してください。
おわりに
今回はApplication ComposerのWorkflow Studioを使うことで、Step Functionsのリソースの動的参照を簡単に実現してみました。
これでStep FunctionsのIaC化がかなりはかどるのではないでしょうか。
この記事がどなたかのお役に立てれば幸いです。