Step Functions の使用を開始する方法について - AWS Step Functions

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Step Functions の使用を開始する方法について

Step Functions サービスを使用すると、複雑なアプリケーションワークフローをオーケストレーションできます。開始するには、Workflow Studio を使用して組み込みの Hello World ワークフローを作成して実行します。自動生成された Amazon States Language (ASL) 定義をコードで確認します。最後に、サービス統合をdrag-and-dropして感情分析を行います。

このチュートリアルを完了すると、Workflow Studio を使用して、設計モードとコードモードの両方を使用してワークフローを作成、設定、実行、更新する方法がわかります。

推定所要時間: 20~30 分

構築するもの

最初のステートマシンはフロー状態から始まります。フロー状態は、ワークフローを指示および制御するために使用されます。ワークフローの実行方法を学習したら、Amazon Comprehend サービスとタスク状態を統合するアクションを追加します。

次の図は、構築するステートマシン全体を示しています。Hello World ステートマシンを初めて作成する場合、追加のリソースを実行する必要はありません。Step Functions コンソールは、すべての状態と IAM ロールをワンクリックで作成します。後でサービス統合を追加するときは、カスタムアクセス許可ポリシーを使用してロールを作成する必要があります。

Hello World ワークフローのビジュアル表現。

ステップ 1 - ステートマシンを作成する

Step Functions では、ワークフローステートマシンと呼ばれます。両方の用語を同じ意味で使用します。ワークフローには、アクションを実行するか、ステートマシンのフローを制御する状態が含まれます。

  1. Step Functions コンソールに移動します。

  2. Step Functions コンソールで、左上のナビゲーションから「Step Functions」を選択するか、パンくずリストを選択して、開始方法を選択します。

    Hello World ワークフローの開始方法を示すスクリーンショットの例
  3. オプションから、Run Hello World を選択します。

    Hello World ワークフローの選択方法を示すスクリーンショットの例
ヒント

UI に慣れるには、短いコンソール内ウォークスルーをステップスルーすることをお勧めします。

Workflow Studio の概要

Workflow Studio for Step Functions を使用すると、状態をキャンバスに視覚的にdrag-and-dropしてワークフローを構築できます。

状態の追加と編集、ステップの設定、結果の変換、エラー処理の設定を行うことができます。次のスクリーンショットは、ステートマシンの構築に使用するインターフェイスの 4 つの重要な領域を示しています。

Workflow Studio インターフェイスの 4 つの重要な領域のスクリーンショットの例

モード - Workflow Studio には 3 つのオペレーションモードがあり、デフォルトでビジュアルデザインモードになります。

  • 設計 - 状態をワークフローにdrag-and-dropできるビジュアル編集モード。

  • Code - ASL コードとも呼ばれる Amazon States Language コードに焦点を当てたモード。ASL コードを直接編集し、ビジュアル設計に反映された変更を確認できます。

  • Config - ステートマシン (Standard または Express) の名前とタイプ、ワークフローの実行時に割り当てられたロール、ログ記録、トレース、バージョニング、暗号化、タグなどの設定オプション。

状態ブラウザには、次の 3 つのタブがあります。

  • アクション - ワークフローにdrag-and-dropできる AWS APIs のリスト。各アクションはタスクワークフローの状態を表します。

  • フロー - ワークフローのステップの順序を制御するフロー状態。

  • パターン - Amazon S3 バケット内のデータの反復処理など、ready-to-use再利用可能な構成要素。

キャンバスグラフとワークフローグラフでは、状態をワークフローグラフにdrag-and-dropし、状態の順序を変更し、状態を選択して設定してテストします。

Inspector パネルは、キャンバスで選択された状態のプロパティを表示および編集する場所です。定義トグルをオンにすると、現在選択されている状態のコードを表示できます。

ステートマシンの概要

Hello World ワークフローは、作業を実行せずに入力を出力に渡す Pass 状態から始まります。パス状態を使用して、データを次の状態に渡す前に静的な JSON 出力を生成したり、JSON 入力を変換したりできます。パス状態は、ステートマシンの構築とデバッグに役立ちます。

