有没有办法使用 AWS Step Functions Input 在 System Manager 块上组装命令字符串?

Is there a way to use AWS Step Functions Input to assembly command string on System Manager block?

我正在创建一个 Step Function 状态机,每次实例启动时,它都会将文件从 S3 复制到该实例内的特定文件夹。 S3 存储桶中的原始文件夹有一个以此实例 ID 命名的文件夹。我作为系统管理器块的输入传递的实例 ID,但我需要使用它来创建将在 EC2 中执行的命令字符串。

例如:

我的输入是:$.detail.instance-id(假设以下 ID i-11223344556677889)

Systems Manager API 参数是:

  "CloudWatchOutputConfig": {
    "CloudWatchLogGroupName": "myloggroup",
    "CloudWatchOutputEnabled": true
  },
  "DocumentName": "AWS-RunShellScript",
  "DocumentVersion": "$DEFAULT",
  "InstanceIds.$": "States.Array($)",
  "MaxConcurrency": "50",
  "MaxErrors": "10",
  "Parameters": {
    "commands": [
      {
        "runuser -l ec2-user -c \"aws s3 cp s3://my-bucket/**MY_INSTANCEID**/myfile.xyz /home/ec2-user/myfolder/myfile.xyz\""
      }
  },
  "TimeoutSeconds": 6000
}```

综上所述,我想用我输入的$.detail.instance-id替换MY_INSTANCEID的命令转行,并执行以下命令:

"runuser -l ec2-user -c "aws s3 cp s3://my-bucket/i-11223344556677889/myfile.xyz /home/ec2-user/myfolder/myfile .xyz""

有办法吗?我已经尝试使用 Fn::join 但没有成功。

提前谢谢你, 亲切的问候,

获胜者

必须在 State.Array 中使用 State.Format 才能正常工作,而 State.Array 中的 State.Format 不能有引号:

  "CloudWatchOutputConfig": {
    "CloudWatchLogGroupName": "myloggroup",
    "CloudWatchOutputEnabled": true
  },
  "DocumentName": "AWS-RunShellScript",
  "DocumentVersion": "$DEFAULT",
  "InstanceIds.$": "States.Array($)",
  "MaxConcurrency": "50",
  "MaxErrors": "10",
  "Parameters": {
    "commands.$": "States.Array(States.Format('runuser -l ec2-user -c \"aws s3 cp s3://my-bucket/**MY_INSTANCEID**/myfile.xyz /home/ec2-user/myfolder/myfile.xyz\"', $))"
  },
  "TimeoutSeconds": 6000
}```

也有必要在 command 之后使用 .$