使用AWS Cloudformation中EC2 UserData中的参数存储参数



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

我将参数存储值定义为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}被替换为实际字符串"{{resol: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<字符串>

而不仅仅是字符串

最新更新