如何在request_spot_instances中附加VPC和子网?

时间:2018-06-26 17:49:43

标签: amazon-web-services amazon-ec2 amazon-cloudformation boto3 amazon-vpc

我们有多个子网和VPC。如何在request_spot_instances期间定义特定的子网和VPC?

以下是我的代码:

client = boto3.client('ec2')

response = client.request_spot_instances(
    DryRun=False,
    ClientToken=''.join(random.choices(string.ascii_lowercase + string.digits, k=10)),
    InstanceCount=1,
    Type='one-time',
    LaunchSpecification={
        'ImageId': 'ami-db710fa3',
        'KeyName': 'my_key',
        'InstanceType': 'm4.4xlarge',
        'Placement': {
            'AvailabilityZone': 'us-east-2a',
        },
        'BlockDeviceMappings': [
            {
                'Ebs': {
                    # 'SnapshotId': 'snap-f70deff0',
                    'VolumeSize': 100,
                    'DeleteOnTermination': True,
                    'VolumeType': 'gp2',
                    'Iops': 300,
                    'Encrypted': False
                },
            },
        ],

        'EbsOptimized': True,
        'Monitoring': {
            'Enabled': True
        },
        'SecurityGroupIds': ['sg-1231231' ],
        'NetworkInterfaces': [
            {
                'DeviceIndex': 123,
                'SubnetId': 'Subnet-df123123'
            },
        ],

    }
)

但是,上面的代码抛出错误,

  

botocore.exceptions.ClientError:发生错误   (InvalidParameterCombination)调用RequestSpotInstances时   操作:网络接口和实例级安全组   可能不会在同一请求中指定

感谢任何帮助,谢谢

1 个答案:

答案 0 :(得分:2)

错误说明了一切:网络接口和实例级安全组可能未在同一请求上指定

这是因为NetworkInterfaces有一个名为Groups的子参数,您可以在其中指定安全组。这是必需的,因为可以指定多个网络接口,每个网络接口具有不同的安全组。

如果未指定NetworkInterfaces,则可以使用SecurityGroupIds(与NetworkInterfaces处于同一级别),并且这些组将应用于默认网络用实例创建的界面。

因此,如果您实际上不需要'DeviceIndex': 123,只需删除整个NetworkInterfaces位,就可以了。