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

hba*_*bar 6 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 }] )

小智 6

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

NetworkInterfaces=[
    {
        'DeviceIndex': 0,
        'SubnetId' : 'subnet-xxxxxx',
        'Groups': [
            'sg-xxxxxx','sg-xxxx','sg-xxxxxx'
        ],
        'AssociatePublicIpAddress': True            
    },
Run Code Online (Sandbox Code Playgroud)


moo*_*oot 1

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

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

"AssociatePublicIpAddress": True 
Run Code Online (Sandbox Code Playgroud)

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