首页 > 解决方案 > 解析 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 参数?

标签: amazon-web-servicesamazon-cloudformationaws-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


推荐阅读