amazon-web-services - 解析 EC2 用户数据 cloudformation 模板中的动态引用
问题描述
我有一个创建 EC2 启动模板的 cloudformation 模板。
在模板的 UserData 部分中,我需要获取 SSM 安全参数并将其公开为环境变量以初始化我的 VM。我正在尝试使用!Sub
,但我的输出不是我所期望的。这是我的示例代码:
TestJenkinsMasterLaunchTemplate:
Type: 'AWS::EC2::LaunchTemplate'
UserData:
Fn::Base64: !Sub
- |
#!/bin/bash
echo ${azure_client_id}
- azure_client_id: '{{resolve:ssm-secure:/Jenkins/Production/AzureAdClientId:1}}'
文件中的输出/var/log/cloud-init-output.log
是模板本身:{{resolve:ssm-secure:/Jenkins/Production/AzureAdClientId:1}}
.
如何正确解析 SSM 参数?
解决方案
使用 AWS CLI:
azure_client_id=$(aws --region=us-east-1 ssm get-parameter --name "azure_client_id" --with-decryption --output text --query Parameter.Value
确保您:将用户数据定义为 bash shell 脚本,安装 aws cli,并确保实例角色具有正确的策略。
用户数据脚本示例:
#!/bin/bash
apt-get install -y awscli
export AWS_ACCESS_KEY_ID=your_access_key_id_here
export AWS_SECRET_ACCESS_KEY=your_secret_access_key_here
azure_client_id=$(aws --region=us-east-1 ssm get-parameter --name "azure_client_id" --with-decryption --output text --query Parameter.Value
在您的云形成模板中使用该用户数据脚本。
请参阅https://docs.aws.amazon.com/cli/latest/reference/ssm/get-parameter.html