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 の概要

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

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

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

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

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

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

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

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

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

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

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

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

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

ステートマシンの概要

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

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

待機状態は、より多くの作業を実行する前に遅延させる場合に便利です。ワークフローは注文入力後 30 秒待機するため、顧客は間違った配送先住所に気づき、修正する時間があります。

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

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

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

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

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

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

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

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

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

コードビューの図

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

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 つの状態が成功したはずです。

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

選択状態 (Hello World の例か?) X 秒待機状態に分岐することを決めたことに興味がありますか?

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

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

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

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

実行 001

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

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

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

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

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

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

実行 001 イベントビュー

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

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

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

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

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

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

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

外部入力を処理する

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

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

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

  2. Start の後に最初の Pass 状態 (Set Variables and State Output という名前) を選択し、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 ワークフロー実行のサンプルリストを示すスクリーンショットの例。

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

ヒント

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

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

Step Functions ステートマシンは、AWS SDK integrations を使用して 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. 失敗状態を選択して削除します。

  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. 信頼されたエンティティタイプで、AWS サービスを選択します。

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

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

  6. 名前に、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::123456789012: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 コンソールタブに戻り、アクションドロップダウンを選択し、削除を選択してステートマシンを削除します。

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