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

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

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

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

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

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

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

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

  2. 次のように入力します。Dynamically process data with a Map state検索ボックスでを選択し、マップ状態を使用してデータを動的に処理する返された検索結果から。

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

  4. Step Functions のリストはAWS のサービス選択したサンプルプロジェクトで使用されている。また、サンプルプロジェクトのワークフローグラフも表示されます。このプロジェクトをあなたにデプロイしてください。AWS アカウントまたは独自のプロジェクトをスタートするスタート地点としてご利用ください。進めたい方法に基づいて、デモをスタートするまたはその上に構築してください。

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

    • Map ステートがメッセージを繰り返し読み込み、削除する、Amazon SQS キューです。

    • Map ステートがメッセージを繰り返し書き込む、DynamoDB テーブル。

    • Amazon SNS トピック。Step Functions は Amazon SQS キューから読み取ったメッセージをそのトピックに公開します。

    • 2 つの AWS Lambda 関数

    • AWS Step Functions ステートマシン

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

    以下の画像は、のワークフローグラフです。マップ状態を使用してデータを動的に処理するサンプルプロジェクト:

    
            のワークフローグラフマップ状態を使用してデータを動的に処理するサンプルプロジェクト。
  5. 選択してください。テンプレートを使う選択を続行するには。

  6. 以下のいずれかを実行します。

    • を選択した場合それを基に構築、Step Functions は、選択したサンプルプロジェクトのワークフロープロトタイプを作成します。Step Functions は、ワークフロー定義にリストされているリソースをデプロイしません。

      ワークフロースタジオでデザインモードから、ステートをドラッグアンドドロップします。[State browser] (状態ブラウザ)ワークフロープロトタイプの構築を続けてください。または、に切り替えてください。コードモードこれにより、VS Code と同様の統合コードエディタが更新できます。Amazon ステートメント言語Step Functions コンソール内のステートマシンの (ASL) 定義。Workflow Studio を使用してステートマシンをビルドする方法の詳細については、Workflow Studio を使用する

      重要

      サンプルプロジェクトで使用したリソースのプレースホルダー、Amazon リソースネーム (ARN) をスタートする前に、必ず更新してください。ワークフローをスタートする

    • を選択した場合デモをスタートする、Step Functions は、を使用する読み取り専用のサンプルプロジェクトを作成しますAWS CloudFormationをデプロイするためのテンプレートAWSそのテンプレートにリストされているリソースをあなたにAWS アカウント。

      ヒント

      サンプルプロジェクトのステートマシン定義を表示するには、を選択します。コード:

      準備ができたら、選択してくださいデプロイして実行サンプルプロジェクトをデプロイしてリソースを作成します。

      これらのリソースおよび関連する IAM 許可が作成されるまで、最大 10 分かかることがあります。リソースをデプロイしている間は、以下を開くことができます。 CloudFormation スタック ID リンクでは、どのリソースがプロビジョニングされているかを確認できます。

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

      重要

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

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

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

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

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

    名前は以下のようになります。MapSampleProj-SnStopic-1cQO4HQ3IR1KN

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

    [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-SQSQUE-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. [Start execution] (実行のスタート) を選択します。

    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" } ] }

他の AWS のサービスで Step Functions を使用する時に IAM を設定する方法の情報については、統合サービスの IAM ポリシー を参照してください。