Step FunctionsをCLIで動かす

こんにちは、松田です。
前回API Gatewayの統合タイムアウトをStep Functionsで対策しましたが、
今回はより詳しいStep Functionsの使用方法になります。
おまけとしてStep Functionsでの値の受け渡し、処理の分岐も試しています。

 

CLIからStep Functionsを操作する

 

1.Lambda関数の作成
関数1

 

exports.handler = async (event) => {
    var test = {mozi:"abcd",suuti:5};
    return test;
};

 

関数2

 

exports.handler = async (event) => {
    console.log("eventInput");
    console.log(event.Input);
    
    console.log("event");
    console.log(event);
    
    return event;
};

 

関数2でevent(関数1)の値を受け取っていますが、これは次に記述するステートマシンの定義で受け取れるよう記述しています。
2.ステートマシンの作成
コンソール上から作成する場合は以下の定義を書き換えます。

 

 

CLIから作成する場合はコマンドプロンプトで以下を実行します。

 

C:\Users\daiki-matsuda>aws stepfunctions create-state-machine --name stepFunctionCli --definition file://C:/Users/daiki-matsuda/Desktop/StepFunctions/statemachine.json --role-arn "arn:aws:iam::************:role/service-role/StepFunctions-MyStateMachine-role"
{
    "stateMachineArn": "arn:aws:states:us-east-1:************:stateMachine:stepFunctionCli",
    "creationDate": "2020-10-12T16:16:44.873000+09:00"
}

 

statemachine.json

 

{
  "Comment": "A Hello World example of the Amazon States Language using Pass states",
  "StartAt": "callLambda1",
  "States": {
    "callLambda1": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:us-east-1:************:function:stepFunctionsTest1",
      "Parameters": {
        "Input.$": "$"
      },
      "Next": "if"
    },
    "if": {
      "Type": "Choice",
      "Choices": [
        {
          "Variable": "$.mozi",
          "StringEquals": "abcd",
          "Next": "callLambda2"
        }
      ],
      "Default": "skip"
    },
    "callLambda2": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:us-east-1:************:function:stepFunctionsTest2",
      "Parameters": {
        "Input.$": "$"
      },
      "End": true
    },
    "skip": {
      "Type": "Pass",
      "End": true
    }
  }
}

 

上記の作業を行ってからstep Functionsのフローを見ると
以下のようになっているのが確認できると思います。

 

 

3.ステートマシンの実行
以下を実行するとステートマシンを実行させることができます。

 

C:\Users\daiki-matsuda>aws stepfunctions start-execution --state-machine-arn arn:aws:states:eu-east-1:************:stateMachine:stepFunctionCli --input file://C:/Users/daikimatsuda/Desktop/StepFunctions/input.json

 

以下のフローを見ると実行が確認できると思います。
今回は、ifでLambda1から送られたmozi:"abcd"を判定してLambda2に遷移しています。

 

 

悩んだ点

 

  1. statemachine.jsonで使ったchoiceの使い方が分かっていなかった。
    使い方が分かるとかなり使い勝手がいいものだと感じました。
  2. file://の書き方を分かっていなかった
    いつも通りにファイルパスをコピペしただけでは動作しなかった。
    file://は初めて使ったが、今後も使う時があるかもしれないので、記述は覚えておきたい

 

まとめ

 

今回はあえてCLIからStep Functionsを触りましたが、
特別な理由がない限りはGUIで作成したほうが作りやすいと感じました。
ただCLIから触ることで実際の流れをより知れると思います。
ここまでご覧いただきありがとうございました!

 

 

 

 

 

 

 

 

 

 

 

アプリケーション開発バナー

AWS相談会バナー