AWS Step Functions のよくある質問

概要

AWS Step Functions はフルマネージドサービス型のサービスで、視覚的ワークフローを使用して分散アプリケーションやマイクロサービスのコンポーネントをより容易にコーディネートできます。それぞれ別個の機能を実行する個々のコンポーネントからアプリケーションを構築することで、より簡単にアプリケーションをスケーリング、およびより迅速に変更できるようになります。

Step Functions を使えば、安心してアプリケーションのコンポーネントを調整し、機能を配置できます。グラフィカルコンソールを使用して、アプリケーションのコンポーネントを一連のステップとして配置し、可視化できます。これにより、複数のステップからなるアプリケーションをより簡単に構築および実行できるようになります。

Step Functions では、各ステップが自動的にトリガーおよび追跡され、エラーが発生した場合は再試行されるため、アプリケーションが意図したとおりに整然と実行されます。また、各ステップの状態がログされるため、問題が発生した場合は、問題をより迅速に診断およびデバッグできます。コードを記述することなくステップを変更および追加できるため、アプリケーションをより簡単に発展させ、短期間でイノベーションを実現できます。

アプリケーションをサービスコンポーネント (またはステップ) に分割することで、1 つのコンポーネントに障害が発生しても、システム全体がダウンすることがありません。各コンポーネントは独立してスケールでき、変更のたびにシステム全体を再デプロイする必要なく、そのコンポーネントを更新することができます。

サービスコンポーネントのコーディネートとは、具体的には実行従属関係、スケジューリング、および同時実行を、アプリケーションの論理的フローに従って管理することです。このようなアプリケーションでは、サービスオーケストレーションを使用してこれを実行し、障害を処理できます。

Step Functions は、一連のステップに細分できる計算上の問題やビジネスプロセスに役立ちます。エンドトゥーエンドワークフローを作成して、相互依存するジョブを管理するのも便利です。一般的ユースケースには、以下のようなものがあります。

  • データ処理: 複数のデータベースのデータを統合して統一レポートを作成したり、大規模なデータセットを便利な形式に改良および縮小したり、Amazon Simple Storage Service (S3) バケット内の数百万のファイルを高い同時実行性ワークフローで反復処理したり、マルチステップ分析や機械学習ワークフローを連携させたりすることができます。
  • サーバーレスのジェネレーティブ AI アプリケーションの構築:Step Functions を活用して、 Amazon Bedrock の基盤モデルとのやりとりの調整、迅速な連鎖、微調整、220 以上の AWS サービスの機能による強化を行います。
  • DevOps および IT オートメーション: 継続的インテグレーション、継続的デプロイのためにツールを構築、またはインフラストラクチャーの変化に自動的に応答する事象主動のアプリケーションを作成します
  • e コマース – 注文のフルフィルメントや在庫追跡など、ミッションクリティカルなビジネスプロセスを自動化する。
  • ウェブアプリケーション – 強力なユーザー登録プロセスとサインオン認証を実装する。

詳細については、AWS Step Functions のユースケースおよびお客様の声をお読みください。

Step Functions を使用すると、ワークフローを一連のステップ、その関係および入出力とみなす状態マシンを定義することができます。状態マシンはそれぞれがワークフローダイアグラムの手順を表す状態の数を含んでいます。

状態は作業の実行、選択、パラメータの移動、並行実行の開始、タイムアウトの管理、または成功または失敗という形でワークフローを停止します。

視覚的なコンソールで各状態を実行順に自動的にグラフ化できるため、複数ステップのアプリケーションをより簡単に設計できます。コンソールでは各ステップのリアルタイムステータスが強調表示され、すべての実行の詳細な履歴が提供されます。

詳細については、Step Functions デベロッパーガイドStep Functions の仕組み」をご覧ください。

サービスの統合を使用した AWS のサービスのオーケストレートや、アクティビティタスクを使用したセルフマネージド型アプリケーションコンポーネントのオーケストレートが可能です。

サービスの統合は、AWS のサービスの呼び出しをコンストラクトし、その応答をワークフローに含めることを支援します。AWS-SDK サービスの統合は、ワークフローから直接、200 以上のサービスから 9,000 以上の AWS API アクションを呼び出すことができます。

最適化されたサービスの統合は、IAM ポリシー生成や非同期ジョブの完了を自動的に待つ RunAJob パターンなどの機能により、AWS LambdaAmazon Elastic Container Service (ECS)AWS GlueAmazon EMR などの共通サービスの使用をさらに簡素化します。

