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

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

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

このサンプルプロジェクトでは、 マッピング 状態を使用した動的な並列処理を示します。

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

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

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

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

  2. 検索ボックスに Dynamically process data with a Map state と入力し、返された検索結果から [Map ステートでデータを動的に処理する] を選択します。

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

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

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

    • Map ステートによってメッセージが繰り返し読み込まれ、削除される Amazon SQS キュー。

    • Map ステートによってメッセージが繰り返し書き込まれる DynamoDB テーブル。

    • Step Functions が Amazon SQS キューから読み取ったメッセージをパブリッシュする Amazon SNS トピック。

    • 2 AWS Lambda つの機能

    • AWS Step Functions ステートマシン

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

    以下のイメージは、[Map ステートでデータを動的に処理する] サンプルプロジェクトのワークフローグラフを示しています。

    マップステートでデータを処理する サンプルプロジェクトのワークフローグラフ
  5. [テンプレートの使用] を選択して選択を続行します。

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

    • [その上に構築する] を選択した場合、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 テンプレートで使用される各サービスには標準料金が適用される場合があります。

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

ステップ 2: Amazon SNS トピックを登録する

  1. [Amazon SNS console] (Amazon SNS コンソール) を開きます。

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

    名前は MapSampleProj-snStopic-1CQO4HQ3Ir1KN と同じになります。

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

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

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

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

  6. [Create subscription] (サブスクリプションの作成) を選択します。

    注記

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

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

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

ステップ 3: Amazon SQS キューにメッセージを追加する

  1. [Amazon SQS コンソール] (Amazon SQS コンソール) を開きます。

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

    名前は MapSampleProj-SQsqueue-1udic9vzDorn7 と似ています。

  3. [メッセージの送信と受信] を選択します。

  4. [メッセージを送受信] ページで、メッセージを入力し、[メッセージを送信] を選択します。

  5. 別のメッセージを入力して [メッセージを送信] を選択します。Amazon SQS キューに複数のメッセージが追加されるまで、メッセージの入力を続けます。

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

注記

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

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

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

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

    1. (オプション) 実行を識別するには、[名前] ボックスに名前を指定します。デフォルトでは、Step Functions は自動的に一意の実行名を生成します。

      注記

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

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

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

      注記

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

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

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

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

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

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

このステートマシンの例を参照し、Resource フィールドの Amazon リソースネーム (ARN) に接続し、Parameters をサービス API に渡すことで、Step Functions が Lambda、DynamoDB、および Amazon SNS を制御する方法を確認します。

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 AWS を他のサービスで使用する場合の IAM の設定方法については、を参照してください統合サービスの IAM ポリシー