翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
マップ状態を使用してデータを動的に処理する
このサンプルプロジェクトでは、 Map
状態を使用した動的な並列処理を示します。このサンプルプロジェクトでは以下を作成します。
-
2 つの AWS Lambda 関数
-
Amazon Simple Queue Service (Amazon SQS) キュー
-
Amazon Simple Notification Service (Amazon SNS) のトピック
-
Amazon DynamoDB テーブル
-
AWS Step Functions ステートマシン
このプロジェクトでは、Step Functions は AWS Lambda 関数を使用して Amazon SQS キューからメッセージをプルし、そのメッセージの JSON 配列を Map
状態に渡します。キューのメッセージごとに、ステートマシンはメッセージを DynamoDB に書き込み、他の Lambda 関数を呼び出して Amazon SQS からメッセージを削除し、Amazon SNS トピックにメッセージを発行します。
Map
状態と Step Functions サービス統合の詳細については、以下を参照してください。
ステートマシンを作成してリソースをプロビジョニングする
-
Step Functions コンソール
を開き、[Create a state machine] (ステートマシンの作成) を選択します。 -
[Sample Projects] (サンプルプロジェクト) を選択してから、マップ状態を使用してデータを動的に処理します。
ステートマシン [Code] (コード) と [Visual Workflow] (ビジュアルワークフロー) が表示されます。
-
[Next] (次へ) を選択します。
作成されるリソースを示す [Deploy resources] (リソースのデプロイ) ページが表示されます。このサンプルプロジェクトでは、以下のリソースが含まれます。
-
Amazon SQS キュー
-
1 つの Amazon SNS トピック
-
DynamoDB テーブル。
-
2 つの Lambda 関数
-
Step Functions ステートマシン
-
-
[Deploy Resources] (リソースのデプロイ) を選択します。
注記 これらのリソースおよび関連する IAM 許可が作成されるまで、最大 10 分かかることがあります。[Deploy resources] (リソースのデプロイ) ページが表示されている場合は、[Stack ID] (スタック ID) リンクを開いて、プロビジョンされているリソースを表示することができます。
サンプルプロジェクトのリソースがデプロイされたら、ステートマシンの実行をスタートする前に、Amazon SQS キューに項目を追加し、Amazon SNS トピックに登録する必要があります。
Amazon SNS トピックを購読します。
-
[Amazon SNS console]
(Amazon SNS コンソール) を開きます。 -
[Topics] (トピック) を選択し、
Map
状態サンプルプロジェクトで作成されたトピックを選択します。名前はMapSampleProj-SNSTopic-1cQO4HQ3IR1KN。
-
[Subscriptions] (サブスクリプション) で、[Create subscription] (サブスクリプションの作成) を選択します。
[Create subscription] (サブスクリプションの作成) ページが表示され、トピックの [Topic ARN] (トピック ARN) が一覧表示されます。
-
[Protocol] (プロトコル) で [Email] (E メール) を選択します。
-
[Endpoint] (エンドポイント) で、トピックにサブスクライブする E メールアドレスを入力します。
-
[Create subscription] (サブスクリプションの作成) を選択します。
注記 サブスクリプションがアクティブになる前に、E メールでの確認が必要です。
-
関連するアカウントでサブスクリプション確認用 E メールを開き、[Confirm subscription] (サブスクリプションを確認) するための URL を開きます。
[Subscription confirmed!] (サブスクリプションを確認しました) ページが表示されます。
Amazon SQS キューにメッセージを追加
-
[Amazon SQS コンソール]
(Amazon SQS コンソール) を開きます。 -
Map
状態のサンプルプロジェクトで作成されたキューを選択します。名前はMapSampleproj-SQSQueue-1udic9VZDORN7。
-
[Queue Actions] (キュー操作) リストで、[Send a Message] (メッセージの送信) を選択します。
-
[Send a Message] (メッセージの送信) ウィンドウで、メッセージ 入力し、[Send Message] (メッセージの送信) を選択します。
-
[Send Another Message] (別メッセージの送信) を選択します。
Amazon SQS キューに複数のメッセージが追加されるまで、メッセージの入力を続けます。
-
[Close] (閉じる) を選択します。
新しい実行のスタート
Amazon SNS のキューは結果整合性があります。最良の結果を得るには、キューに入力してからステートマシンの実行を開始するまで数分待ちます。
-
Step Functions コンソール
を開きます。 -
リポジトリの []ステートマシン[] ページで、MapStateStateMachineサンプルプロジェクトで作成された State machine を選択し、実行の開始。
-
[New execution] (新しい実行) ページで、実行名を入力し (オプション)、[Start Execution] (実行の開始) を選択します。
(省略可能) 実行を識別するために、実行を識別するために、名前ボックスに移動するとそのように表示されます。デフォルトでは、Step Functions は自動的に一意の実行名を生成します。
注記 Step Functions では、非 ASCII 文字を含むステートマシン、実行、およびアクティビティ名を作成できます。これらの非 ASCII 名は Amazon では機能しませんCloudWatch。確実に追跡できるようCloudWatchメトリクスを選択するには、ASCII 文字のみを使用する名前を選択します。
-
(オプション) Step Functions [Dashboard] (ダッシュボード) 上の新規作成ステートマシンに移動し、[New execution] (新しい実行) を選択します。
-
実行が完了したら、[Visual workflow] (ビジュアルワークフロー) で状態を選択して、[Step details] (ステップ詳細) で、[Input] (入力) そして [Output] (出力) を参照できます。
ステートマシンのコード例
このサンプルプロジェクトのステートマシンは、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 ポリシー を参照してください。