アクティビティタスクは、Amazon Elastic Compute Cloud (EC2)、Amazon ECS、モバイルデバイス、またはオンプレミスサーバーなど、任意のロケーションで実行するアクティビティワークとの統合を実現します。アクティビティーワーカーは 作業用に Step Functions をポーリング、Step Functions から入力を取り込み、コードを使用して作業を行い、結果をリターンします。アクティビティーワーカーは作業をリクエストするので、デプロイされファイアウォールの背後にあるワーカーを使用するのがより簡単です。

Step Functions 状態マシンは、サービスの統合アクティビティタスクの組み合わせを含むことができます。Step Functions アプリケーションでは、データセンターで稼働しているワーカーとクラウドで稼働しているワーカーを組み合わせることができます。データセンター内のワーカーは、クラウドベースのサービスタスクとともに引き続き通常どおり稼働します。

Step Functions の使用を開始する方法はいくつかあります。

AWS Step Functions 状態マシンは宣言型の Amazon States Language を使用して、JSON で定義されています。

ウェブサービス API を使用して Step Functions と通信している限り、どのようなプログラミング言語でもアクティビティワーカーを作成できます。

ご希望の言語の AWS SDK を使用すると便利です。Lambda は、Node.js (JavaScript)PythonGolang (Go)、および C# (.NET Core ランタイムおよび他の言語を使用) で記述されたコードをサポートしています。Lambda プログラミングモデルについての詳細は、Lambda デベロッパーガイドをご覧ください。

2 種類のワークフローを構成することができます。

  • 標準ワークフローの子ワークフローとしてエクスプレスワークフローを実行することにより、エクスプレスワークフローは、親オーケストレーションワークフローのタスク状態から呼び出され、親の観点から全体として成功または失敗します。そのタスクの親の再試行ポリシーに従っています。
     
  • エクスプレスワークフローをエクスプレスワークフロー内から呼び出すことで、すべてのワークフローが親ワークフローの期間制限を超えない限り、ユースケースに実行時間の長いステップまたは正確に 1 回のステップと短時間の高いレートのステップとの組み合わせがある場合、この方法でワークフローをファクタリングすることを選択できます。

Step Functions には、動的な並列処理を行うためのマップ状態があります。マップ状態には、Inline と Distributed の 2 つの動作モードがあり、どちらのモードでもアイテムのコレクションに対して同じ一連のステップを実行します。Inline モードのマップは、40 の並列ブランチの同時実行と、ワークフローにおける 25,000 イベントまたは約 6,500 の状態遷移の実行履歴制限をサポートします。Distributed モードでは、最大 10,000 の並列ブランチでの実行が可能です。分散マップは、Amazon S3 に最適化されており、S3 バケット内のオブジェクトをより簡単に反復処理することができます。統合セクションのよくある質問を参照してください。分散マップの反復処理は、ペイロードと実行履歴の制限を克服するために、並列実行に分割されます。また、各反復処理は、べき等である Standard Workflow と、べき等ではないが高速で低コストの Express Workflow のどちらで実行するかを選択できます。マップ状態の詳細はこちら。

新しい [Assign] (割り当て) フィールドを使用してワークフロー変数を定義し、$varName 構文を使用してそれらの変数を後で参照できるようになりました。StateK が以前の StateA によって生成されたデータを参照する必要がある場合は、変数なしで介在するすべての状態にデータを明示的に渡す必要があります。一方、変数がある場合は、StateA の変数に値を割り当ててから、StateK で変数を参照する必要があります。

JSONata は JSONPath と同じ様に JSON データ用のオープンソースのデータクエリ/変換言語ですが、日付と時刻の生成や数学計算などのより強力な操作を実行できる点で異なります。これにより、高度なクエリをコンパクトで強力な表記法で表現できます。JSONata には、データを操作したり組み合わせたりするための演算子と関数が組み込まれており、クエリの結果は、使い慣れた JSON オブジェクトと配列構文を使用して任意の JSON 出力構造にフォーマットできます。

はい。変数を割り当てることで、変数を既存のワークフローに追加できます。個々の状態またはワークフロー全体のクエリ言語として "QueryLanguage":"JSONata" を宣言することで、JSONata による拡張データ変換を既存のどのワークフローでも利用できます。本番ワークロードを使用している現在のお客様は、既存のワークフローで変数と JSONata を活用でき、改善されたデータディレクティブを新しいワークフローで使用することを選択できます。変数と JSONata で導入された機能をまとめて適用すると、新規のお客様が ASL の現在のバージョン内の Step Functions にオンボーディングする際に、より簡単に学習できるようになります。このアプローチにより、新しいバージョンの ASL を使用するようにワークフローをアップグレードしなくても、すべてのお客様が Step Functions の今後のすべての機能を利用できるようになります。

