如何创建从Parameter Store拉取参数的AWS SSM复合文档
单SSM复合文档实现EC2标签匹配自动安装软件方案
核心实现逻辑
把「标签组合-对应安装命令」的映射规则存在Parameter Store,用1个SSM Automation复合文档完成全流程:自动拉取目标实例的指定标签、从Parameter Store读取映射规则、自动匹配对应安装命令并执行,仅需创建1个State Manager关联即可覆盖所有场景,无需为每类标签单独建关联。
具体操作步骤
1. 预配置Parameter Store映射参数
在Parameter Store创建自定义参数,用于存储标签和安装逻辑的对应关系:
- 参数名建议设为
/ec2/software-install-mapping - 参数类型选
String,如果安装命令包含敏感信息(比如软件授权密钥、私有源凭证)就选SecureString - 参数值填JSON格式的映射规则,示例如下:
{ "Env=Prod;App=Web": { "install_cmd": "yum update -y && yum install -y nginx" }, "Env=Dev;App=DB": { "install_cmd": "yum update -y && yum install -y mysql-server" }, "default": { "install_cmd": "yum update -y && yum install -y amazon-cloudwatch-agent" } }
说明:JSON的键是标签拼接后的匹配串,格式为
标签键1=标签值1;标签键2=标签值2,default字段为标签未匹配到任何规则时执行的默认安装逻辑。后续新增标签对应的软件规则,优先更新这个参数即可。
提前给两类角色配置对应权限:
- 给EC2实例绑定的托管实例角色,添加
ssm:GetParameter权限(允许拉取上述参数)、ssm:SendCommand权限 - 给SSM Automation使用的服务角色,添加
ec2:DescribeTags(允许读实例标签)、ssm:GetParameter、ssm:SendCommand权限
2. 创建SSM Automation复合文档
新建类型为Automation的SSM文档,按顺序配置4个核心执行步骤,全程不需要拆分多个文档或关联:
- 步骤1:拉取目标实例标签
用aws:executeAwsApi动作,调用EC2的DescribeTags接口,传入上下文自动带入的实例ID{{INSTANCE_ID}},过滤出你需要匹配的标签键(比如示例里的Env、App),再通过内置的value selector把返回的标签拼接成和Parameter Store映射键格式一致的字符串(比如Env=Prod;App=Web),作为输出变量保存。 - 步骤2:拉取Parameter Store映射规则
用aws:ssm:GetParameter动作,传入之前创建的参数名/ec2/software-install-mapping,开启解密(如果是SecureString类型),把返回的JSON解析为字典对象作为输出变量。 - 步骤3:匹配对应安装命令
用aws:executeScript动作,选择Python/PowerShell运行时,传入步骤1生成的标签匹配串、步骤2拉取的映射JSON,用简单脚本完成匹配,直接返回当前实例需要执行的安装命令,示例脚本:def handler(events, context): tag_match_str = events['TagMatchString'] install_mapping = events['InstallMapping'] # 优先匹配对应标签规则,匹配不到走default selected_cmd = install_mapping.get(tag_match_str, install_mapping['default'])['install_cmd'] return {"FinalInstallCommand": selected_cmd}用脚本匹配替代硬编码的分支判断,后续新增规则时不需要修改文档逻辑,只需要更新Parameter Store的参数即可。
- 步骤4:执行安装命令
用aws:runCommand动作,选择适配实例操作系统的命令执行文档(Linux用AWS-RunShellScript,Windows用AWS-RunPowerShellScript),目标实例传入{{INSTANCE_ID}},命令参数直接传入步骤3返回的FinalInstallCommand变量即可。
文档核心结构参考:
schemaVersion: '0.3' assumeRole: '{{AutomationAssumeRole}}' parameters: AutomationAssumeRole: type: String description: 执行Automation所需权限的角色ARN mainSteps: # 上述4个步骤按顺序填入即可
3. 配置单个State Manager关联
不需要创建多个关联,仅需新建1个State Manager关联:
- 目标文档选择你刚创建的Automation复合文档
- 目标实例选择需要覆盖的全部EC2托管实例(可以按资源组、实例ID或者实例标签筛选范围)
- 调度规则设置为「实例启动时触发」,同时配置每日定时巡检(比如每24小时执行一次),避免实例启动时SSM代理未就绪导致安装失败漏执行
优化说明
如果后续需要调整不同标签对应的安装软件,直接修改Parameter Store里的JSON映射值即可,不需要修改SSM文档、不需要调整State Manager关联,配置生效后下次关联执行时会自动拉取最新规则。
内容的提问来源于stack exchange,提问作者Taylor Hendricks
相关产品推荐
相关产品推荐