次の状態である Choice 状態は、 のデータを使用してワークフローの次のブランチIsHelloWorldExampleを選択します。最初のルールが一致した場合、ワークフローは待機状態で一時停止し、2 つのタスクを並列状態で実行してからチェックポイントに移動し、ワークフローを正常に終了します。一致がない場合、ワークフローはステートマシンを停止する前にデフォルトで失敗状態になります。

待機状態は、より多くの作業を実行する前に遅延する場合に役立ちます。おそらく、ワークフローは注文エントリから 30 秒待機するため、顧客は間違った配送先住所に気づき、修正する時間があります。

並列状態は、データに対して複数のプロセスを実行できます。ワークフローでは、注文チケットの印刷、在庫の更新、日次売上レポートの増加が同時に行われる可能性があります。

Hello World ワークフローの開始方法の図

ワークフローコードを表示する (ASL)

最初のステートマシンは非常に詳細なため、コードを確認してさらに詳しく調べてください。

ステートマシンは、ステートマシンを宣言的に記述する JSON ベースの言語を記述するオープンソース仕様である Amazon States Language (ASL) を使用して定義されます。

ステートマシン定義全体を表示するには

  1. { } コードボタンを選択すると、ASL コードが表示されます。

  2. 左側のコードを表示し、右側のステートマシングラフと比較します。

  3. キャンバスのいくつかの状態を選択して確認します。例えば、Choice 状態を選択します。

コードビューの図

コードビューで状態の定義がどのように強調表示されているかに気付きましたか?

Inspector でコードを表示するには

  1. 設計モードに戻します。

  2. 右側の Inspector パネルを展開します。

  3. Canvas のワークフローグラフから選択状態を選択します。

  4. Inspector パネルで、定義のトグルを選択します。

他の状態を選択してみてください。選択した各状態の ASL コードがどのようにスクロールされて表示および強調表示されるかを確認します。

(実際に) ステートマシンを作成する

警告: ステートマシンに今すぐ名前を付けます。

ステートマシンの作成後に名前を変更することはできません。ステートマシンを保存する前に名前を選択します。

これまでは、ステートマシンのドラフトに取り組んでいます。リソースはまだ作成されていません。

ステートマシンの名前を変更して作成するには

  1. Config モードを選択します。

  2. ステートマシン名には、「」と入力します。 MyFirstStateMachine

  3. アクセス許可については、デフォルトの「新しいロールを作成する」を受け入れます。

  4. ステートマシンを実際に作成するには、作成ボタンを選択します。

ステートマシンと新しい IAM ロールが作成されたという通知が表示されます。

ステートマシンを起動するオプションが自動的に表示されます。次のステップでこれを行います。

Hello World ワークフローの開始方法の図
ワークフローの作成が完了しました。

Step Functions がワークフローと IAM ロールを作成しました。これで、ステートマシンを起動する準備が整いました。

ステップ 2 - ステートマシンを起動する

ステートマシンを作成したら、ワークフローの実行を開始できます。

ワークフローはオプションで、 状態で使用でき、統合サービスに送信され、次の 状態に渡される入力を取得します。

Hello World ステートマシンは自己完結型で、入力は必要ありません。

開始方法の図

ステートマシンを起動するには

  1. 実行の名前hello001に を入力します。

  2. 入力フィールドはのままにします。

  3. 実行開始ボタンを選択します。

ワークフローを開始するための画像例。

実行の詳細を確認する

開始直後に、最初の 2 つの状態が成功したはずです。

しばらくすると、残りの状態遷移が実行されてワークフローが完了します。

Choice 状態 (Hello World の例か?) X 秒待機状態に分岐することをどのように決定したか疑問ですか?

  1. ヒント: ステートマシンの最初のステップには、ブランチの決定に必要なデータが含まれています。

  2. グラフビューでは、実行中の進行状況をモニタリングし、各状態の詳細を調べることができます。

  3. 最初の合格状態 (変数と状態出力の設定という名前) を選択し、入力/出力タブを確認します。

状態入力が空白であることがわかりますが、状態出力には の値を に設定する JSON IsHelloWorldExample が含まれていますtrue

実行 001

グラフビューからテーブルビューに切り替えて、名前、タイプ、ステータス別の状態のリストを表示します。

実行 001 テーブルビュー
ヒント

