Step Functions で動的に呼ぶリソースを変化させる方法を教えてください

2022.09.29

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

困っていた内容

現在、Step Functions を用いて実行基盤を構築する計画を立てています。

フローを構築するにあたり、動的に呼ぶリソース(ステートマシン)を変化させたいのですが、実現する方法はありますか?

どう対応すればいいの?

再デプロイを行わずに、動的に呼ぶリソースを変更する方法について調べてみました。

呼び出し元ステートマシン:sfn-P
呼び出し先ステートマシン:sfn-1、sfn-2、、、

下記の手順で、sfn-1、sfn-2 に該当する呼び出し先ステートマシンのARNをパラメータとして渡すことで、 呼び出すステートマシンを動的に指定することができました。

ステートマシンを動的に指定する手順

※ パラメータで指定するステートマシン(sfn-1、sfn-2 に該当するステートマシン)は、 手順説明の都合上、事前に作成して、ARNを控えておいてください。

sfn-P に該当するステートマシンを作成します。 Step Functions マネジメントコンソールのステートマシン一覧の画面で [ステートマシンの作成] ボタンをクリックします。 [作成方法を選択] の項目で [コードでワークフローを記述] を選択します。 ステップ 1 [ステートマシンを定義する] の画面が表示されます。 [定義] 欄に、下記のステートマシンの定義を入力します。

{
  "StartAt": "Step1",
  "States": {
    "Step1": {
      "Type": "Task",
      "Resource": "arn:aws:states:::states:startExecution",
      "Parameters": {
        "StateMachineArn.$": "$.arn"
      },
      "End": true
    }
  }
}

画面を下にスクロールし、[次へ] をクリックします。

ステップ 2 [詳細を指定] の画面が表示されますので、 [ステートマシン名] を指定します。

[アクセス許可] - [実行ロール] の項目で、 [新しいロールの作成] を選択します。

画面を下にスクロールし、[ステートマシンの作成] をクリックします。 以上の手順で、sfn-P に該当するステートマシンが作成されます。

続いて、作成されたステートマシン(sfn-P)で、動作確認を行います。 [実行の開始] をクリックします。

[入力]欄に下記の内容を入力し、[実行の開始] をクリックします。

{
  "arn": "[ステートマシンのARN]"
}

ステートマシン sfn-P が実行され、 パラメータで指定したステートマシン(sfn-1、sfn-2 に該当するステートマシン)が実行されます。

参考資料

[1] InputPath、パラメータ、 ResultSelector - AWS Step Functions

パラメータ このセクションでは、[Parameters] (パラメータ) フィールドを使用するさまざまな方法を示します。 キーバリューペア 入力として渡されるキーバリューのペアのコレクションを作成するには、Parameters フィールドを使用します。それぞれの値は、ステートマシンの定義に含める静的な値、または入力からパスまたはコンテキストオブジェクトで選択した静的な値を使用できます。パスを使用して値を選択するキーと値のペアの場合、キーの名前は .$ で終わる必要があります。

[2] パス - AWS Step Functions

Amazon States Language では、パスは、JSON テキスト内でコンポーネントを識別するために使用できる $ で始まる文字列です。