如何在localstack中发布到sns主题

问题描述 投票:0回答:1

我编写了lambda函数,该函数通过sns将消息发布到主题。我想对其进行集成测试,因此localstack似乎是一个很好的解决方案。

在setup_class方法中,我成功创建了带有压缩代码和依赖项的lambda,还创建了sns主题,我想在稍后的测试中发布消息。

在调用lambda阶段,我得到了错误:

E           REPORT RequestId: f9f3bac1-3b4b-4826-a5cb-362355087929 Duration: 1906 ms Billed Duration: 2000 ms Memory Size: 1536 MB Max Memory Used: 32 MB Traceback (most recent call last):
E             File "/opt/code/localstack/localstack/services/awslambda/lambda_api.py", line 338, in run_lambda
E               event, context=context, version=version, asynchronous=asynchronous)
E             File "/opt/code/localstack/localstack/services/awslambda/lambda_executors.py", line 81, in execute
E               return do_execute()
E             File "/opt/code/localstack/localstack/services/awslambda/lambda_executors.py", line 66, in do_execute
E               result, log_output = self._execute(func_arn, func_details, event, context, version)
E             File "/opt/code/localstack/localstack/services/awslambda/lambda_executors.py", line 230, in _execute
E               result, log_output = self.run_lambda_executor(cmd, stdin, environment)
E             File "/opt/code/localstack/localstack/services/awslambda/lambda_executors.py", line 151, in run_lambda_executor
E               (return_code, log_output))
E           Exception: Lambda process returned error status code: 1. Output:
E           START RequestId: f9f3bac1-3b4b-4826-a5cb-362355087929 Version: $LATEST
E           An error occurred (InvalidClientTokenId) when calling the Publish operation: The security token included in the request is invalid.: ClientError
E           Traceback (most recent call last):
E             File "/var/task/functions/opt_in.py", line 32, in handler
E               MessageStructure='json'
E             File "/var/task/botocore/client.py", line 357, in _api_call
E               return self._make_api_call(operation_name, kwargs)
E             File "/var/task/botocore/client.py", line 661, in _make_api_call
E               raise error_class(parsed_response, operation_name)
E           botocore.exceptions.ClientError: An error occurred (InvalidClientTokenId) when calling the Publish operation: The security token included in the request is invalid.
E           
E           END RequestId: f9f3bac1-3b4b-4826-a5cb-362355087929
E           REPORT RequestId: f9f3bac1-3b4b-4826-a5cb-362355087929 Duration: 1906 ms Billed Duration: 2000 ms Memory Size: 1536 MB Max Memory Used: 32 MB

它说我可能与IAM或角色有关,但是在设置阶段,所有创建lambda,create topic的操作都没有错误。

我已经尝试在lambda函数中为sns客户端添加端点url,但是在localstack内它会引发错误“错误的url”(为sns的localstack指定为'http://localhost:4575')。

如何通过本地堆栈测试解决“ botocore.exceptions.ClientError”?

python amazon-web-services aws-lambda amazon-sns localstack
1个回答
0
投票

Localstack需要用于sns或其他资源的正确的enpoint_url,如果要在内部执行它。

import os
sns_url = 'http://%s:4575' % os.environ['LOCALSTACK_HOSTNAME']
sns = boto3.client('sns', region_name='us-east-2', endpoint_url=sns_url)
© www.soinside.com 2019 - 2024. All rights reserved.