AWS Step Functionsステートマシンでパラメータストアから取得した値をStates.Formatでテンプレートとして使用する
こんにちは、CX事業本部 IoT事業部の若槻です。
今回は、AWS Step Functionsステートマシンでパラメータストアから取得した値をStates.Formatでテンプレートとして使用してみました。
States.Formatとは
Step FunctionsではIntrinsic functionsという組み込み関数を使用できます。
そのうち文字列リテラル中の特定シーケンス({}
)の置き換えをするテンプレートのような利用ができるものがStates.Formatです。
例えば下記のような入力がある場合に、
{ "name": "Arnav", "template": "Hello, my name is {}." }
States.Format
を下記のように使用すれば、
States.Format($.template, $.name)
Hello, my name is Arnav.
という出力を得られます。
やってみた
パラメーターストアの作成
AWSマネジメントコンソールでパラメーターストアのページにて、パラメータを作成画面を開き、template
という名前でパラメータを作成します。値はClassmethod is {} company.
とします。
ステートマシンの作成
Step Functions Workflow Studioでステートマシンを作成します。
Step Functionsのマネジメントコンソールでステートマシンの作成を開始します。
[次へ]をクリックします。
[action]をGetParameter
で検索して[System Manager GetParameter]をドラッグして追加します。
[GetParameter]の[設定]で、[APIパラメータ]で下記のJSONを指定します。これによりtemplate
パラメータストアに格納されている値を取得できます。
{ "Name": "template" }
同じく[GetParameter]の[出力]で、[ResultSelector]と[ResultPath]を指定します。
- ResultSelector
{ "value.$": "$.Parameter.Value" }
- ResultPath
$.template
次に[フロー]から[GetParameter]の下の位置へ[Pass]をドラッグして追加します。
Passの[入力]-[Parameter]で以下のJSONを指定します。
{ "Result.$": "States.Format($.Parameter.Value,'exciting')" }
生成されたコードを確認したら[次へ]をクリックします。
今回生成されたコード(ステートマシン定義)は下記のようになります。
{ "Comment": "A description of my state machine", "StartAt": "GetParameter", "States": { "GetParameter": { "Type": "Task", "Parameters": { "Name": "template" }, "Resource": "arn:aws:states:::aws-sdk:ssm:getParameter", "ResultSelector": { "value.$": "$.Parameter.Value" }, "ResultPath": "$.template", "Next": "Pass" }, "Pass": { "Type": "Pass", "End": true, "Parameters": { "Result.$": "States.Format($.template.value,$.Comment)" } } } }
[ステートマシンの作成]をクリックして作成を完了します。
ステートマシンを作成できました。不足しているパラメータストアへのアクセス権限を付与するために[IAMでロールを編集]をクリックします。
今回はAWS管理ポリシーのAmazonSSMReadOnlyAccess
をアタッチしました。(ポリシーは必要に応じて用意してください)
動作
Step Functionsのコンソールに戻り、入力で下記のようなJSONを指定して、ステートマシンを実行します。
{ "Comment": "technology" }
実行が成功しました。
指定した値がテンプレート文字列にフォーマットされた結果が取得できています。
{ "Result": "classmethod is technology company." }
参考
- Intrinsic functions - AWS Step Functions
- [アップデート]Step Functions:動的タイムアウトや組み込み関数などが追加されASLが強化されました | DevelopersIO
以上