翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
コールバックパターンの例 (Amazon SQS、Amazon SNS、Lambda)
このサンプルプロジェクトは、 AWS Step Functions タスクの実行中に一時停止し、外部プロセスがタスクの開始時に生成されたタスクトークンを返すのを待つ方法を示しています。
このサンプルプロジェクトがデプロイされて、実行が開始すると、次の手順が行われます。
Step Functions は、タスクートークンを含むメッセージを Amazon Simple Queue Service (Amazon SQS) キューに渡します。
次にStep Functions は一時停止し、タスクトークンが返されるまで待機します。
Amazon SQS キューは、 AWS Lambda
SendTaskSuccess
同じタスクトークンを使用して呼び出す関数をトリガーします。タスクトークンを受信すると、ワークフローは続行します。
"Notify Success"
タスクは、コールバックを受信した Amazon Simple Notification Service (Amazon SNS) メッセージを発行します。
Step Functions にコールバックパターンを実装する方法については、タスクトークンのコールバックまで待機する を参照してください。
AWS Step Functions AWS 他のサービスを制御する方法の詳細については、「」を参照してくださいAWS Step Functions 他のサービスとの併用。
ステップ 1: ステートマシンを作成してリソースをプロビジョニングする
-
Step Functions コンソール
を開き、[ステートマシンの作成] を選択します。 -
検索ボックスに
Callback pattern example
と入力し、返された検索結果から [コールバックパターンの例] を選択します。 -
[次へ] を選択して続行します。
-
Step Functions には、 AWS のサービス 選択したサンプルプロジェクトで使用されているものが一覧表示されます。サンプルプロジェクトのワークフローグラフも表示されます。 AWS アカウント このプロジェクトを自分のプロジェクトにデプロイするか、独自のプロジェクトを構築するための出発点として使用してください。進める方法に応じて、[デモの実行] または [その上に構築する] を選択します。
このサンプルプロジェクトは、以下のリソースをデプロイします。
-
Amazon SQS メッセージキュー。
-
ステップ関数 API アクションを呼び出す Lambda 関数。SendTaskSuccess
-
ワークフローを続行できるかどうかを示すタスクの成功あるいは失敗を通知する Amazon SNS トピック。
-
AWS Step Functions ステートマシン。
-
関連 AWS Identity and Access Management (IAM) ロール
以下のイメージは、[コールバックパターンの例] サンプルプロジェクトのワークフローグラフを示しています。
-
-
[テンプレートの使用] を選択して選択を続行します。
-
次のいずれかを行います。
-
[その上に構築する] を選択した場合、Step Functions は選択したサンプルプロジェクトのワークフロープロトタイプを作成します。Step Functions は、ワークフロー定義にリストされているリソースをデプロイしません。
Workflow Studio の デザインモード では、[State browser] (状態ブラウザ) から状態をドラッグアンドドロップして、ワークフロープロトタイプの構築を続行できます。または、VS Code と同様の統合コードエディタを提供する コードモード に切り替えて、Step Functions コンソール内のステートマシンの Amazon ステートメント言語 (ASL) 定義を更新してください。Workflow Studio を使用してステートマシンを構築する方法の詳細については、「Workflow Studio を使用する」を参照してください。
重要
ワークフローを実行する前に、サンプルプロジェクトで使用されているリソースのプレースホルダー Amazon リソースネーム (ARN) を必ず更新してください。
-
[デモの実行] を選択した場合、Step Functions AWS CloudFormation AWS はテンプレートを使用してそのテンプレートにリストされているリソースをにデプロイする読み取り専用のサンプルプロジェクトを作成します。 AWS アカウント
ヒント
サンプルプロジェクトのステートマシン定義を表示するには、[コード] を選択します。
準備できたら、[デプロイと実行] を選択してサンプルプロジェクトをデプロイし、リソースを作成します。
これらのリソースおよび関連する IAM 許可が作成されるまで、最大 10 分かかることがあります。リソースのデプロイ中に CloudFormation Stack ID リンクを開いて、どのリソースがプロビジョニングされているかを確認できます。
サンプルプロジェクトのすべてのリソースが作成されると、新しいサンプルプロジェクトが [ステートマシン] ページに表示されます。
重要
CloudFormation テンプレートで使用される各サービスには標準料金が適用される場合があります。
-
ステップ 2: ステートマシンを実行する
-
[ステートマシン] ページで、サンプルプロジェクトを選択します。
-
サンプルプロジェクトページで、[実行を開始] を選択します。
-
[実行を開始] ダイアログボックスで、以下の操作を行います。
-
(オプション) 実行を識別するには、[名前] ボックスに名前を指定します。デフォルトでは、Step Functions は自動的に一意の実行名を生成します。
注記
Step Functions では、ステートマシン、実行、アクティビティの名前、および ASCII 以外の文字を含むラベルを作成できます。これらの非ASCII名はAmazonでは機能しません。 CloudWatch CloudWatch メトリクスを追跡できるようにするには、ASCII 文字のみを使用する名前を選択してください。
-
(オプション) [入力] ボックスに、JSON 形式の入力値を入力してワークフローを実行します。
[デモの実行] を選択した場合、実行入力を入力する必要はありません。
注記
デプロイしたデモプロジェクトに事前入力された実行入力データが含まれている場合は、その入力を使用してステートマシンを実行します。
-
[実行のスタート] を選択します。
-
Step Functions コンソールから実行 ID のタイトルが付いたページが表示されます。このページは、[実行の詳細] ページと呼ばれます。このページでは、実行の進行中または完了後に実行結果を確認できます。
実行結果を確認するには、[グラフビュー] で個々の状態を選択し、ステップの詳細 ペインの個々のタブを選択すると、入力、出力、定義などの各状態の詳細がそれぞれ表示されます。[実行の詳細] ページに表示できる実行情報の詳細については、「[実行の詳細] ページ - インターフェイスの概要」を参照してください。
例えば、Step Functions がどのようにワークフローをとおして進行し、Amazon SQS からコールバックを受信しているかを確認するには、[イベント] テーブルのエントリを確認します。次の図は、[成功を通知] ステップの実行出力を示しています。実行イベント履歴の最初の 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); }); } };