我有一个像这样的实例资源:
testservice:
Type: 'AWS::EC2::Instance'
Metadata:
AWS::CloudFormation::Init:
configSets:
serviceConfigSet:
- serviceConfig
serviceConfig:
packages:
yum:
salt-minion: []
commands:
hostnameConfig:
command: hostname test-service-1.0
services:
sysvinit:
salt-minion:
enabled: 'true'
ensureRunning: 'true'
Properties:
ImageId: !Ref BaseServiceAmi
KeyName: test_ssh_key
SubnetId: !Ref ServiceSubnetId
UserData:
'Fn::Base64':
'Fn::Sub': |
#!/bin/bash
yum update -y
yum install -y aws-cfn-bootstrap
/opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource testservice --configsets serviceConfigSet --region ${AWS::Region}
但是,我想将UserData
脚本移动到一个参数中,并在多个Instance资源中重用它。这应该是微不足道的,但我找不到在用户数据脚本中获取当前资源名称的方法(我在这部分中明确设置了它:--resource testservice
)。
有没有办法可以通过引用从用户数据脚本中获取资源名称,这样我可以推广它?它不会出现在伪参数列表中。
答案 0 :(得分:0)
我认为最好的选择是使用嵌套堆栈。如果您可以将“AWS :: EC2 :: Instance”资源中的所有设置转换为参数,则可以为该资源创建模板堆栈并从另一个模板中调用它。
快速信息: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/best-practices.html#stackpolicy
使用方法: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-stack.html