引导新的 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