如何自动创建具有公共IP的Ec2实例**而不在**中声明弹性IP?

Mec*_*orm 8 amazon-web-services aws-cloudformation

在AWS Cloudformation中,有没有办法在VPC中使用公共IP声明EC2实例,无需声明弹性IP并附加到它?

在AWS :: AutoScaling :: LaunchConfiguration中,您可以添加属性"AssociatePublicIpAddress"以表示实例将自动接受公共IP.我正在寻找AWS :: EC2 :: Instance的等价物

下面是我用于创建EC2实例的cloudformation代码段.我不能提及任何提及如何添加公共IP而无需预先声明弹性IP的文档.

"MyEc2Instance": {
    "Type": "AWS::EC2::Instance",
    "Properties": {
        "IamInstanceProfile": {
            "Ref": "MyEc2InstanceProfile"
        },
        "ImageId": {
            "Fn::FindInMap": [
                "MyEc2Box",
                {
                    "Ref": "Region"
                },
                "ImageId"
            ]
        },
        "InstanceType": {
            "Fn::FindInMap": [
                "MyEc2Box",
                {
                    "Ref": "Region"
                },
                "InstanceType"
            ]
        },
        "KeyName": {
            "Ref": "DefaultKeyPair"
        },
        "Monitoring": "true",
        "SecurityGroupIds": [
            {
                "Ref": "MyEc2SecurityGroup"
            }
        ],
        "SubnetId": {
            "Ref": "MyBoxSubnet"
        },
        "Tags": [
            {
                "Key": "Name",
                "Value": "MyBox"
            },
        ]
    }
},
Run Code Online (Sandbox Code Playgroud)

Séb*_*acq 17

假设您在VPC公有子网中启动实例(即具有路由表的子网,包括将流量发送到0.0.0.0/0到Internet网关的规则),只需在EC2的NetworkInterfaces组中定义AssociatePublicIpAddress属性即可.资源:

            "NetworkInterfaces" : [{
                 "AssociatePublicIpAddress" : "True",
                 "DeleteOnTermination" : "True",
                 "SubnetId" : { "Ref" : "PublicSubnet" },
                 "DeviceIndex" : "0",
                 "GroupSet" : [ { "Ref" : "SecurityGroup" } ]
            }],
Run Code Online (Sandbox Code Playgroud)

请参阅http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-network-iface-embedded.html上的文档.

如果您在EC2 Classic网络(非VPC)中启动实例,它将自动接收公共IP地址.


小智 5

我看到这是旧帖子,但无论如何我都会发布答案可能会有所帮助。在子网中,可以将“ MapPublicIpOnLaunch”设置为True,以便该子网的所有实例都具有公共IP。

MapPublicIpOnLaunch

Indicates whether instances that are launched in this subnet receive a public IP address. By default, the value is false.

Required: No

Type: Boolean

Update requires: No interruption.
Run Code Online (Sandbox Code Playgroud)

  • 尽管确实确实将子网公共IP的默认设置设置为true(这实际上是问题的一部分),但似乎CloudFormation启动的实例不遵循此设置,因此对于启动CF实例没有用。使用公共IP (4认同)