在Boto3中,如何在创建实例时分配公共IP

时间:2016-04-06 14:45:32

标签: boto3

我正在开发一个AWS VPC,它有一个子网,默认情况下不会自动分配公共IP。我想使用boto3来创建实例并自动分配公共IP。目前尚不清楚如何从boto3文档中做到这一点。

我得到的最接近的是以下内容,但仍有错误:

self._ec2.create_instances( ImageId=self._cluster._image, KeyName="key_pair_1", InstanceType="t2.micro", MinCount=1, MaxCount=1, SecurityGroupIds=["sg-someid"], SubnetId="subnet-anotherid", BlockDeviceMappings=[{ "DeviceName": "/dev/sda1", "Ebs": { "VolumeType": "gp2", "VolumeSize": disk_size, "DeleteOnTermination": True }, }], NetworkInterfaces=[{ "DeviceIndex": 0, "AssociatePublicIpAddress": True }] )

3 个答案:

答案 0 :(得分:2)

可以帮助某人: 您必须将SecurityGroupIds和subnetID作为网络接口参数,并从实例参数中删除它们,然后它将正常运行。

NetworkInterfaces=[
    {
        'DeviceIndex': 0,
        'SubnetId' : 'subnet-xxxxxx',
        'Groups': [
            'sg-xxxxxx','sg-xxxx','sg-xxxxxx'
        ],
        'AssociatePublicIpAddress': True            
    },

答案 1 :(得分:1)

如果您在私有的VPC子网内启动任何EC2实例(没有自动分配公共IP打开),只有两种方法可以使其准备好Internet 1.创建实例后附加弹性IP 2.创建NAT网关,将流量重新路由到允许连接到Internet的子网。

此实例网络设置永远不会覆盖VPC私有子网规则。

"AssociatePublicIpAddress": True 

如果子网功能未更改为自动分配公共IP,则最简单的方法是使用弹性IP。所以只需添加2个额外的流程 1. allocate_address:获取弹性IP地址 2. associate_address:将EIP-id附加到Instance-id

答案 2 :(得分:0)

您需要在NetworkInterfaces中移动SubnetId。

应该是 NetworkInterfaces=[{ "DeviceIndex": 0, "SubnetId": "somesubnetid", "AssociatePublicIpAddress": True }]

此外,您还要确保此子网ID已连接互联网网关。