コールバックパターンの例 (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 キューは、その同じタスクトークンで SendTaskSuccess を呼び出す AWS Lambda 関数をトリガーします。

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

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

Step Functions にコールバックパターンを実装する方法については、タスクトークンのコールバックまで待機する を参照してください。

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

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

  1. Step Functions コンソールを開き、[Create a state machine] (ステートマシンの作成) を選択します。

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

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

    
          コールバック例のワークフロー
  3. [Create Sample Project] (サンプルプロジェクトの作成) を選択します。

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

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

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

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

    注記

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

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

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

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

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

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

Lambda コールバックの例

このサンプルプロジェクトのコンポーネント間の連携方法については、AWS アカウントにデプロイされたリソースを参照してください。例えば、次の Lambda 関数はタスクトークンを使用して Step Functions を呼び出します。

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); }); } };