マップ状態を使用してデータを動的に処理する - AWS Step Functions

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

マップ状態を使用してデータを動的に処理する

このサンプルプロジェクトでは、 Map 状態を使用した動的な並列処理を示します。このサンプルプロジェクトでは以下を作成します。

  • 2 つの AWS Lambda 関数

  • Amazon Simple Queue Service (Amazon SQS) キュー

  • Amazon Simple Notification Service (Amazon SNS) トピック

  • Amazon DynamoDB テーブル

  • AWS Step Functions ステートマシン

このプロジェクトでは、Step FunctionsAWS LambdaAmazon SQS キューからメッセージを取得し、それらのメッセージの JSON 配列をMap状態。キューのメッセージごとに、ステートマシンはメッセージを DynamoDB に書き込み、他の Lambda 関数を呼び出して Amazon SQS からメッセージを削除し、Amazon SNS トピックにメッセージを発行します。

の詳細については、「」を参照してください。Mapステートおよび Step Functions サービスの統合については、以下を参照してください。

ステートマシンの作成とリソースのプロビジョニング

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

  2. 選択サンプルプロジェクト[] を選択してから、[マップ状態を使用してデータを動的に処理する

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

    
            Map 状態のワークフロー。
  3. [Next] を選択します。

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

    • Amazon SQS キュー

    • Amazon SNS トピック

    • DynamoDB テーブル

    • 2 つの Lambda 関数

    • Step Functions ステートマシン

  4. [リソースのデプロイ] を選択します。

    注記

    これらのリソースおよび関連する IAM アクセス許可が作成されるまで、最大 10 分かかることがあります。[Deploy resources (リソースのデプロイ)] ページが表示されている場合は、[スタック ID] リンクを開いて、プロビジョンされているリソースを表示することができます。

サンプルプロジェクトのリソースがデプロイされたら、ステートマシンの実行を開始する前に、Amazon SQS キューに項目を追加し、Amazon SNS トピックに登録する必要があります。

Amazon SNS トピックをサブスクライブする

  1. を開くAmazon SNS コンソール

  2. [トピック] を選択し、 Map 状態サンプルプロジェクトで作成されたトピックを選択します。

    名前は MapSampleProj-SNSTopic-1CQO4HQ3IR1KN のようになります。

  3. [サブスクリプション] で、[サブスクリプションの作成] を選択します。

    [サブスクリプションの作成] ページが表示され、トピックのトピック ARN が一覧表示されます。

  4. [プロトコル] で [E メール] を選択します。

  5. [エンドポイント] で、トピックにサブスクライブする E メールアドレスを入力します。

  6. [Create subscription] を選択します。

    注記

    サブスクリプションがアクティブになる前に、E メールでの確認が必要です。

  7. 関連するアカウントでサブスクリプション確認用 E メールを開き、[サブスクリプションを確認] するための URL を開きます。

    [サブスクリプションを確認しました] ページが表示されます。

Amazon SQS キューにメッセージを追加する

  1. を開くAmazon SQS コンソール

  2. Map 状態のサンプルプロジェクトで作成されたキューを選択します。

    名前は MapSampleProj-SQSQueue-1UDIC9VZDORN7 のようになります。

  3. [キュー操作] リストで、[メッセージの送信] を選択します。

  4. [メッセージの送信] ウィンドウで、メッセージ 入力し、[メッセージの送信] を選択します。

  5. [別メッセージの送信] を選択します。

    Amazon SQS キューに複数のメッセージが追加されるまで、メッセージの入力を続けます。

  6. [Close] を選択します。

新しい実行の開始

注記

Amazon SNS のキューは結果整合性があります。最良の結果を得るには、キューに入力してからステートマシンの実行を開始するまで数分待ちます。

  1. を開くStep Functions

  2. [State machines (ステートマシン)] ページで、サンプルプロジェクトで作成された MapStateStateMachine ステートマシンを選択し、[Start execution (実行の開始)] を選択します。

  3. [New execution (新しい実行)] ページで、実行名を入力し (オプション)、[Start Execution (実行の開始)] を選択します。

  4. (省略可能) 実行を識別しやすくするために、実行の ID を実行名を入力ボックスに移動するとそのように表示されます。ID を入力しない場合、Step Functions は自動的に一意の ID を生成します。

    注記

    Step Functions では、非 ASCII 文字を含むステートマシン、実行、アクティビティ名を作成できます。これらの ASCII 以外の名前は、Amazon CloudWatch では機能しません。CloudWatch メトリックスを確実に追跡できるようにするには、ASCII 文字のみを使用する名前を選択します。

  5. (省略可能) Step Functions で、新しく作成されたステートマシンに移動します。ダッシュボード[] を選択してから、[新規実行

  6. 実行が完了したら、[] ダイアログボックスで、ステートを選択できます。ビジュアルワークフロー[] を参照してInputおよび出力[]ステップの詳細

ステートマシンのコードの例

このサンプルプロジェクトのステートマシンは、パラメータを直接リソースに渡すことで、Amazon SQS、Amazon SNS、Lambda と統合します。

このステートマシンの例を参照して、Step Functions が Lambda、DynamoDB、Amazon SNS を制御する方法を確認します。Resourceフィールドに入力し、Parametersをサービス API に追加します。

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

{ "Comment": "An example of the Amazon States Language for reading messages from an SQS queue and iteratively processing each message.", "StartAt": "Read messages from SQS Queue", "States": { "Read messages from SQS Queue": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "OutputPath": "$.Payload", "Parameters": { "FunctionName": "MapSampleProj-ReadFromSQSQueueLambda-1MY3M63RMJVA9" }, "Next": "Are there messages to process?" }, "Are there messages to process?": { "Type": "Choice", "Choices": [ { "Variable": "$", "StringEquals": "No messages", "Next": "Finish" } ], "Default": "Process messages" }, "Process messages": { "Type": "Map", "Next": "Finish", "ItemsPath": "$", "Parameters": { "MessageNumber.$": "$$.Map.Item.Index", "MessageDetails.$": "$$.Map.Item.Value" }, "Iterator": { "StartAt": "Write message to DynamoDB", "States": { "Write message to DynamoDB": { "Type": "Task", "Resource": "arn:aws:states:::dynamodb:putItem", "ResultPath": null, "Parameters": { "TableName": "MapSampleProj-DDBTable-YJDJ1MKIN6C5", "ReturnConsumedCapacity": "TOTAL", "Item": { "MessageId": { "S.$": "$.MessageDetails.MessageId" }, "Body": { "S.$": "$.MessageDetails.Body" } } }, "Next": "Remove message from SQS queue" }, "Remove message from SQS queue": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "InputPath": "$.MessageDetails", "ResultPath": null, "Parameters": { "FunctionName": "MapSampleProj-DeleteFromSQSQueueLambda-198J2839ZO5K2", "Payload": { "ReceiptHandle.$": "$.ReceiptHandle" } }, "Next": "Publish message to SNS topic" }, "Publish message to SNS topic": { "Type": "Task", "Resource": "arn:aws:states:::sns:publish", "InputPath": "$.MessageDetails", "Parameters": { "Subject": "Message from Step Functions!", "Message.$": "$.Body", "TopicArn": "arn:aws:sns:us-east-1:012345678910:MapSampleProj-SNSTopic-1CQO4HQ3IR1KN" }, "End": true } } } }, "Finish": { "Type": "Succeed" } } }

IAM の例

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

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "lambda:InvokeFunction" ], "Resource": [ "arn:aws:lambda:us-east-1:012345678901:function:MapSampleProj-ReadFromSQSQueueLambda-1MY3M63RMJVA9", "arn:aws:lambda:us-east-1:012345678901:function:MapSampleProj-DeleteFromSQSQueueLambda-198J2839ZO5K2" ], "Effect": "Allow" }, { "Action": [ "dynamodb:PutItem" ], "Resource": [ "arn:aws:dynamodb:us-east-1:012345678901:table/MapSampleProj-DDBTable-YJDJ1MKIN6C5" ], "Effect": "Allow" }, { "Action": [ "sns:Publish" ], "Resource": [ "arn:aws:sns:us-east-1:012345678901:MapSampleProj-SNSTopic-1CQO4HQ3IR1KN" ], "Effect": "Allow" } ] }

他ので Step Functions を使用する場合に IAM を設定する方法については、AWSサービスの詳細については、統合サービスの IAM ポリシー