私がaws ec2で使用しているvpcでは、デフォルトでパブリックIPアドレスを取得しません。 this および this のドキュメントを参照した後、手動で追加しようとしています。
現在、私のcloudformationテンプレートには
"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のDeviceIndexを持つネットワークインターフェイスのみがパブリック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」のリソースを追加します。
"EIPExternalIP" : {
"Type" : "AWS::EC2::EIP",
"Properties" : {
"InstanceId" : {
"Ref" : "Instance"
},
"Domain" : "vpc"
}
},
{"Ref": "EIPExternalIP"}で外部IPを取得できます