前のスクリーンショットの Duration フィールドと Timeline フィールドを書き留めます。どの状態が他の状態よりも時間がかかるかが一目でわかります。

この実行の詳細ページには、イベントビュー状態ビューの 2 つのビューがあります。

イベントビューは、状態間のフローの詳細な詳細ビューです。

イベントビューテーブルで最初の PassStateEntered イベントと PassStateExited イベントを展開して、状態が入力を受け取らず、CheckpointCount値 0 という変数を割り当て、前に見た出力を生成する方法を確認します。

実行 001 イベントビュー

最後に、テーブルビューに似た状態ビューがあります。状態ビューテーブルでは、状態を選択的に展開して、各状態の入出力のみを表示できます。

実行 001 状態ビュー
お疲れ様でした。最初の Step Functions ステートマシンを実行しました。

Pass 状態を使用してワークフローに静的データを追加するのは、特にトラブルシューティングの一般的なパターンです。

次のステップでは、ステートマシンの入力を動的に設定できるようにワークフローを更新します。

ステップ 3 - 外部入力を処理する

の値をワークフロー内のIsHelloWorldExample一定の値に設定することは現実的ではありません。ステートマシンがさまざまな入力データに応答することを期待する必要があります。

このステップでは、外部 JSON データをワークフローへの入力として使用する方法を示します。

外部入力の処理

ハードコードされた入力を削除する

まず、最初のパス状態の出力でハードコードされた値を置き換えます。

  1. ページの右上にあるステートマシンの編集ボタンを選択して、Hello World ステートマシンを編集します。

  2. Start (Set Variables and State Output) の後に最初の Pass 状態を選択し、Output タブを選択します。

  3. 出力を次の JSON に置き換えます。

    { "IsHelloWorldExample": "{% $states.input.hello_world %}", "ExecutionWaitTimeInSeconds": "{% $states.input.wait %}" }
  4. ステートマシンを保存します。

更新された状態出力は、JSONata 式を使用してリザーブド $states 変数から入力データをプルします。これらの値は出力として次の状態に渡され、次の状態の入力になります。

入力データを使用して、更新されたワークフローを実行する

次に、ワークフローを実行し、外部入力データを JSON として指定します。

  1. ワークフローを実行するには、実行ボタンを選択します。

  2. 名前には、ランダムに生成された ID を使用します。

  3. 入力フィールドに次の JSON を使用します。

    { "wait" : 20, "hello_world": true }
  4. 実行開始ボタンを選択します。

ステートマシンの実行はかなり長く (20 秒) 待機する必要がありますが、最終的には指定した入力を使用して成功します。

グラフビューで、最初のパス状態の入出力を確認します。指定した入力がどのように出力に変換されたかに注目してください。また、実行の詳細ページの上部にある実行の入力と出力を確認します。どちらの場所にも、実行の開始に使用した入力が表示されます。

ヒント

hello_worldfalse に設定して新しい実行を実行するとどうなりますか? 試してみましょう !

ワークフロー実行の確認

ワークフローを数回実行したので、実行の詳細を確認してワークフローの実行を確認します。

実行の詳細を確認するには

  1. ナビゲーションパンくずリストまたは左側のメニューからステートマシンを選択します。

  2. ステートマシンを選択します。

実行タブには、次のスクリーンショットのような実行のリストが表示されます。

hello ワークフロー実行のサンプルリストを示すスクリーンショットの例。

最後に、ワークフロー実行名は一意でなければならず、再利用することはできません。このチュートリアルでは短縮名 (hello001) を提案しましたが、本番ワークロードには常に固有の命名規則を使用することをお勧めします。

ヒント

おめでとうございます。ワークフローを実行するたびに変化する可能性のある外部入力を処理するようにワークフローを変更しました。

ステップ 4 - サービスを統合する

Step Functions ステートマシンは、AWS SDK 統合を使用して 220 を超える AWS サービスを呼び出すことができます。 AWS サービスは、ステートマシンに 10,000 を超える潜在的な API アクションを提供します。

このステップでは、Amazon Comprehend タスクを統合して感情分析を行い、ステートマシンの入力を処理します。

