解决EC2用户数据云形式模板中的动态参考

时间:2019-05-14 01:31:06

标签: amazon-web-services amazon-cloudformation aws-ssm

我有一个cloudformation模板,用于创建EC2启动模板。

在模板的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参数?

1 个答案:

答案 0 :(得分:1)

使用AWS CLI:

azure_client_id=$(aws --region=us-east-1 ssm get-parameter --name "azure_client_id" --with-decryption --output text --query Parameter.Value

确保您:将userdata定义为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