現在のように JSONPath と組み込み関数を使用してデータの選択と変換を行う代わりに、JSONata を使用します。"QueryLanguage":"JSONata" を使って JSONata 式を書くには、"{% JSONata expression %}" のように {%%} で囲んでください。例えば、"DateStamp": "{% $now() %}" のように今日の日付を作成できます。

JSONPath は、5 つの主要フィールドをさまざまに組み合わせて各ステート (InputPath、Parameters、ResultSelector、ResultPath、OutputPath) 内のデータのクエリと変換を行います。デベロッパーにとってこれらを推論するのは困難です。JSONata では、5 つのフィールドを 2 つの新しいフィールド (Arguments と Output) に置き換えて "QueryLanguage":"JSONata" を使用するようにオプトインできるようになりました。新しい [Arguments] (引数) フィールドには API またはサブワークフローに送信する値を作成するための追加機能があり、新しい [Output] (出力) フィールドには状態出力を構築するための追加機能があります。どちらのフィールドも、データ操作用に JSONata を受け入れます。"QueryLanguage":"JSONata" は、フィールド名に「.$」規則を使用しなくなり、代わりに JSONata 式を {%%} で囲むという簡略化されたルールセットを提供します。新しい [Condition] (条件) フィールドを使用して、Choice ステート条件を 1 行で記述できるようになりました。[Condition] (条件) フィールドには、ブール値または文字列値のいずれかを使用できます。これらは QueryLanguage 設定に応じて JSONPath 式または JSONata 式である必要があります。

比較

高度にスケーラブルで監査可能なアプリケーションの開発においてサービスコンポーネントを調整する必要がある場合は、AWS Step Functions を使用してください。サービス間でメッセージを送信、保存、および受信するために、信頼性が高く、高度にスケーラブルなホストキューが必要な場合に、Amazon Simple Queue Service (Amazon SQS) が使用されます。

  • Step Functions は、アプリケーション内のすべてのタスクとイベントを記録し、SQS では、アプリケーションレベルのトラッキングを独自に実装する必要があります。特に、アプリケーションで複数のキューを使用する場合です。
     
  • Step Functions コンソールと可視化 API によって、アプリケーションを中心としたビューが提供され、そこで、実行の検索、実行の詳細情報へのドリルダウン、および実行の管理を行うことができます。SQS では、そのような追加の機能を実装する必要があります。
     
  • Step Functions には、タスク間のデータ受け渡しや柔軟なタスク分散など、アプリケーション開発に役立つ機能が多数用意されています。一方、SQS では、アプリケーションレベルの機能を実装する必要があります。
     
  • Step Functions は、分散アプリケーションを連携させるためのワークフローを構築する機能をすぐに利用できます。SQS では、基本的なワークフローを構築することができますが、その機能は限られています。

Step Functions では、より生産的かつ機敏なアプローチにより、視覚的ワークフローを使用してアプリケーションコンポーネントを調整できるため、新しいアプリケーションには Step Functions を使用することをお勧めします。プロセスにおいて介入する外部信号が必要な場合、または結果を親に返す子プロセスを起動する場合は、Amazon Simple Workflow Service (Amazon SWF) を使用してください。

SWF では、宣言型の JSON にステートマシンを記述するのではなく、ディサイダープログラムを書いて決定ステップからアクティビティステップを分離できます。Amazon SWF では、連携ロジックを完全に制御することが可能ですが、アプリケーションの開発はより複雑になります。選択したプログラミング言語でディサイダープログラムを記述することも、Flow Framework を使用して、自動的に非同期の相互作用を構造化するプログラミングコンストラクトを利用することもできます。

Amazon EventBridge は、イベントを使用してアプリケーションコンポーネントを接続するサーバーレスサービスです。これにより、開発者はスケーラブルなイベント駆動型アプリケーションを簡単に構築できます。API Destinations は EventBridge の機能で、イベントをサードパーティのエンドポイントに転送するルールを作成して、イベントプロデューサーとコンシューマーを切り離すことができます。

AWS Step Functions の HTTPS エンドポイント統合により、HTTPS ベースのサービスを呼び出し、ビジネスロジックに基づいて実行フローを制御するために使用できる応答を受け取ることができます。Amazon EventBridge はイベントのルーティングに重点を置いていますが、Step Functions はワークフローのオーケストレーションと状態の管理に重点を置いています。EventBridge API 宛先と Step Functions の HTTPS エンドポイント統合は、認証用の接続をサポートできるため、認証資格情報をサービス間で再利用できます。両方のサービスを一緒に使用して、拡張性が高く堅牢な分散アプリケーションを構築できます。

