【问题标题】:how to access the IP of an EC2 Instance in cloudformation如何在 cloudformation 中访问 EC2 实例的 IP
【发布时间】:2019-07-18 01:35:05
【问题描述】:

以前有人问过类似的问题,但我找不到我的问题的确切答案...

我在UserData 部分中有一个需要访问其自己的公共 IP 的 EC2 实例的定义:

  "MyEC2Instance": {
    "Type": "AWS::EC2::Instance",
    "Properties": {
      "SubnetId": {
        "Fn::ImportValue": {
          "Fn::Sub": "${NetworkStackName}-SubnetID"
        }
      },
      "ImageId": "ami-xxxx",
      "InstanceType": { "Ref": "InstanceTypeParameter" },
      "IamInstanceProfile": { "Ref": "MasterInstanceProfile" },
      "UserData": {
        "Fn::Base64": {
          "Fn::Join": [
            "",
            [
              "#!/bin/bash -v\n",
              " PUBLIC_IP=",
              {
                "Fn::GetAtt": ["MyEC2Instance", "PublicIp"]
              },
              " /usr/local/bin/docker-compose -f /docker-compose.yml up -d\n"
            ]
          ]
        }
      }
    }

通常通过"Fn::GetAtt": ["MyEC2Instance", "PublicIp"] 访问它很容易,但在这种情况下,这会引发“循环依赖错误”——这确实是有道理的,但我该如何解决呢?

【问题讨论】:

  • 循环依赖可能是因为IP地址是在实例启动之后才分配的,而它是在实例启动之前引用的.

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


【解决方案1】:

公共 ip 在创建后分配给 EC2 实例,因此无法在其用户数据中呈现它。
您可以使用instance metadata 获取公共 ipv4 以及其他实例属性。

PUBLIC_IP=$(curl -s http://169.254.169.254/latest/meta-data/public-ipv4)

【讨论】:

  • 对使用的魔法IP很好奇,发现这也行:PUBLIC_IP=$(curl -s http://instance-data/latest/meta-data/public-ipv4)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-29
  • 2017-08-06
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
  • 1970-01-01
  • 2014-02-18
相关资源
最近更新 更多