我在 aws ec2 上使用的 vpc 默认没有公共 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
但如果我将设备 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
此时我不知道该怎么做。根据文档,我最初的方法似乎是正确的。有人以前这样做过吗?可以指出我做错了什么吗?
答案1
这对我有用:
在“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”类型的资源:
"EIPExternalIP" : {
"Type" : "AWS::EC2::EIP",
"Properties" : {
"InstanceId" : {
"Ref" : "Instance"
},
"Domain" : "vpc"
}
},
您可以使用 {"Ref" : "EIPExternalIP"} 获取外部 IP