web-dev-qa-db-ja.com

APIゲートウェイはステップ関数から出力結果を取得しますか?

作成と呼び出しに関するチュートリアルに従いました ステップ関数

ApiのGETリクエストで次のように出力を取得しています

 {
  "executionArn": "arn:aws:states:ap-northeast-1:123456789012:execution:HelloWorld:MyExecution",
  "startDate": 1.486772644911E9
}

しかし、上記の応答の代わりに、以下のように終了状態によって与えられるステップ関数を出力したいと思います。

{
   "name":"Hellow World"
}

これを達成する方法は?

13
JagsSparrow

AWS Step Functionsは非同期であり、結果をすぐには返しません。 API Gatewayメソッドは同期的であり、最大タイムアウトは29秒です。

ステップ関数から関数出力を取得するには、DescribeExecutionアクションでステップ関数を呼び出す2番目のメソッドをAPIGatewayに追加する必要があります。 API Gatewayクライアントは、返されたステータスが「RUNNING」でなくなるまで、これを定期的に呼び出す必要があります(ポーリング)。

これが DescribeExecutionドキュメント

19
MikeD at AWS

まず、ステップ関数は非同期で実行され、API Gatewayはステップ関数(フローの開始)のみを呼び出すことができます。

Webアプリケーションからのステップ関数呼び出しの結果を待っている場合は、これにAWS IOTWebSocketを使用できます。手順は次のとおりです。

  • WebSocketを使用してAWSIOTトピックを設定します。
  • APIGatewayおよびStep関数の呼び出しを構成します。
  • Webフロントエンドから、WebSocketリスナーとしてIOTトピックにサブスクライブします。
  • ステップ関数ワークフローの最後のステップ(およびエラーステップ)で、AWS SDKを使用してIOTトピックをトリガーし、WebSocketを使用してブラウザーで実行されているWebアプリに結果をブロードキャストします。

AWS IOTを使用したWebSocketの詳細については、中程度の記事 WebSocketを使用してブラウザーでAWS IoTメッセージを受信する を参照してください。

3
Ashan

AWSの@MikeDの説明を拡張すると、ステップ関数が30秒のタイムアウトを超えないことが確実な場合は、ステップ関数を実行し、結果をポーリングするときにブロックするラムダを作成できます。結果が得られたら、それを返すことができます。

最初の呼び出しで実行IDをすぐに返し、終了したらそのIDを2番目の呼び出しに渡して結果を取得することをお勧めします。

2
Lee Oades