在 AWS Cloudformation 的 EC2 UserData 中使用 Parameter Store 参数

Use Parameter Store parameters in EC2 UserData in AWS Cloudformation

我正在尝试使用 Cloudformation 启动 EC2 Windows 实例,其中使用 PowerShell 格式的 EC2 UserData 我需要向本地管理员添加服务用户帐户,然后安装一些应用程序。我想在 EC2 用户数据中使用 AWS Parameter Store 参数来传递凭证。

我将参数存储值定义为 CFT 参数:

Parameters:
    ServiceUserEmail:
      Type: String
      Default: '{{resolve:ssm-secure:serviceuser-email:1}}'
      Description: Service User Email

并尝试调用如下参数:

 UserData:         
        Fn::Base64: !Sub |
          <powershell>
          # Add Sevice account as Administrator
          Add-LocalGroupMember -Group "Administrators" -Member "${ServiceUserEmail}"
          </powershell>
          <persist>true</persist>

出于某种原因,占位符 ${ServiceUserEmail} 被替换为实际字符串“{{resolve:ssm-secure:serviceuser-email:1}}”,而不是参数存储中它背后的值。

我也尝试过没有占位符的命令但没有成功:

Add-LocalGroupMember -Group "Administrators" -Member "'{{resolve:ssm-secure:serviceuser-email:1}}'"

命令传参后需要看下面:

Add-LocalGroupMember -Group "Administrators" -Member "serviceuseremail@domain.com"

请问有什么建议吗?

我认为 Sub 的完整数组形式应该可以。沿着这些线的东西:

 UserData:         
        Fn::Base64: 
         Fn::Sub:
           - <powershell>
             # Add Sevice account as Administrator
             Add-LocalGroupMember -Group "Administrators" -Member   "${MyServiceUserEmail}"
             </powershell>
             <persist>true</persist>
           - MyServiceUserEmail: !Ref ServiceUserEmail 

好的,解决了。定义参数时,类型必须是 AWS::SSM::Parameter::Value

而不只是字符串