tho*_*ers 3 python amazon-s3 amazon-web-services boto3 aws-lambda
我是 Python 新手,我正在编写一个 AWS lambda,它将文件从一个存储桶复制到另一个存储桶。我正在使用 Boto3 库并在文档中遇到以下内容:
当 Amazon S3 收到复制请求或 Amazon S3 复制文件时,复制请求可能会返回错误。如果错误发生在复制操作开始之前,您会收到标准 Amazon S3 错误。如果在复制操作过程中发生错误,错误响应将嵌入到 200 OK 响应中。这意味着 200 OK 响应可以包含成功或错误。设计您的应用程序以解析响应的内容并适当地处理它。如果复制成功,您会收到包含有关复制对象信息的响应。
成功的响应如下所示(潜在的敏感数据替换为“...”):
Response : {'ResponseMetadata': {'RequestId': 'ID....', 'HostId': 'ID...', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amz-id-2': '...', 'x-amz-request-id': '...', 'date': 'Wed,
10 Feb 2021 21: 48: 48 GMT', 'content-type': 'application/xml', 'content-length': '234', 'server': 'AmazonS3'
}, 'RetryAttempts': 0
}, 'CopyObjectResult': {'ETag': '"..."', 'LastModified': datetime.datetime(2021,
2,
10,
21,
48,
48, tzinfo=tzlocal())
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道如何解析 200 响应以检查错误。文档说,如果复制成功,那么您将收到有关复制对象信息的响应。我猜这是 CopyObjectResult 部分?
我正在访问响应:
response = s3_client.copy_object(CopySource=copy_source_object, Bucket=destination_bucket_name, Key=destination_key_prefix+file_key_name)
Run Code Online (Sandbox Code Playgroud)
我现在想写一个语句,说明如果对象复制成功,则从源存储桶中删除该对象。我需要检查响应不仅是 200 响应,而且它也不包含嵌入的错误。我找不到包含错误的示例 200 响应,以确保我已正确编写它,因此我转向可信赖的 SO 社区寻求帮助。
提前致谢。
我认为这些文档在这里可能会产生误导 - 他们描述的是较低级别的 Amazon API,而不是更高级别的面向客户端的库的行为boto3。
您不需要解析它并检查错误,boto3/botocore本身已经解析了结果。如果该方法完全返回一个值,并带有嵌入的CopyObjectResultdict 和 ETag,则没有错误。如果出现错误,客户端库将引发异常。
如果您想处理错误的可能性,那么它是您需要的 API 调用周围的try/except构造。
我的推理是基于查看源代码,在这里注册了一个后处理钩子:
https://github.com/boto/botocore/blob/1.20.5/botocore/handlers.py#L964-L967
实现在这里:
https://github.com/boto/botocore/blob/1.20.5/botocore/handlers.py#L83-L108
在copy_object服务器端失败的情况下,它建议出现 500 错误。
| 归档时间: |
|
| 查看次数: |
360 次 |
| 最近记录: |