request_spot_instance API不接受文件格式

时间:2018-01-27 02:39:48

标签: amazon-web-services amazon-ec2 aws-sdk aws-cli

我正在使用AWS API创建一个现场实例。当我尝试以文件格式提供用户数据时,出现错误

  

" botocore.exceptions.ClientError:调用RequestSpotInstances操作时发生错误(InvalidParameterValue):用户数据的BASE64编码无效

session = boto3.Session()
client = session.client('ec2', region_name = 'us-west-2')

response = client.request_spot_instances(
    InstanceCount=1,
    LaunchSpecification={

        'ImageId': 'ami-012345',
        'InstanceType': 't2.medium',
        'Placement': {'AvailabilityZone': 'us-west-2a'},
        'SecurityGroupIds': ['sg-012345'],
        'SubnetId': 'subnet-012345',
    'UserData': 'file://my_script0.txt'
    },
    SpotPrice='0.0139',
    Type='persistent',
    InstanceInterruptionBehavior = 'stop'

)

根据AWS文档,如果我们想将用户数据作为文件传递,我们可以通过在文件名前加上" file://"来实现。 但似乎这个API期望整个文件内容首先被base64编码。

1 个答案:

答案 0 :(得分:0)

根据文档http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html,base64仅用于API调用而不是CLI。

因此,当我传递我的文件的base64编码数据时,API才能正常工作。

file  = open("my_script0.txt", 'r')
encoded_data = base64.encodestring(file.read())