在云端分配一个公共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有关的一切。

我的问题是,文档说,只有eth0的DeviceIndexnetworking接口可以有一个公共IP地址,但使用eth0导致错误说

  Encountered non numeric value for property DeviceIndex 

但是,如果我将设备ID设置为0,我会得到

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

但是,如果我删除了NetworkInterfaceId并根据我所获得的文档的要求添加一个子网ID

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

在这一点上,我不知道我该怎么做。 根据文件我原来的方法似乎是正确的。 有没有人做过之前,可以指出我做错了什么?

这对我有用:

在“AWS :: EC2 :: Instance”资源中将私有IP设置为主IP地址:

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

请注意,上面对“InternalIPAddress”的引用是传递机器应该具有的内部IP的参数。 我不认为这是必要的,因为没有它,实例将通过DHCP获取IP。

然后在模板中添加“AWS :: EC2 :: EIP”types的资源:

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

您可以使用{“Ref”:“EIPExternalIP”}获得外部IP