統合

Step Functions で作成するワークフローは、サービスの統合を利用して 200 以上の AWS のサービスに対し接続および調整を行うことができます。 例えば、次のことができます。

  • AWS Lambda 関数を呼び出す
  • ECS または AWS Fargate タスクの実行
  • Amazon DynamoDB 諸表からの既存アイテムを取得する、または新規アイテムを DynamoDB 諸表に置く
  • AWS Batch ジョブを提出して完了するのを待つ
  • Amazon Bedrock Foundation モデルを呼び出す
  • SNS トピックにメッセージを公表する
  • Amazon SQS キューにメッセージを送信する
  • AWS Glue ジョブの実行を開始する
  • Amazon SageMaker ジョブを作成して機械学習モデルをトレーニングする、またはデータセットを束ねて変換する

Step Functions を使用して他の AWS サービスに接続することについての詳細は、Step Functions デベロッパーガイドをご覧ください。アプリケーションを実行する状態マシン内でタスクを作成することもできます。概要セクションのよくある質問「Step Functions はどのように私のリソースに接続しますか?」を参照してください。

Step Functions の最も一般的なユースケースについては、ユースケースのページで、詳細な使用例とそのアーキテクチャの視覚化をご覧ください。

AWS Step Functions の HTTPS エンドポイント統合を使用すると、SaaS アプリケーションを含む HTTP ベースのサービスと直接統合できます。ビジュアルインターフェイスを使用して、AWS サービスと SaaS アプリケーションで構成される分散アプリケーションを構築し、オーケストレーションできます。

TestState API を使用してワークフローの 1 つのステップをテストできるため、フィードバックサイクルを短縮して開発を加速できます。TestState を使用すると、サービスとエンドポイントを直接呼び出したり、さまざまなシナリオを模倣するように入力を変更したり、応答を確認したりできます。TestState には Workflow Studio からアクセスできるため、ワークフローをデプロイしなくても、ビルド中に簡単にテストできます。TestState は単一の状態定義と入力を受け入れ、中間データ変換とともに状態出力を同期的に返します。ワークフローを実行した後は、Amazon CloudWatch Logs や AWS X-Ray を使用して実行を分析およびデバッグできます。また、視覚的なオペレータエクスペリエンスにより、Step Functions コンソールで直接、問題のある領域をすばやく特定できます。 

ログ、メディアファイル、販売取引、IoT センサーデータなどのデータの大規模な処理を実行するために、Distributed モードでマップ状態を使用してワークフローを作成することができます。Step Functions がアイテムを反復処理し、ワークフローの並列実行を瞬時に開始するため、オンデマンドなデータ処理を大規模に構築することができます。分散マップ状態は、S3 との連携に最適化されています。ワークフローの入力として、フィルタ条件を設定した S3 バケット、S3 マニフェストファイル、JSON コレクション、S3 に保存された CSV ファイルを指定することが可能です。また、分散マップの実行出力に S3 バケットを指定することができます。

HTTPS リクエストがお客様定義の API メソッドに送信される際にこれらの API が状態マシンを呼び出すよう、Step Functions API を Amazon API Gateway に関連付けることができます。

API Gateway API を使用して、分散型バックエンドアプリケーションのコンポーネントの調整のほか、承認リクエストおよび応答といったアプリケーションの各ステップに対する人間アクティビティタスクの統合を行う Step Functions 状態マシンを開始することができます。

アプリケーションで使用するサービスの API に対するサーバーレス非同期呼び出しも可能です。詳細については、API ゲートウェイを使用してのCreating a Step Functions API の作成の弊社のチュートリアルをお試しください。

コレグラフィとオーケストレーションは、分散サービスが互いに通信する方法に関する 2 つの異なるモデルです。オーケストレーションでは、通信はより厳密に制御され、オーケストレーションサービスである Step Functions がサービスの相互作用と呼び出しの順番を調整します。

コレオグラフィは、厳密な制御を行わずに通信を実現します。Amazon EventBridge を使えば、イベントは集中的に調整されることなく、サービス間を流れます。多くのアプリケーションは、異なるユースケースに対してコレオグラフィとオーケストレーションの両方を使用します。 

Step Functions と EventBridge を併用する例としては、EventBridge Scheduler でスケジュールを作成またはイベントを送信して AWS Step Functions ワークフローを起動し、ワークフローの異なるステップでイベントを発信することが挙げられます。

