我们有多个子网和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时 操作:网络接口和实例级安全组 可能不会在同一请求中指定
感谢任何帮助,谢谢
答案 0 :(得分:2)
错误说明了一切:网络接口和实例级安全组可能未在同一请求上指定
这是因为NetworkInterfaces
有一个名为Groups
的子参数,您可以在其中指定安全组。这是必需的,因为可以指定多个网络接口,每个网络接口具有不同的安全组。
如果未指定NetworkInterfaces
,则可以使用SecurityGroupIds
(与NetworkInterfaces
处于同一级别),并且这些组将应用于默认网络用实例创建的界面。
因此,如果您实际上不需要'DeviceIndex': 123
,只需删除整个NetworkInterfaces
位,就可以了。