调用client.request_spot_instances方法时抛出AWS Boto3 BASE64编码错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了调用client.request_spot_instances方法时抛出AWS Boto3 BASE64编码错误相关的知识,希望对你有一定的参考价值。

我正在尝试使用boto3(环境Python 3.5,Windows 7)提交EC2 SPOT实例的请求。我需要传递UserData参数来运行初始脚本。

我得到的错误是文件“C: Users ... Python Python35 lib site-packages botocore client.py”,第222行,在_make_api_call中引发ClientError(parsed_response,operation_name)botocore.exceptions.ClientError:调用RequestSpotInstances操作时发生错误(InvalidParameterValue):用户数据的无效BASE64编码

我正在关注此文档https://boto3.readthedocs.io/en/latest/reference/services/ec2.html#EC2.Client.request_spot_instances

如果我取出UserData参数 - 一切正常。

我尝试了不同的方法来传递参数,但我最终得到了相同的错误。

Boto 3脚本

    client = session.client('ec2')

    myparam = str(base64.b64encode(bytes('yum install -y php', 'utf-8')))

    response = client.request_spot_instances(
    SpotPrice='0.4',
    InstanceCount=1,
    Type='one-time',
    LaunchSpecification={
    'ImageId': 'ami-xxxxxx',
    'KeyName': 'xxxxx',
    'InstanceType': 't1.micro',
    'UserData': myparam,
    'Monitoring': {
    'Enabled': True
    }
    })
答案

我认为你不应该将你的base64字符串转换为str。你在使用Python 3吗?

更换:

myparam = str(base64.b64encode(bytes('yum install -y php', 'utf-8')))

通过:

myparam = base64.b64encode(b'yum install -y php').decode("ascii")

以上是关于调用client.request_spot_instances方法时抛出AWS Boto3 BASE64编码错误的主要内容,如果未能解决你的问题,请参考以下文章

java三种调用方式(同步调用/回调/异步调用)

LINUX系统调用

引用调用 vs 复制调用调用

RPC 调用和 HTTP 调用的区别

js方法调用

深入理解Java虚拟机——方法调用(解析调用)