gpt4 book ai didi

python - pytest localstack测试报错You必须指定区域

转载 作者:行者123 更新时间:2023-12-01 07:01:56 25 4
gpt4 key购买 nike

我已经完成了一个 python 测试,它会启动一个 localstack 容器,并在 localstack 容器内提供一个 S3 存储桶和一个 lambda。

测试如下所示:

def my_test(self, setup_terraform_infra):
s3 = boto3.resource('s3')
buckets = list(s3.buckets.all())
assert len(buckets) == 1

lambda_client = boto3.client('lambda', region_name='us-east-1')
payload = json.dumps(self.load_file(TEST_INPUT_SUCCESS_MESSAGE))

list_function_resp = lambda_client.list_functions(
MasterRegion='us-east-1',
Marker='',
MaxItems=123
)

assert len(list_function_resp['Functions']) == 1

response = lambda_client.invoke(
FunctionName='function',
InvocationType='RequestResponse',
Payload=payload,
)

在上面的测试中一切正常,直到您点击调用函数:

response = lambda_client.invoke(
FunctionName='function',
InvocationType='RequestResponse',
Payload=payload,
)

这会导致以下错误:

botocore.exceptions.ClientError: An error occurred (InternalFailure) when calling the Invoke operation (reached max retries: 4): Error executing Lambda function arn:aws:lambda:us-east-1:000000000000:function:function: You must specify a region.
botocore.exceptions.NoRegionError: You must specify a region.

如果我跳到测试创建的 docker 镜像上,我可以重现此错误:

awslocal lambda invoke --region eu-west-1 --function-name "arn:aws:lambda:us-east-1:000000000000:function:function" --payload "{}" reponse.json

错误:

>>> botocore.exceptions.NoRegionError: You must specify a region.

我尝试在 docker 镜像中设置 AWS_DEFAULT_REGION 和 DEFAULT_REGION 。但问题仍然出现。

我已经没有想法了

最佳答案

我之前也遇到过完全相同的问题,不幸的是,错误消息具有误导性,但我的问题是由于对 Lambda 使用了错误的 InitationType 造成的。

设置正确的 InvocableType 后(在我的例子中,它应该设置为 Event 而不是 RequestResponse),它可以正常工作。

希望这也能解决您的问题。

关于python - pytest localstack测试报错You必须指定区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58594810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com