コールバックパターンの例(Amazon SQS、Amazon SNS、Lambda) - AWS Step Functions

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

コールバックパターンの例(Amazon SQS、Amazon SNS、Lambda)

このサンプルプロジェクトは、AWS Step Functions をタスク実行中に一時停止して、タスク開始時に生成されたタスクトークンが外部プロセスから返されるまで待機するようにする方法を示します。

このサンプルプロジェクトがデプロイされて、実行が開始すると、次の手順が行われます。

  1. Step Functions は、タスクトークンを含むメッセージを Amazon Simple Queue Service (Amazon SQS) キューに渡します。

  2. Step Functions 次には一時停止し、トークンが返されるまで待機します。

  3. Amazon SQS キューは、AWS Lambda関数を呼び出しますSendTaskSuccessを同じタストークンで呼び出します。

  4. タスクトークンを受信すると、ワークフローは続行します。

  5. -"Notify Success"タスクは、コールバックが受信した Amazon Simple Notification Service (Amazon SNS) メッセージを発行します。

Step Functions にコールバックパターンを実装する方法については、」タスクトークンのコールバックまで待機する

AWS Step Functions で他の AWS のサービスを制御する方法の詳細については、「他のサービスで AWS Step Functions を使用する」を参照してください。

ステートマシンを作成してリソースをプロビジョニングする

  1. を開くStep Conctionsを選択し、ステートマシンの作成

  2. [Sample Projects (サンプルプロジェクト)] を選択し、[Callback Pattern Example (コールバックパターン例)] を選択します。

    ステートマシン [コード] と [ビジュアルワークフロー] が表示されます。

    
          コールバック例のワークフロー
  3. [Create Sample Project] を選択します。

    [Create Project Resources (プロジェクトリソースの作成)] ページが表示されて、作成されるリソースが示されます。このサンプルプロジェクトでは、以下のリソースが含まれます。

    • Amazon SQS メッセージキュー。

    • Step Functions API アクションを呼び出すLambda 関数、SendTaskSuccess

    • Amazon SNS トピック。ワークフローを続行できるように、成功または失敗を通知する Amazon SNS トピック。

    注記

    これらのリソースおよび関連する IAM アクセス許可が作成されるまで、最大 10 分かかることがあります。[Create Project Resources (プロジェクトリソースの作成)] ページで [Creating resources (リソースの作成)] と表示中に、[Stack ID (スタック ID)] リンクを開いて、どのリソースがプロビジョンされているかを確認できます。

    完了すると、[New execution (新しい実行)] ページが表示されます。

  4. (オプション) 実行名およびサンプル入力を入力します。

    
          コールバックの実行開始
  5. [Start Execution] を選択します。

    ステートマシンの新しい実行が開始され、実行中の実行が表示されている新しいページが表示されます。

    
          コールバックの実行
  6. Step Functions がどのようにワークフローを通して進行し、Amazon SQS からコールバックを受信しているかを確認するには、実行イベント履歴

Lambda コールバックの例

このサンプルプロジェクトのコンポーネント間の連携方法については、AWSアカウント. たとえば、次の関数はタスクトークンを使用して Step Functions を呼び出します Lambda 関数を示します。

console.log('Loading function'); const aws = require('aws-sdk'); exports.lambda_handler = (event, context, callback) => { const stepfunctions = new aws.StepFunctions(); for (const record of event.Records) { const messageBody = JSON.parse(record.body); const taskToken = messageBody.TaskToken; const params = { output: "\"Callback task completed successfully.\"", taskToken: taskToken }; console.log(`Calling Step Functions to complete callback task with params ${JSON.stringify(params)}`); stepfunctions.sendTaskSuccess(params, (err, data) => { if (err) { console.error(err.message); callback(err.message); return; } console.log(data); callback(null); }); } };