🔄

個人的Step Functionsキャッチアップ方法

に公開

概要

こんにちは、DGビジネステクノロジーの飯塚です。

今実装している機能でStep Functionsを構築することになったのですが、Step Functions独自の概念が多く、JSONata方式やVariablesなどの比較的新しく取り入れられた機能もあり、情報の新旧の区別がつきづらくちょっとキャッチアップが大変だったのでまとめておこうと思います。

振り返ると、Step Functionsは以下の流れでやっていくと理解しやすいなと思いました。

  1. とりあえずチュートリアルやってみる
  2. 必要な用語をなんとなく読んでおく
  3. チュートリアルやワークショップの内容でいいので、実際にワークフローをGUIで組む(Stateを追加してみる)
  4. 追加したStateによってどんなASL(Amazon State Language)が組み込まれるかを見る
  5. 公式ドキュメントでASLの項目について読む
  6. 自分でワークフローを作ってみる

ちなみに、Step Functionsを採用した理由は主に以下の3点です。

  • 外部APIやBedrock、Lambdaによるデータ変換などの処理の順番を遵守したい
  • 並列に処理したい
  • エラーが起きても調べやすい

知ることは多いですが、上記のようなメリットもあるので良い機能だなと思っています。

詳細

それぞれの手順について、詳細を書いていきます。

0. とりあえずチュートリアルやってみる

以下のチュートリアルをやってみましょう。
https://docs.aws.amazon.com/step-functions/latest/dg/getting-started.html

マネコン上の機能説明やこうやって動かすんだな程度のものが理解できていればいいのかなと思います。

1. 必要な用語をなんとなく読んでおく

とりあえず知っておきたい用語。
これ以外にも知るべきことはたくさんありますが、それは使うときに学べばいいかなと思います。

用語 説明 公式
State Machine Flow StatesとTask Statesで構成されるワークフローのこと Learn about state machines in Step Functions
Flow States Choice, Pass, Wait, Map, Parallelなどの流れを制御するState Flow states
Task States 他のAWSサービスやHTTPリクエストなどを実行するState Task States
ASL(Amazon State Language) State Machineの定義をJSONで表したもの Using Amazon States Language to define Step Functions workflows
JSONata/JSONPath これまでJSONPathでは「 InputPath・Parameters・ResultSelector・ResultPath・OutputPath」のフィールドを使ってデータをやりとりしていたけど、JSONataに対応してデータのやりとりがシンプルに「Arguments」フィールドだけになりましたというのを捉えておけばとりあえずはいいかと。今から作るならJSONataを使いましょう。 Processing input and output in Step Functions
Variables 変数。定義したState以降のStateでいつでも呼び出せる。これができる前はバケツリレー方式で渡していたそう。 Passing data between states with variables

3. 追加したStateによってどんなASL(Amazon State Language)が組み込まれるかを見る

まずはWorkflow Studio(GUI)を使ってStateを入れてみる。
項目ソースなどのオプションも追加してASLがどう変化するのかみてみる。


Workflow Studio画面:Map Stateを入れて、「項目を提供」にinputの呼び出しを追加した

Map Stateを入れる前

{
  "Comment": "A Hello World example that demonstrates various state types in the Amazon States Language, and showcases data flow and transformations using variables and JSONata expressions. This example consists solely of flow control states, so no additional resources are needed to run it.",
  "QueryLanguage": "JSONata",
  "StartAt": "Set Variables and State Output",
  "States": {
    "Set Variables and State Output": {
      "Type": "Pass",
      "Comment": "A Pass state passes its input to its output, without performing work. They can also generate static JSON output, or transform JSON input using JSONata expressions, and pass the transformed data to the next state. Pass states are useful when constructing and debugging state machines.",
      "Output": {
        "IsHelloWorldExample": true,
        "ExecutionWaitTimeInSeconds": 3
      },
      "Assign": {
        "CheckpointCount": 0
      },
      "End": true
    }
  }
}

入れたあと

"Map"が追加されている。
項目ソースにもチェックを入れたのでASL的には"Items"が該当するとわかる。


コード: 左側にASL、右側にワークフローが表示されている

4. 公式ドキュメントでASLの項目について読む

上記で追加された"Map"の中の"Items"を調べてみる

Items (Optional, JSONata only)
A JSON array or a JSONata expression that must evaluate to an array.

Items配列として渡す必要があるのか〜というように理解していく。

3と4を繰り返していくことで、ASLとGUIの関連を理解できるようになります。

5. 自分でワークフローを作ってみる

おそらくここが一番重要ですが、自分でワークフローを作ってみましょう。
ワークショップの内容を参考にしてもいいかもしれません。

実際にワークフローを組むことで、VariablesやInputの呼び出し方やデータの流れ、エラーハンドリングの方法などもわかってくると思います。

まとめ

以上、個人的Step Functionsのキャッチアップ手順についてまとめてみました。

最近、技術キャッチアップに生成AIを活用していて、Step Functionsは今のチームには馴染みがなく、自分も初めて触る技術でしたが、「生成AIに質問する→キーワードを生成してもらう→それについての公式ドキュメントを読み、裏をとる→動かしてみる」というようなサイクルで動かしてみると、とても効率的に吸収できるのでよかったです。

実装を進める中でもっとStep Functionsと仲良くなって使いこなしていきたいです。

この記事が誰かの手助けになれば幸いです。

DGBTテックブログ

Discussion