Amazon 、Amazon SQS、SNSおよび Lambda を使用してコールバックパターンの例を作成する - AWS Step Functions

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

Amazon 、Amazon SQS、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 サービスをコントロールする方法の詳細については、「」を参照してください他の サービスと Step Functions の統合

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

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

  2. 検索ボックスに Callback pattern example と入力し、返された検索結果から [コールバックパターンの例] を選択します。

  3. [次へ] を選択して続行します。

  4. Step Functions は、選択したサンプルプロジェクト AWS サービス で使用される を一覧表示します。サンプルプロジェクトのワークフローグラフも表示されます。このプロジェクトを にデプロイ AWS アカウント するか、独自のプロジェクトを構築するための出発点として使用します。進める方法に応じて、[デモの実行] または [その上に構築する] を選択します。

    このサンプルプロジェクトは、以下のリソースをデプロイします。

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

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

    • ワークフローを続行できるかどうかを示すタスクの成功または失敗を通知する Amazon SNSトピック。

    • AWS Step Functions ステートマシン

    • 関連する AWS Identity and Access Management (IAM) ロール

    以下のイメージは、[コールバックパターンの例] サンプルプロジェクトのワークフローグラフを示しています。

    バッチジョブの管理ワークフローの図表。
  5. [テンプレートの使用] を選択して選択を続行します。

  6. 次のいずれかを行います。

    • Build on it を選択した場合、Step Functions はワークフロープロトタイプを作成しますが、ワークフロー定義にリソースをデプロイしないため、ワークフロープロトタイプの構築を継続できます。

      Workflow Studio の ではデザインモード、ワークフロープロトタイプに状態を追加できます。または、 に切り替えコードモードて、統合されたコードエディタを使用して、Step Functions コンソールからステートマシンの Amazon ステートメント言語 (ASL) 定義を編集することもできます。

      重要

      ワークフロー を実行する前に、サンプルプロジェクトで使用されるリソースのプレースホルダー Amazon リソースネーム (ARN) を更新する必要がある場合があります。 ワークフローを実行

    • デモの実行 を選択した場合、Step Functions は、 AWS CloudFormation テンプレートを使用してそのテンプレート内の AWS リソースを にデプロイする読み取り専用プロジェクトを作成します AWS アカウント。コードモード を選択すると、ステートマシンの定義を表示できます。

      デプロイと実行を選択してプロジェクトをデプロイし、リソースを作成します。

      デプロイには、リソースとIAMアクセス許可が作成されるまでに最大 10 分かかる場合があることに注意してください。リソースのデプロイ中に、 AWS CloudFormation スタック ID リンクを開いて、プロビジョニングされているリソースを確認できます。

      すべてのリソースが作成されると、コンソールのステートマシンページにプロジェクトが表示されます。

      重要

      CloudFormation テンプレートで使用されるサービスごとに、標準料金が適用される場合があります。

ステップ 2: ステートマシンを実行する

  1. [ステートマシン] ページで、サンプルプロジェクトを選択します。

  2. サンプルプロジェクトページで、[実行を開始] を選択します。

  3. [実行を開始] ダイアログボックスで、以下の操作を行います。

    1. (オプション) 実行を識別するには、名前を指定するか、デフォルトで生成された実行名 を使用します。

      注記

      Step Functions は、 ASCII以外の文字を含むステートマシン、実行、アクティビティ、およびラベルの名前を受け入れます。文字ASCII以外の名前は Amazon では機能しないため CloudWatch、 ASCII でメトリクスを追跡できるように、文字のみを使用することをお勧めします CloudWatch。

    2. (オプション) 入力ボックスに、ワークフローを実行するための入力値を JSON 形式で入力します。

      [デモの実行] を選択した場合、実行入力を入力する必要はありません。

      注記

      デプロイしたデモプロジェクトに事前入力された実行入力データが含まれている場合は、その入力を使用してステートマシンを実行します。

    3. [実行のスタート] を選択します。

    4. Step Functions コンソールから実行 ID のタイトルが付いたページが表示されます。このページは、[実行の詳細] ページと呼ばれます。このページでは、実行の進行中または完了後に実行結果を確認できます。

      実行結果を確認するには、[グラフビュー] で個々の状態を選択し、ステップの詳細 ペインの個々のタブを選択すると、入力、出力、定義などの各状態の詳細がそれぞれ表示されます。[実行の詳細] ページに表示できる実行情報の詳細については、「[実行の詳細] ページ - インターフェイスの概要」を参照してください。

    例えば、Step Functions がワークフローをどのように進行し、Amazon からコールバックを受け取ったかを確認するにはSQS、イベントテーブルのエントリを確認します。次の図は、[成功を通知] ステップの実行出力を示しています。実行イベント履歴の最初の 5 つのイベントも表示されます。各イベントを展開すると、そのイベントの詳細が表示されます。

    「成功の通知」ステップの実行出力の抜粋。5 つのイベントが表示されます。

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