サービス統合では、次の 3 つのサービス統合パターンのいずれかを使用します。

  1. レスポンスをリクエストする (デフォルト) - HTTP レスポンスを待ってから、すぐに次の状態に進みます。

  2. ジョブを実行する (.sync) - ジョブが完了するまで待ってから、次のステップに進みます。

  3. Wait for Callback (.waitForTaskToken) - タスクトークンが外部プロセスによって返されるまでワークフローを一時停止します。

サービス統合を示すスクリーンショットの例。

最初の統合には、リクエストレスポンス (デフォルト) 統合パターンを使用します。

統合の仕組み

タスク状態は、ステートマシンによって実行される単一の作業単位を表します。ステートマシンのすべての作業は、タスクにより処理されます。

タスクは通常、他の サービスの API アクションに入力を渡して作業を実行し、その後、独自の作業を実行します。、、、 など、多数のフィールドを使用してCredentialsRetryCatchTimeoutSeconds、タスクの実行方法を指定できます。タスクの詳細については、「」を参照してくださいTask ワークフロー状態

AWS SDK 統合を使用するには、呼び出すサービス名API を指定します。一部の統合にはパラメータも必要です。

Amazon States Language を使用して、タスク状態のリソースフィールドに AWS API アクションを指定できます。オプションで、サービス統合タイプをサービス名に追加できます。

API アクションを指定するには、次のリソース名テンプレートを使用します。

arn:aws:states:::aws-sdk:serviceName:apiAction.[serviceIntegrationPattern]
パラメータ名の大文字と小文字

API アクションは camelCase (小文字の初期化) ですが、ParameterNames は Pascal ケース (大文字の初期化) になることに注意してください。

リソース名の例

  • arn:aws:states:::aws-sdk:ec2:describeInstances は、Amazon EC2 describeInstances API を呼び出した結果を返します。

  • arn:aws:states:::aws-sdk:s3:listBuckets は、Amazon S3 listBuckets API を呼び出した結果を返します。 listBuckets

  • arn:aws:states:::aws-sdk:sfn:startExecution は、ネストされた Step Functions ステートマシンの実行を開始し、そのワークフローの結果を返します。

Step Functions が Task状態を使用して別のサービスを呼び出す場合、デフォルトのパターンはリクエストレスポンスです。リクエストレスポンス統合パターンでは、Step Functions はサービスを呼び出し、レスポンスを受け取り、すぐに次の状態に進みます。

感情検出の統合

ステップ 4.1 - 感情分析状態を追加する

  1. MyFirstStateMachine ステートマシンを編集します。

  2. 状態ブラウザアクションパネルから、 を検索しますDetectSentiment

  3. Comprehend DetectSentiment を選択状態のデフォルトブランチにドラッグアンドドロップします。

  4. Fail 状態を選択して削除します。

  5. 状態ブラウザフロータブから、DetectSentiment の後に成功状態をドラッグします。

ステップ 4.2 - 感情分析状態を設定する

  1. Comprehend ステップを選択して、Inspector パネルで設定します。

  2. 引数と出力タブを選択し、引数を次の JSON に置き換えます。

    { "LanguageCode": "en", "Text": "{% %}" }
  3. パーセント記号の間にカーソルを置き{% %}、次のように入力します。 $

  4. エディタでオートコンプリートを使用して statesを選択します。

    次にcontext、「」と入力.して選択します。

    次にExecution、「」と入力.して選択します。

    次にInput、「」と入力.して選択します。

    最後に、「」と入力.feedback_commentして、コンテキストオブジェクトから初期入力を取得します。

これらのオートコンプリートオプションを選択したら、状態引数に次の JSON が必要です。

{ "LanguageCode": "en", "Text": "{% $states.context.Execution.Input.feedback_comment %}" }
エディタの自動入力の使用

エディタの自動入力を使用すると、オプションを調べることができます。

自動入力では、変数、コンテキストオブジェクトを含む予約済み $states 変数、およびそれらの定義で使用可能な関数が一覧表示されます。

ステップ 4.3 - ID ポリシーを設定する

ワークフローを実行する前に、ステートマシンが外部サービスへの API コールを実行できるようにするロールポリシーを作成する必要があります。

