統合 AWS Lambda Amazon SQSおよび Amazon を使用した Step Functions ステートマシン内の SNS - AWS Step Functions

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

統合 AWS Lambda Amazon SQSおよび Amazon を使用した Step Functions ステートマシン内の SNS

このサンプルプロジェクトでは、 を統合する方法を示します。 AWS Lambda Step Functions ステートマシンの 関数。

このプロジェクトでは、Step Functions は Lambda 関数を使用して株価をチェックし、売買取引レコメンデーションを決定します。その後、ユーザーにはこのレコメンデーションが提供され、株式の売買を選択できます。取引の結果は、 SNSトピックを使用して返されます。

Step Functions サービス統合の詳細については、以下を参照してください。

注記

このサンプルプロジェクトでは、料金が発生する場合があります。

新しい の場合 AWS ユーザーには、無料利用枠があります。この枠では、サービスを利用しても一定のレベル以下であれば無料です。の詳細については、「」を参照してください。 AWS のコストと無料利用枠については、「 の料金」を参照してください。

ステップ 1: ステートマシンを作成する

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

  2. Orchestrate Lambda functions 検索ボックスに「」と入力し、「オーケストレーション」を選択します。Lambda 返される検索結果の 関数

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

  4. デモを実行して読み取り専用の ready-to-deploy ワークフローを作成するか、ビルドを選択して編集可能なステートマシン定義を作成し、後でデプロイできます。

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

    • Five Lambda 関数

    • An Amazon Simple Queue Service キュー

    • An Amazon Simple Notification Service トピック

    • An AWS Step Functions ステートマシン

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

    次の図は、オーケストレーションのワークフローグラフを示しています。Lambda 関数サンプルプロジェクト:

    オーケストレーションのワークフローグラフ Lambda 関数のサンプルプロジェクト。
  5. [テンプレートの使用] を選択して選択を続行します。

次のステップは、前の選択肢によって異なります。

  1. デモの実行 – によってデプロイされたリソースを使用して読み取り専用プロジェクトを作成する前に、ステートマシンを確認できます。 AWS CloudFormation を に AWS アカウント.

    ステートマシンの定義を表示でき、準備ができたら、デプロイと実行を選択してプロジェクトをデプロイし、リソースを作成します。

    デプロイでは、リソースとアクセス許可の作成に最大 10 分かかる場合があります。スタック ID リンクを使用して、 の進行状況をモニタリングできます。 AWS CloudFormation.

    デプロイが完了すると、コンソールに新しいステートマシンが表示されます。

  2. 構築 – ワークフロー定義を確認して編集できます。カスタムワークフローの実行を試みる前に、サンプルプロジェクトのプレースホルダーの値を設定する必要がある場合があります。

注記

アカウントにデプロイされたサービスには、標準料金が適用される場合があります。

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

すべてのリソースのプロビジョニングとデプロイが完了すると、[実行を開始] ダイアログボックスが表示されます。

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

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

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

    1. (オプション) 生成されたデフォルトを上書きするカスタム実行名を入力します。

      非ASCII名前とログ記録

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

    2. (オプション) 入力ボックスに、入力値を と入力しますJSON。デモを実行している場合は、このステップをスキップできます。

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

    Step Functions コンソールで実行の詳細ページに移動し、グラフビューで状態を選択してペインの関連情報を確認できますステップの詳細

ステートマシンとその実行について

このサンプルプロジェクトのステートマシンは、 と統合されます。 AWS Lambda パラメータをこれらのリソースに直接渡すことで、 は Amazon SQSキューを使用して人間による承認のリクエストを管理し、Amazon SNSトピックを使用してクエリの結果を返します。

Step Functions の実行はJSONテキストを入力として受け取り、その入力をワークフローの最初の状態に渡します。個々の状態はJSONデータを入力として受け取り、通常はJSONデータを出力として次の状態に渡します。このサンプルプロジェクトでは、各ステップの出力がワークフローの次のステップへの入力として渡されます。例えば、[買い/売りのレコメンデーションを生成] ステップでは、[株価を確認] ステップの出力を入力として受け取ります。また、[買い/売りのレコメンデーションを生成] ステップの出力は、人間の承認ステップを模倣した次のステップ [人間による承認をリクエスト] に入力として渡されます。

注記

ステップによって返された出力とステップに渡された入力を確認するには、ワークフロー実行の [実行の詳細] ページを開きます。ステップの詳細セクションでは、表示モードで選択した各ステップの入力と出力が表示されます。

人間による承認ステップを実装するには、通常、タスクトークンが返されるまでワークフローの実行を一時停止します。このサンプルプロジェクトでは、メッセージを Amazon SQSキューに渡します。このキューは、コールバック機能を処理するために定義された Lambda 関数のトリガーとして使用されます。メッセージにはタスクトークンと、前のステップで返された出力が含まれています。Lambda 関数はメッセージのペイロードで呼び出されます。ワークフローの実行は、タスクトークンをSendTaskSuccessAPI呼び出しで返すまで一時停止されます。タスクの詳細については、「タスクトークンによるコールバックを待つ」を参照してください。

