引导新的 EC2 实例时在 UserData 中使用内部函数
Using an intrinsic function within UserData when bootstrapping a new EC2 instance
我写了cloudformation,它由一个EC2实例和一个RDS数据库组成。我希望从 RDS 获取端点地址,我可以通过内部函数 GetAtt 获取该地址,并将其传递到文本文件中的 EC2 实例中。下面是我试过的代码,但它不起作用并给了我我想要的。
Resources:
MyEC2Instance:
Type: AWS::EC2::Instance
Properties:
ImageId: ami-74e6b80d
InstanceType: t2.nano
SecurityGroups:
- Ref: MySecurityGroup
KeyName:
- Ref: MyKeyPair
UserData:
Fn::Base64:
Fn::Sub:
- |
#!/bin/bash
touch /home/ubuntu/touch1.txt
- DatabaseAddress: !GetAtt MyDatabase.Endpoint.Address
echo "My address is ${DatabaseAddress}" >> touch1.txt
DependsOn: MyDatabase
在 Sub
函数中,您可以在不使用 GetAtt
的情况下从资源中获取属性。
示例:
UserData:
Fn::Base64:
Fn::Sub:
- |
#!/bin/bash
touch /home/ubuntu/touch1.txt
echo "My address is ${MyDatabase.Endpoint.Address}" >> /home/ubuntu/touch1.txt
我写了cloudformation,它由一个EC2实例和一个RDS数据库组成。我希望从 RDS 获取端点地址,我可以通过内部函数 GetAtt 获取该地址,并将其传递到文本文件中的 EC2 实例中。下面是我试过的代码,但它不起作用并给了我我想要的。
Resources:
MyEC2Instance:
Type: AWS::EC2::Instance
Properties:
ImageId: ami-74e6b80d
InstanceType: t2.nano
SecurityGroups:
- Ref: MySecurityGroup
KeyName:
- Ref: MyKeyPair
UserData:
Fn::Base64:
Fn::Sub:
- |
#!/bin/bash
touch /home/ubuntu/touch1.txt
- DatabaseAddress: !GetAtt MyDatabase.Endpoint.Address
echo "My address is ${DatabaseAddress}" >> touch1.txt
DependsOn: MyDatabase
在 Sub
函数中,您可以在不使用 GetAtt
的情况下从资源中获取属性。
示例:
UserData:
Fn::Base64:
Fn::Sub:
- |
#!/bin/bash
touch /home/ubuntu/touch1.txt
echo "My address is ${MyDatabase.Endpoint.Address}" >> /home/ubuntu/touch1.txt