Step Functions の IAM ロールを作成するには

  1. 新しいタブで IAM コンソールに移動し、ロールを選択します。

  2. [Create a new role (新規ロールの作成)] を選択します。

  3. Trusted entity typeAWS Service を選択します。

  4. ユースケースでは、Step Functions を選択します。

  5. アクセス許可の追加 で、へ を選択してデフォルトポリシーを受け入れます。ロールの作成後に Comprehend のポリシーを追加します。

  6. Name に HelloWorldWorkflowRole と入力します。

  7. [ロールの作成] を選択してください。

Amazon Comprehend の HelloWorldWorkflowRole にポリシーを追加するには

  1. HelloWorldWorkflowRole ロールを選択して編集します。

  2. アクセス許可を追加を選択し、インラインポリシーを作成します

  3. サービスの Comprehend を選択します。

  4. 「読み取り」で「DetectSentiment」を選択し、次に「次へ」を選択します。

  5. ポリシー名DetectSentimentPolicy と入力し、ポリシーを作成します。次のようなポリシーを JSON として作成しておく必要があります。

    { "Version": "2012-10-17", "Statement": [ { "Action": [ "comprehend:DetectSentiment" ], "Resource": [ "*" ], "Effect": "Allow" } ] }

IAM ロールを Step Functions ステートマシンにアタッチするには

  1. ステートマシンの編集に戻り、Config タブを選択します。

  2. 実行ロールドロップダウンから、HelloWorldWorkflowRole を選択します。

  3. ステートマシンを保存します。

ステップ 4.4 - ステートマシンを実行する

入力用に次の JSON を使用してステートマシンの実行を開始します。

{ "hello_world": false, "wait": 42, "feedback_comment" : "This getting started with Step Functions workshop is a challenge!" }

正しいポリシーがないと、次のようなアクセス許可エラーが表示されます。

User: arn:aws:sts::account-id:assumed-role/StepFunctions-MyStateMachine-role is not authorized to perform: comprehend:DetectSentiment because no identity-based policy allows the comprehend:DetectSentiment action (Service: Comprehend, Status Code: 400, Request ID: a1b2c3d4-5678-90ab-cdef-EXAMPLE11111)

前のエラーメッセージは、ステートマシンに外部サービスを使用する権限がないことを示しています。ステップに戻って、ID ポリシーが設定されていることを確認します。

学習したことを練習します。

より複雑なワークフローに進む前に、以下のタスクで学習した内容を練習します。

  • DetectSentiment ステップを確認します。さまざまなビューの入出力を見て、感情検出の結果を確認します。

  • テーブルビューで DetectSentiment 状態の期間を検索します。

  • JSON 入力のコメントを変更し、ステートマシンを再実行します。

感情分析結果の詳細については、Amazon Comprehend - Sentiment」を参照してください。

リクエストレスポンスの統合について考える 1 つの方法は、レスポンスは通常、リクエストの確認のみを表します。ただし、感情分析などの一部の統合では、確認は実際にタスクの完了を表します。

キー学習は、 Task状態がリクエストレスポンス統合の基盤となるジョブを待機しないということです。レスポンスを待つには、ジョブの実行 (.sync) サービス統合パターンを調べる必要があります。

お疲れ様でした。

最初のステートマシンを作成し、リクエストレスポンスパターンを使用して感情分析タスクを統合しました。

フィードバックをお待ちしております。

この入門チュートリアルが役に立った場合、またはチュートリアルを改善するための提案がある場合は、このページのフィードバックオプションを使用してお知らせください。

リソースをクリーンアップする

作成したリソースをクリーンアップするには、次の手順に従います。

  1. AWS コンソールの Step Functions ページに移動します。

  2. 左側のナビゲーションペインからステートマシンを選択します。

  3. MyFirstStateMachine を選択する

  4. IAM ロールを削除するには

    1 - IAM ロールのリンクに従って、新しいタブの IAM ロールページに移動します。カスタム関連ロールを削除します。

    2 - IAM ロールで、MyFirstStateMachine を含む自動生成されたロールを検索します。自動生成されたロールを削除します。

  5. Step Functions コンソールタブに戻り、アクションドロップダウンを選択し、削除を選択してステートマシンを削除します。

これで、ステートマシンと関連するロールが正常に削除されるはずです。