向SSM维护时段任务添加参数

问题描述 投票:0回答:2

我正在尝试通过在 S3 中执行脚本来使用 SSM 运行命令 - 我已经手动测试了这一切,现在我正在尝试对其进行编码。

我一直在向 SSM 维护窗口任务添加参数。

按照此示例 - https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/ssm_maintenance_window_task

这是下面的片段。我添加了 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"]
      }
    }
  }
terraform terraform-provider-aws aws-ssm
2个回答
0
投票

解决了..这有点傻,但这些参数需要是驼峰式大小写,“命令”需要是命令行

我解决此问题的方法是返回 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"]

0
投票

顺便说一句,我发现在Terraform中,你可以将其包装在jsonencode中,而不是在输入sourceInfo时处理可怕的格式。

  parameter {
    name = "sourceInfo"
    values = [jsonencode(
      {
        owner      = "ownername"
        path       = "pathdir"
        repository = "reponame"
        tokenInfo  = "sometoken"
      }
      )
    ]
  }
© www.soinside.com 2019 - 2024. All rights reserved.