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
相关产品推荐
相关产品推荐

