В 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"}