在引导新的EC2实例时,在UserData中使用内部函数

时间:2018-04-23 16:01:33

标签: bash amazon-web-services amazon-ec2 amazon-cloudformation

我编写了一个由EC2实例和RDS数据库组成的cloudformation。我希望从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

1 个答案:

答案 0 :(得分:0)

GetAtt函数中,您可以在不使用Sub的情况下从资源中获取属性。

示例:

UserData:
  Fn::Base64:
    Fn::Sub:
      - |
        #!/bin/bash
        touch /home/ubuntu/touch1.txt
        echo "My address is ${MyDatabase.Endpoint.Address}" >> touch1.txt