web-dev-qa-db-ja.com

cloudformationでec2にパブリックIPを割り当てますか?

私が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

この時点では、どうすればよいかわかりません。ドキュメントによると、私の元のアプローチは正しいようです。誰かが以前にこれをやったことがあり、私が間違っていることを指摘できますか?

4
Colin Murphy

これは私にとってうまくいくものです:

「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を取得できます

4
Edwin