AWS SSM CreateDocument报错InstanceId参数未声明问题排查
SSM CreateDocument 报 Parameter "InstanceId" is not declared 排查方案
核心报错原因
SSM 文档参数解析严格区分大小写,你声明的参数与实际引用的参数名大小写不匹配,直接触发创建报错。除此之外文档和执行命令里还有4处会导致创建/运行失败的配置错误,全部修复点如下:
- 参数引用大小写错误:
parameters块中定义的参数名为instanceId(首字母小写i),但步骤中引用时写为{{InstanceId}}(首字母大写I),解析器无法匹配到已声明的参数,直接抛出你看到的错误,将引用处改为{{instanceId}}即可解决当前创建报错。 - EC2 API 名拼写错误:断言步骤中填写的 Api 值为
DescribeInstnaces,正确的 EC2 查询接口名为DescribeInstances,原拼写漏写字母c,参数问题修复后此处会触发API不存在错误。 - 属性选择器配置错误:原配置中字段名
PropertySelctor拼写错误,正确字段名为PropertySelector;同时路径语法存在两处问题:Reservations应为复数形式,路径层级不能用逗号分隔、开头多余的点号需要删除,原路径.$Reservation[0].Instances[0],State.Name正确写法为$.Reservations[0].Instances[0].State.Name。 - CLI 命令参数非法:执行创建命令时传入的
--document-type "test"不是SSM支持的合法值,用于在实例上执行操作的文档对应类型为Command,传入非法类型会导致创建失败或后续无法关联执行。 - 额外注意:文档名包含空格在后续跨场景引用时容易出现转义问题,建议统一用横杠替代空格。
修复后可直接使用的配置
修复后的installtest.yml内容
description: Installs Docker on the Instance and tag it properly schemaVersion: '0.3' parameters: instanceId: type: String description: "Instance ID of an instance to install Docker to" build: type: String description: "The build of docker to install" default: "get" mainSteps: - name: AssertRunning action: aws:assertAwsResourceProperty isCritical: true onFailure: step:abort nextStep: installPackages inputs: Service: ec2 Api: DescribeInstances InstanceIds: - "{{instanceId}}" PropertySelector: "$.Reservations[0].Instances[0].State.Name" DesiredValues: - running # 后续可在此处追加Docker安装、实例打标签的步骤逻辑
修复后的创建命令
aws ssm create-document --name "SSM-Document-test" --content file://installtest.yml --document-type "Command" --document-format YAML --region us-east-1
补充:如果后续以Automation模式执行该文档,需要给文档绑定的执行角色授予
ec2:DescribeInstances权限,否则断言步骤会抛出权限不足错误。
内容的提问来源于stack exchange,提问作者user294110
相关产品推荐
相关产品推荐