AWS Lambda は、サーバーレスでイベント駆動型のコンピューティングサービスであり、サーバーのプロビジョニングや管理をすることなく、事実上あらゆるタイプのアプリケーションやバックエンドサービスのコードを実行することができます。Step Functions はサーバーレスオーケストレーションサービスで、複数の Lambda 関数を連携させ、デバッグや変更を行える柔軟なワークフローを作成できます。Step Functions では、アプリケーションの各ステップのトリガーと追跡が行われるため、Lambda 関数にロジックを追加せずにすみます。

はい、Step Functions はサーバーレスのオーケストレーションサービスです。Step Functions では、アプリケーションの各ステップを実行するために、ワークロードの変化に応じて、オペレーションや基盤となるコンピューティング機能が自動的にスケールされます。Step Functions は、耐障害性を備えています。各リージョンのアベイラビリティゾーン全体でサービスキャパシティーを維持し、マシンやデータセンターで発生する個別の障害に対してアプリケーションを保護します。これにより、サービス自体とサービスで実行されるアプリケーションワークフローの両方の可用性が高くなります。

Step Functions は、俊敏性を向上し、コストを最適化するために、利用料金制の課金モデルを提供しています。Step Functions 料金の詳細については、こちらをご覧ください。

AWS Step Functions は、アプリケーションのモニタリングのため、Amazon CloudWatch および AWS CloudTrail にメトリクスを送信します。Amazon CloudWatch によって、メトリクスの収集と追跡、アラームの設定が実行され、AWS Step Functions の変更にも自動的に反応します。

CloudTrail は Step Functions コンソールからのコール、およびコードコールから Step Functions API へのコールも含む、すべての Step Functions の API コールを事象として取り込みます。Step Functions はまた、ワークフロー内の統合された各サービス向けに CloudWatch Events マネージドルールもサポートし、必要時に AWS アカウントの CloudWatch Events ルールを作成および管理します。

詳細については、Step Functions デベロッパーガイド「モニタリングとログ記録」をご覧ください。

デフォルトでは、エクスプレスワークフローは、ワークフローの入力、出力、完了したステップを含むすべての結果を CloudWatch Logs にレポートします。異なるレベルのログ記録を選択してエラーをログすることができ、また入出力をログしないように選択できます。再試行回数を使いつくしたか、管理対象でない例外をもつワークフローは、最初から再実行する必要があります。

Step Functions は Amazon Bedrock との統合が最適化されています。自然言語を使用して、Bedrock の基礎モデルを Step Functions のワークフローから直接呼び出すことができます。これにより、次のことが可能になります。   

  • Step Functions によって処理されたデータを生成型 AI 機能で強化し、テキストの要約、画像生成、パーソナライズなどのデータ処理の複雑さを軽減します。
  • 最新の製品価格やユーザーパーソナライゼーションデータなどの情報をデータベースから取得し、Step Functions の組み込み関数を使用してプロンプトに挿入します。これにより、LLM が最新のデータを使用して応答の精度を向上させることができます。
  • Step Functions でドキュメントを調べ、データを抽出し、ドキュメントをチャンク化して、データをデジタルテキストから埋め込みに変換することで、埋め込みを生成します。これは複数のステップからなるプロセスです。これは定期的なプロセスとしてスケジュールできます。
  • プロンプトチェイニングには Step Function ワークフローを使用してください。複数の LLM 呼び出しをオーケストレーションし、チェーンの各段階に最適なモデルを選択することで、カスタマイズされた処理段階のチェーンを形成し、基礎モデルからコンテキストに即した正確な応答を抽出できます。
  • ジェネレーティブ AI ワークフローでヒューマンインザループ (HITL) インタラクションを構築して、解答をモデレートして幻覚を避けたり、基礎モデルでサポートされていない応答を処理するロジックを組み込んだりできます。

セキュリティ

Step Functions では、AWS PrivateLink を使用した VPC エンドポイント (VPCE) もサポートしています。VPC に対応した AWS Lambda 関数などのサービスから、パブリックインターネットを経由せずに Step Functions にアクセスできます。

詳細は、Step Functions デベロッパーガイドの Step Functions の Amazon VPC エンドポイントを参照してください。

コンプライアンス

Step Functions は HIPAA、FedRAMP、SOC、GDPR といった標準的なコンプライアンス標準に準拠しています。サポート対象のコンプライアンス標準のリストを確認するには、AWS クラウドセキュリティのサイトをご覧ください。