2016-09-29 55 views
0

我試圖使用boto3(環境Python 3.5,Windows 7)提交EC2 SPOT實例的請求。 我需要通過UserData參數來運行初始腳本。AWS Boto3調用client.request_spot_instances方法時拋出的BASE64編碼錯誤

我得到的錯誤是 文件 「C:\用戶\ Python的\ Python35 \ LIB \站點包\ botocore \ client.py」,生產線222,在_make_api_call 提高ClientError(parsed_response,OPERATION_NAME) botocore.exceptions.ClientError:發生錯誤(InvalidParameterValue)時 調用 RequestSpotInstances操作:用戶數據代碼的無效BASE64編碼

我下面這個文檔 https://boto3.readthedocs.io/en/latest/reference/services/ec2.html#EC2.Client.request_spot_instances

如果我拿出UserData參數 - 一切正常。

我已經嘗試了不同的方式來傳遞參數,但我最終以相同的錯誤。

博託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 
    } 
    }) 

回答

1

我想你不應該你的base64字符串轉換爲str。你在使用Python 3嗎?

替換:

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

通過:

myparam = base64.b64encode(b'yum install -y php') 
+0

它給我一個錯誤的類型無效參數LaunchSpecification.UserData,值:b'fdfd」,類型:<類的字節'>,有效的類型: - 因爲它期望一個字符串 – user1811107

+2

該文檔不清楚類型。它說「字符串」。試試:'base64.b64encode(b'yum install -y php')。decode(「ascii」)'。 –

+0

工作正常!謝謝 - 我編輯它以使代碼更具可讀性,如base64.b64encode('yum install -y php'.encode())。decode(「ascii」)。 – user1811107

相關問題