StepFunctions で複数のインスタンスのスナップショットを作成したい

0

次のステートマシンは、DescribeInstances で特定のタグがついた複数のインスタンスを取得します。 その結果、CreateSnapshots で スナップショットを作成するのですが最初の 1 台のみのインスタンスのスナップショットしか作成されません。 DescribeInstances で取得した複数のインスタンスのスナップショットを作成するためにはどのようにしたら良いでしょうか?

          {
          "Comment": "A Snapshot of my state machine",
          "StartAt": "ServiceStop",
          "States": {
            "ServiceStop": {
              "Type": "Task",
              "Parameters": {
                "DocumentName": "AWS-RunShellScript",
                "Parameters": {
                  "commands": [
                    "#!/bin/bash",
                    "sudo systemctl stop httpd"
                  ]
                },
                "Targets": [
                  {
                    "Key": "tag:Name",
                    "Values": [
                      "Web"
                    ]
                  }
                ]
              },
              "Resource": "arn:aws:states:::aws-sdk:ssm:sendCommand",
              "Next": "ServiceStopWait",
              "ResultPath": "$.ServiceStop"
            },
            "ServiceStopWait": {
              "Type": "Wait",
              "Seconds": 5,
              "Next": "ServiceStopList"
            },
            "ServiceStopList": {
              "Type": "Task",
              "Next": "ServiceStopStatus",
              "Parameters": {
                "CommandId.$": "$.ServiceStop.Command.CommandId"
              },
              "Resource": "arn:aws:states:::aws-sdk:ssm:listCommands",
              "ResultPath": "$.ServiceStopList"
            },
            "ServiceStopStatus": {
              "Type": "Choice",
              "Choices": [
                {
                  "Variable": "$.ServiceStopList.Commands[0].Status",
                  "StringEquals": "Success",
                  "Next": "DescribeInstances"
                }
              ],
              "Default": "ServiceStopWait"
            },
            "DescribeInstances": {
              "Type": "Task",
              "Parameters": {
                "Filters": [
                  {
                    "Name": "tag:Name",
                    "Values": [
                      "Web"
                    ]
                  }
                ]
              },
              "Resource": "arn:aws:states:::aws-sdk:ec2:describeInstances",
              "ResultPath": "$.DescribeInstances",
              "Next": "CreateSnapshots"
            },
            "CreateSnapshots": {
              "Type": "Task",
              "Parameters": {
                "InstanceSpecification": {
                  "InstanceId.$": "$.DescribeInstances.Reservations[0].Instances[0].InstanceId"
                }
              },
              "Resource": "arn:aws:states:::aws-sdk:ec2:createSnapshots",
              "ResultPath": "$.CreateSnapshots",
              "Next": "CreateSnapshotsWait"
            },
            "CreateSnapshotsWait": {
              "Type": "Wait",
              "Seconds": 30,
              "Next": "DescribeSnapshots"
            },
            "DescribeSnapshots": {
              "Type": "Task",
              "Resource": "arn:aws:states:::aws-sdk:ec2:describeSnapshots",
              "Parameters": {
                "SnapshotIds.$": "States.Array($.CreateSnapshots.Snapshots[0].SnapshotId)"
              },
              "ResultPath": "$.DescribeSnapshots",
              "Next": "SnapshotsStatus"
            },
            "SnapshotsStatus": {
              "Type": "Choice",
              "Choices": [
                {
                  "Variable": "$.DescribeSnapshots.Snapshots[0].State",
                  "StringEquals": "completed",
                  "Next": "ServiceStart"
                }
              ],
              "Default": "SnapshotsStatusWait"
            },
            "ServiceStart": {
              "Type": "Task",
              "Parameters": {
                "DocumentName": "AWS-RunShellScript",
                "Parameters": {
                  "commands": [
                    "#!/bin/bash",
                    "sudo systemctl start httpd"
                  ]
                },
                "Targets": [
                  {
                    "Key": "tag:Name",
                    "Values": [
                      "Web"
                    ]
                  }
                ]
              },
              "Resource": "arn:aws:states:::aws-sdk:ssm:sendCommand",
              "Next": "ServiceStartWait",
              "ResultPath": "$.ServiceStart"
            },
            "ServiceStartWait": {
              "Type": "Wait",
              "Seconds": 5,
              "Next": "ServiceStartList"
            },
            "ServiceStartList": {
              "Type": "Task",
              "Next": "ServiceStartStatus",
              "Parameters": {
                "CommandId.$": "$.ServiceStart.Command.CommandId"
              },
              "Resource": "arn:aws:states:::aws-sdk:ssm:listCommands",
              "ResultPath": "$.ServiceStartList"
            },
            "ServiceStartStatus": {
              "Type": "Choice",
              "Choices": [
                {
                  "Variable": "$.ServiceStartList.Commands[0].Status",
                  "StringEquals": "Success",
                  "Next": "Parallel"
                }
              ],
              "Default": "ServiceStartWait"
            },
            "Parallel": {
              "Type": "Parallel",
              "Branches": [
                {
                  "StartAt": "DeleteSnapshot",
                  "States": {
                    "DeleteSnapshot": {
                      "Type": "Task",
                      "Resource": "arn:aws:states:::aws-sdk:lambda:invoke",
                      "OutputPath": "$.Payload",
                      "Parameters": {
                        "FunctionName": "${DeleteSnapshotLambdaFunction}",
                        "Payload.$": "$.CreateSnapshots.Snapshots[0]"
                      },
                      "End": true
                    }
                  }
                },
                {
                  "StartAt": "CopySnapshot",
                  "States": {
                    "CopySnapshot": {
                      "Type": "Task",
                      "Resource": "arn:aws:states:::aws-sdk:lambda:invoke",
                      "OutputPath": "$.Payload",
                      "Parameters": {
                        "FunctionName": "${CopySnapshotLambdaFunction}",
                        "Payload.$": "$.CreateSnapshots.Snapshots[0]"
                      },
                      "End": true
                    }
                  }
                }
              ],
              "Next": "Success"
            },
            "Success": {
              "Type": "Succeed"
            },
            "SnapshotsStatusWait": {
              "Type": "Wait",
              "Seconds": 30,
              "Next": "DescribeSnapshots"
            }
          }
        }
naomaro
質問済み 8ヶ月前186ビュー
回答なし

ログインしていません。 ログイン 回答を投稿する。

優れた回答とは、質問に明確に答え、建設的なフィードバックを提供し、質問者の専門分野におけるスキルの向上を促すものです。

質問に答えるためのガイドライン