StepFunctionsSample-HelloLambda-ApproveSqsLambda 関数の次のコードは、Step Functions ステートマシンを介して Amazon SQSキューによって送信されたタスクを自動的に承認するように定義されている方法を示しています。

exports.lambdaHandler = (event, context, callback) => { const stepfunctions = new aws.StepFunctions(); // For every record in sqs queue for (const record of event.Records) { const messageBody = JSON.parse(record.body); const taskToken = messageBody.TaskToken; const params = { output: "\"approved\"", taskToken: taskToken }; console.log(`Calling Step Functions to complete callback task with params ${JSON.stringify(params)}`); // Approve stepfunctions.sendTaskSuccess(params, (err, data) => { if (err) { console.error(err.message); callback(err.message); return; } console.log(data); callback(null); }); } };

このステートマシンの例を参照して、Step Functions が Lambda と Amazon をどのように制御するかを確認してくださいSQS。

方法の詳細については、 AWS Step Functions は他の を制御できます AWS サービスについては、「」を参照してくださいサービスと Step Functions の統合

{ "StartAt": "Check Stock Price", "States": { "Check Stock Price": { "Type": "Task", "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLam-CheckStockPriceLambda-444455556666", "Next": "Generate Buy/Sell recommendation" }, "Generate Buy/Sell recommendation": { "Type": "Task", "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-Hello-GenerateBuySellRecommend-123456789012", "ResultPath": "$.recommended_type", "Next": "Request Human Approval" }, "Request Human Approval": { "Type": "Task", "Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken", "Parameters": { "QueueUrl": "https://sqs.us-west-1.amazonaws.com/111122223333/StepFunctionsSample-HelloLambda4444-5555-6666-RequestHumanApprovalSqs-777788889999", "MessageBody": { "Input.$": "$", "TaskToken.$": "$$.Task.Token" } }, "ResultPath": null, "Next": "Buy or Sell?" }, "Buy or Sell?": { "Type": "Choice", "Choices": [ { "Variable": "$.recommended_type", "StringEquals": "buy", "Next": "Buy Stock" }, { "Variable": "$.recommended_type", "StringEquals": "sell", "Next": "Sell Stock" } ] }, "Buy Stock": { "Type": "Task", "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLambda-BuyStockLambda-000000000000", "Next": "Report Result" }, "Sell Stock": { "Type": "Task", "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLambda-SellStockLambda-111111111111", "Next": "Report Result" }, "Report Result": { "Type": "Task", "Resource": "arn:aws:states:::sns:publish", "Parameters": { "TopicArn": "arn:aws:sns:us-west-1:111122223333:StepFunctionsSample-HelloLambda1111-2222-3333-ReportResultSnsTopic-222222222222", "Message": { "Input.$": "$" } }, "End": true } } }

他の で Step Functions を使用するIAMときに を設定する方法の詳細については、「」を参照してください。 AWS サービスについては、「」を参照してくださいStep Functions が統合サービスのIAMポリシーを生成する方法

IAM 例

この例では、 AWS Identity and Access Management サンプルプロジェクトによって生成された (IAM) ポリシーには、ステートマシンおよび関連リソースの実行に必要な最小特権が含まれています。IAM ポリシーに必要なアクセス許可のみを含めることをお勧めします。

{ "Statement": [ { "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLam-CheckStockPriceLambda-444455556666", "Effect": "Allow" } ] }
{ "Statement": [ { "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-Hello-GenerateBuySellRecommend-123456789012", "Effect": "Allow" } ] }
{ "Statement": [ { "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLambda-BuyStockLambda-777788889999", "Effect": "Allow" } ] }
{ "Statement": [ { "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLambda-SellStockLambda-000000000000", "Effect": "Allow" } ] }
{ "Statement": [ { "Action": [ "sqs:SendMessage*" ], "Resource": "arn:aws:sqs:us-west-1:111122223333:StepFunctionsSample-HelloLambda4444-5555-6666-RequestHumanApprovalSqs-111111111111", "Effect": "Allow" } ] }
{ "Statement": [ { "Action": [ "sns:Publish" ], "Resource": "arn:aws:sns:us-west-1:111122223333:StepFunctionsSample-HelloLambda1111-2222-3333-ReportResultSnsTopic-222222222222", "Effect": "Allow" } ] }

他の で Step Functions を使用するIAMときに を設定する方法の詳細については、「」を参照してください。 AWS サービスについては、「」を参照してくださいStep Functions が統合サービスのIAMポリシーを生成する方法