我正在尝试使用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<字符串>
而不仅仅是字符串