4

我正在使用 boto3 从 AWS S3 存储桶加载一些文件。哪个工作正常。但是对于我的单元测试,我正在调用 freeze_time 然后该函数返回错误:botocore.exceptions.ClientError: An error occurred (403) when calling the HeadObject operation: Forbidden

有没有一种解决方案可以让我继续使用 freeze_time 并从 S3 检索文件?

该代码在没有@freeze_time("2019-01-30")并且添加时不起作用。

import boto3
from freezegun import freeze_time
import io

bucket = 'bucket'
key = 'key'

@freeze_time("2019-01-30")
def test_x():
    s3 = boto3.client('s3')
    f = io.BytesIO()
    s3.download_fileobj(bucket, key, f)

test_x()
4

1 回答 1

1

不——你不能使用 freeze_time。你需要找到另一种方法。

AWS api 调用需要时间在客户端和服务器之间“在合理范围内”达成一致。客户说一月,实际上是五月,不被认为是“合理的”。根据 aws.amazon.com 上的信息,允许的最大时钟偏差为 15 分钟。

对于某些 SDK,Amazon 嵌入了自动时钟偏差校正。这可以让呼叫完成,但可能不会给您预期的时间。

于 2019-06-05T23:34:45.977 回答