Назад | Перейти на главную страницу

Назначение общедоступного IP-адреса для ec2 в облачной информации?

В vpc, который я использую на aws, ec2 по умолчанию не получает общедоступный IP-адрес. Я пытаюсь добавить его вручную после ссылки этот и этот немного документации.

В настоящее время мой шаблон облачной информации включает

"netinterface"    : {
  "Type" : "AWS::EC2::NetworkInterface",
  "Properties" : {
    "SubnetId" : {"Ref": "Subnet"}
   }


},


"billingattributionapi" : {
  "Type"        : "AWS::EC2::Instance",
  "Properties"  : {

    "NetworkInterfaces" : [
      {
        "AssociatePublicIpAddress"  : "true",
        "DeviceIndex"               : "eth0",
        "NetworkInterfaceId"        : {"Ref" : "netinterface"},
        "DeleteOnTermination"       : "true"
      }

    ]
  }
}

Здесь многое пропущено, но это все, что касается добавления IP.

Моя проблема в том, что в документации говорится, что только сетевые интерфейсы с DeviceIndex для eth0 могут иметь общедоступный IP-адрес, но использование eth0 приводит к ошибке:

    Encountered non numeric value for property DeviceIndex

Но если я установлю идентификатор устройства на 0, я получу

The associatePublicIPAddress parameter cannot be specified for a network interface with an ID

Но если я удалю NetworkInterfaceId и добавлю идентификатор подсети в соответствии с требованиями документации, я получу

Network interfaces and an instance-level subnet ID may not be specified on the same request

На данный момент я понятия не имею, что мне делать. Согласно документации, мой первоначальный подход кажется правильным. Кто-нибудь делал это раньше и может указать, что я делаю не так?

Вот что у меня работает:

Установите частный IP-адрес в качестве основного IP-адреса в ресурсе «AWS :: EC2 :: Instance»:

  "NetworkInterfaces" : [
                {
                    "DeleteOnTermination" : true,
                    "Description"         : "Main interface",
                    "DeviceIndex"         : "0",
                    "PrivateIpAddresses"  : [
                        {
                            "PrivateIpAddress" : {
                                "Ref" : "InternalIPAddress"
                            },
                            "Primary"          : true
                        }
                    ],
                    "GroupSet"            : [
                        {
                            "Ref" : "SecurityGroupId"
                        }
                    ],
                    "SubnetId"            : {
                        "Ref" : "VPCSubnet"
                    }
                }
            ],

Обратите внимание, что ссылка на «InternalIPAddress» выше - это параметр для передачи того, какой внутренний IP-адрес должен иметь машина. Не думаю, что это необходимо, так как без него экземпляр будет подбирать IP через dhcp.

Затем в шаблоне добавьте ресурс типа "AWS :: EC2 :: EIP":

 "EIPExternalIP"                 : {
        "Type" : "AWS::EC2::EIP",
        "Properties" : {
            "InstanceId" : {
                "Ref" : "Instance"
            },
            "Domain"     : "vpc"
        }
    },

Вы можете получить внешний IP-адрес с помощью {"Ref": "EIPExternalIP"}