AWS | Boto3 | RDS | function DownloadDBLogFilePortion |无法下载日志文件,因为它包含二进制数据|

时间:2016-04-28 15:28:38

标签: python-2.7 amazon-web-services aws-cli boto3 aws-rds

当我尝试从RDS实例下载所有日志文件时,在某些情况下,我在python输出中发现了这个错误:

  

调用时发生错误(InvalidParameterValue)   DownloadDBLogFilePortion操作:该文件包含二进制数据和   应该下载而不是查看。

我正确管理了分页和限制(使用标记参数和睡眠功能)。

这是我的呼唤:

log_page=request_paginated(rds,DBInstanceIdentifier=id_rds,LogFileName=log,NumberOfLines=1000)

RDS-> boto3资源

这是我职能的定义:

def request_paginated(rds,**kwargs):
     return rds.download_db_log_file_portion(**kwargs)

就像我说的那样,大部分时间这个功能都有效但有时会返回:

  

“调用时发生错误(InvalidParameterValue)   DownloadDBLogFilePortion操作:该文件包含二进制数据和   应该下载而不是查看“

你能帮帮我吗? :)

更新:问题是下载包含不可打印标志的日志文件的已知问题。我会尽快尝试由aws支持提供的建议解决方案

最新更新:这是我与aws支持团队讨论的摘录:

使用基于boto的AWS cli时,存在非二进制字符的已知问题,但在使用旧的基于Java的cli时,此问题不存在。

目前无法解决使用基于boto的AWS cli时遇到的问题,解决方法是从基于Java的cli进行API调用

aws团队已经意识到这个问题并且正在努力解决这个问题,但是当它发布时没有ETA。 所以解决方案是:使用java API

朱塞佩

2 个答案:

答案 0 :(得分:1)

最新更新:这是我与aws支持团队讨论的摘录:

使用基于boto的AWS cli时,存在非二进制字符的已知问题,但在使用旧的基于Java的cli时,此问题不存在。

目前无法解决使用基于boto的AWS cli时遇到的问题,解决方法是从基于Java的cli进行API调用

aws团队已经意识到这个问题并且正在努力解决这个问题,但是当它发布时没有ETA。所以解决方案是:使用java API

朱塞佩

答案 1 :(得分:0)

http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/CommonErrors.html

  

InvalidParameterValue:提供了无效或超出范围的值   输入参数。

boto中的无效参数表示数据传递未遵循。可能是您指定的无效名称,可能是您的变量id_rds错误,或者您的LogFileName等。您必须遵守函数参数要求。

response = client.download_db_log_file_portion(
  DBInstanceIdentifier='string',
  LogFileName='string',
  Marker='string',
  NumberOfLines=123
)

(UPDATE) 例如,LogFileName必须是RDS实例中存在的确切文件名。

对于日志文件,请确保实例内的日志文件EXISTS。使用此AWS CLI进行快速检查

aws rds describe-db-log-files --db-instance-identifier <my-rds-name> 

同时检查标记(字符串)和NumberOfLines(整数)。不匹配类型或超出范围。跳过它们,因为它们不是必需的,然后再测试它。