2016-01-15 86 views
0

有谁知道如何设置虚拟化类型当启动aws ec2实例使用boto3?我试着指定虚拟化类型时启动aws ec2实例与boto3

session = boto3.session.Session(
      aws_access_key_id=self.access_key_id, 
      aws_secret_access_key=self.secret_access_key, 
      region_name=self.region) 
ec2resource = session.resource('ec2') 
ec2resource.create_instances(
      ImageId=ami_id, MinCount=1, MaxCount=count, KeyName=key_name, 
      InstanceType=type, SecurityGroups=security_groups, 
      VirtualizationType='paravirtual') 

,但得到

[2016-01-15 10:54:18 CST] INFO Calling ec2:run_instances with {'VirtualizationType': 'paravirtual', 'KeyName': 'common', 'SecurityGroups': ['default'], 'MaxCount': 2, 'MinCount': 1, 'InstanceType': 'm1.small', 'ImageId': 'ami-d05e75b8'} 
Traceback (most recent call last): 
    File "suites/ec2.py", line 21, in <module> 
    print ec2.launch(count=2, VirtualizationType='paravirtual') 
    File "/Users/bchung/Dropbox/PycharmProjects/perf/lib/aws/ec2.py", line 183, in launch 
    InstanceType=type, SecurityGroups=security_groups, **kwargs) 
    File "/Library/Python/2.7/site-packages/boto3/resources/factory.py", line 455, in do_action 
    response = action(self, *args, **kwargs) 
    File "/Library/Python/2.7/site-packages/boto3/resources/action.py", line 79, in __call__ 
    response = getattr(parent.meta.client, operation_name)(**params) 
    File "/Library/Python/2.7/site-packages/botocore/client.py", line 310, in _api_call 
    return self._make_api_call(operation_name, kwargs) 
    File "/Library/Python/2.7/site-packages/botocore/client.py", line 383, in _make_api_call 
    api_params, operation_model, context=request_context) 
    File "/Library/Python/2.7/site-packages/botocore/client.py", line 425, in _convert_to_request_dict 
    api_params, operation_model) 
    File "/Library/Python/2.7/site-packages/botocore/validate.py", line 273, in serialize_to_request 
    raise ParamValidationError(report=report.generate_report()) 
botocore.exceptions.ParamValidationError: 
    Parameter validation failed: 
    Unknown parameter in input: "VirtualizationType", must be one of: 
    DryRun, ImageId, MinCount, MaxCount, KeyName, SecurityGroups, 
    SecurityGroupIds, UserData, InstanceType, Placement, KernelId, 
    RamdiskId, BlockDeviceMappings, Monitoring, SubnetId, 
    DisableApiTermination, InstanceInitiatedShutdownBehavior, 
    PrivateIpAddress, ClientToken, AdditionalInfo, NetworkInterfaces, 
    IamInstanceProfile, EbsOptimized 

我需要设置VirtualizationType,因为我需要一些旧的实例类型(的m1.small)只允许半虚拟代替hvm,看来boto3使用hvm默认情况下:

Traceback (most recent call last): 
    File "suites/ec2.py", line 21, in <module> 
    print ec2.launch(count=2) 
    File "/Users/bchung/Dropbox/PycharmProjects/perf/lib/aws/ec2.py", line 183, in launch 
    InstanceType=type, SecurityGroups=security_groups, **kwargs) 
    File "/Library/Python/2.7/site-packages/boto3/resources/factory.py", line 455, in do_action 
    response = action(self, *args, **kwargs) 
    File "/Library/Python/2.7/site-packages/boto3/resources/action.py", line 79, in __call__ 
    response = getattr(parent.meta.client, operation_name)(**params) 
    File "/Library/Python/2.7/site-packages/botocore/client.py", line 310, in _api_call 
    return self._make_api_call(operation_name, kwargs) 
    File "/Library/Python/2.7/site-packages/botocore/client.py", line 396, in _make_api_call 
    raise ClientError(parsed_response, operation_name) 
botocore.exceptions.ClientError: An error occurred 
(InvalidParameterCombination) when calling the RunInstances operation: 
Non-Windows instances with a virtualization type of 'hvm' are currently not supported for this instance type. 

我检查: http://boto3.readthedocs.org/en/latest/reference/services/ec2.html#EC2.ServiceResource.create_instanceshttp://boto3.readthedocs.org/en/latest/reference/services/ec2.html#EC2.Client.run_instances

而且也没有VirtualizationType在PARAMS,所以我不知道是否有方法来设置或因为它要被弃用所以boto3只是不允许指定此?

欢迎任何提示或建议,并提前致谢!

+0

您需要实例类型为m1.small的原因是什么? –

+0

为了向后兼容,我们有一些使用m1.small的现有脚本,我们正在做基准测试,因此需要完全相同的规格。 –

回答

3

无法从HVM AMI映像启动半虚拟EC2实例。这不仅仅是一个boto3的事情,这是一个AWS限制。半虚拟EC2实例只能从半虚拟AMI启动。

这是因为PV EC2实例启动方式与HVM EC2实例相比存在差异。

为了启动Linux m1.small实例,您需要查找和/或创建一个Paravirtual AMI映像。

+0

啊,谢谢!我误导了错误信息,所以AMI ID与VirtualizationType相关联,我找到了AMI ID,非常感谢! –