AWS Step Functionsステートマシンでパラメータストアから取得した値をStates.Formatでテンプレートとして使用する

2021.11.05

こんにちは、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."
}

参考

以上