我正在尝试通过在 S3 中执行脚本来使用 SSM 运行命令 - 我已经手动测试了这一切,现在我正在尝试对其进行编码。
我一直在向 SSM 维护窗口任务添加参数。
这是下面的片段。我添加了 3 个参数,计划/应用运行良好,但更改未反映在控制台中!
resource "aws_ssm_maintenance_window_task" "task" {
max_concurrency = "2"
max_errors = "1"
task_arn = "AWS-RunRemoteScript"
task_type = "RUN_COMMAND"
window_id = aws_ssm_maintenance_window.taskuploadmaintenancewindow.id
targets {
key = "WindowTargetIds"
values = [aws_ssm_maintenance_window_target.taskuploadmaintenancewindowtarget.id]
}
task_invocation_parameters {
run_command_parameters {
parameter {
name = "SourceType"
values = ["S3"]
}
parameter {
name = "SourceInfo"
values = ["{\"path\":\"https://mybucket.s3.ap-northeast-1.amazonaws.com/myscript.sh\"}"]
}
parameter {
name = "commands"
values = ["myscript.sh"]
}
}
}
解决了..这有点傻,但这些参数需要是驼峰式大小写,“命令”需要是命令行
我解决此问题的方法是返回 SSM Run Command,构建一个新命令并滚动到底部并查看它为您构建的 AWS CLI 配置的语法:
aws ssm send-command --document-name "AWS-RunRemoteScript" --document-version "1" --targets '[{"Key":"tag:Name","Values":["deliberately removed"]}]' --parameters '{"sourceType":["S3"],"sourceInfo":["{\"path\":\"https://mybucket.s3.ap-northeast-1.amazonaws.com/myscript.sh\"}"],"commandLine":["myscript.sh"],"workingDirectory":[""],"executionTimeout":["3600"]}' --timeout-seconds 600 --max-concurrency "50" --max-errors "0" --region ap-northeast-1
所以现在更改案例/命令行是有效的。我希望有一天这会对某人有所帮助。
run_command_parameters {
parameter {
name = "sourceType"
values = ["S3"]
}
parameter {
name = "sourceInfo"
values = ["{\"path\":\"https://mybucket.s3.ap-northeast-1.amazonaws.com/myscript.sh\"}"]
}
parameter {
name = "commandLine"
values = ["myscript.sh"]
顺便说一句,我发现在Terraform中,你可以将其包装在jsonencode中,而不是在输入sourceInfo时处理可怕的格式。
parameter {
name = "sourceInfo"
values = [jsonencode(
{
owner = "ownername"
path = "pathdir"
repository = "reponame"
tokenInfo = "sometoken"
}
)
]
}