Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 如何使用公共IP创建Ec2实例**,而不**在cloudformation中声明弹性IP?_Amazon Web Services_Amazon Cloudformation - Fatal编程技术网

Amazon web services 如何使用公共IP创建Ec2实例**,而不**在cloudformation中声明弹性IP?

Amazon web services 如何使用公共IP创建Ec2实例**,而不**在cloudformation中声明弹性IP?,amazon-web-services,amazon-cloudformation,Amazon Web Services,Amazon Cloudformation,在AWS Cloudformation中,是否有任何方法可以使用公共IP在VPC中声明EC2实例,而不需要声明弹性IP并附加到它 在AWS::AutoScaling::LaunchConfiguration中,您可以添加属性“AssociatePublicAddress”,表示实例将自动接受公共IP。我正在寻找AWS::EC2::Instance的等价物 下面是我创建EC2实例的cloudformation片段。我不知道任何文件提到如何添加一个公共IP而不必事先声明一个弹性IP "MyEc2In

在AWS Cloudformation中,是否有任何方法可以使用公共IP在VPC中声明EC2实例,而不需要声明弹性IP并附加到它

在AWS::AutoScaling::LaunchConfiguration中,您可以添加属性“AssociatePublicAddress”,表示实例将自动接受公共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"
            },
        ]
    }
},

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

            "NetworkInterfaces" : [{
                 "AssociatePublicIpAddress" : "True",
                 "DeleteOnTermination" : "True",
                 "SubnetId" : { "Ref" : "PublicSubnet" },
                 "DeviceIndex" : "0",
                 "GroupSet" : [ { "Ref" : "SecurityGroup" } ]
            }],
请参阅上的文档


如果您在EC2 Classic networking(非专有网络)中启动您的实例,它将自动收到一个公共IP地址。

我看到这是一篇旧文章,但我还是发布了答案,这可能会有所帮助。 在子网中,您可以将“mappliciponlaunch”设置为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.

创建ec2实例时自动分配公共IP。您不需要手动添加它。您需要添加发送公共IP吗?子网设置中有一个设置:“自动分配公共IP”您尝试过吗?如果我的答案是正确的,您可以将其标记为正确的,以帮助其他人整理有效的答案吗?感谢您是否可以在子网中配置它,以便所有EC2实例默认都获得一个公共IP?相当于在AWS控制台UI中的子网配置中选中“自动分配公共IP”选项。我认为这是不可能的。更改此值的API为ModifySubnetAttribute(),必须在现有子网上调用。我在CloudFormation中找不到一个等价物,但我希望在这一点上被证明是错误的:-)如果您有多个子网,那么这个实例可能会被启动(例如,作为自动扩展和负载平衡的一部分),那么这就没有意义。应该有(可能有吗?)一个设置,可以简单地将公共IP自动分配给实例,而不指定网络接口?如果确实使用此方法,请确保没有在NetworkInterfaces属性之外定义SubnetId或SecurityGroups属性,否则会引发如下错误:“网络接口和实例级安全组可能不会在同一个请求上指定”,尽管它确实将子网公共IP的默认值设置为true(这实际上是问题的一部分),似乎CloudFormation启动的实例不符合此设置,因此它对于使用公共ip启动CF实例没有用处