You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform添加SSM维护窗口任务参数后控制台未生效问题

问题描述

通过Terraform编排SSM维护窗口任务,调用AWS-RunRemoteScript文档执行存储在S3中的脚本,对应流程已经过手动测试验证可正常运行。编写aws_ssm_maintenance_window_task资源时配置了SourceType、SourceInfo、commands三个运行参数,执行terraform plan、terraform apply均无报错,但登录AWS控制台查看对应维护窗口任务时,配置的参数未生效也没有展示。
原始配置代码片段如下:

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"]
      }
    }
  }
}
根因分析
  • 核心问题是parameter块缺失必填的type字段。SSM Run Command要求所有传入参数必须显式声明类型,Terraform AWS Provider没有对这个字段做强制校验,缺省时不会触发plan/apply阶段的报错,但传给AWS API后这些无类型的参数会被静默丢弃,最终表现为部署成功但控制台看不到配置、任务运行时参数不生效。
  • 手动拼接转义JSON字符串作为SourceInfo值容易隐藏转义格式错误,部分场景下也会触发参数静默丢弃的问题,没有必要硬写转义串。
修复方案

给每个parameter块补充对应类型,本次用到的三个参数均为字符串类型,设置type = "String"即可;同时用jsonencode()函数构造SourceInfo的JSON值,从根源上避免手动转义出错。
修正后的完整配置片段:

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"]
        type   = "String"
      }
      parameter {
        name = "SourceInfo"
        values = [jsonencode({
          path = "https://mybucket.s3.ap-northeast-1.amazonaws.com/myscript.sh"
        })]
        type = "String"
      }
      parameter {
        name   = "commands"
        values = ["myscript.sh"]
        type   = "String"
      }
    }
  }
}
验证步骤
  • 执行terraform plan确认变更包含三个参数的type字段新增操作
  • 执行terraform apply完成资源更新
  • 回到AWS控制台打开对应维护窗口任务详情,即可看到三个参数已正常展示,任务运行时会正常拉取S3脚本执行

内容的提问来源于stack exchange,提问作者Phil_Phil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 01:09:58