有没有办法使用 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
之后使用 .$
。
我正在创建一个 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
之后使用 .$
。