我试图在Lambda代码中实现这个AWS Lambda Rest API处理程序来处理适当的响应代码。为此,我需要重新打包库aws_lambda_powertools
,并在lambda函数中添加一个层。
下面与这个库相关的所有导入都可以正常工作。
from aws_lambda_powertools import Logger, Tracer
from aws_lambda_powertools.event_handler import APIGatewayRestResolver
from aws_lambda_powertools.logging import correlation_paths
from aws_lambda_powertools.utilities.typing import LambdaContext
但是当我创建上面的跟踪器类的对象低于其给出的错误(休息两个评论对象logger
和app
工作良好。
tracer = Tracer()
# logger = Logger()
# app = APIGatewayRestResolver()
在下面声明跟踪对象时遇到的错误:
Response
{
"errorMessage": "Unable to import module 'lambda_function': No module named 'aws_xray_sdk'",
"errorType": "Runtime.ImportModuleError",
"stackTrace": []
}
Function Logs
OpenBLAS WARNING - could not determine the L2 cache size on this system, assuming 256k
START RequestId: ae8b006b-e7f7-495b-99a0-eb5231c3f81c Version: $LATEST
[ERROR] Runtime.ImportModuleError: Unable to import module 'lambda_function': No module named 'aws_xray_sdk'
Traceback (most recent call last):
我试图安装pip install aws_xray_sdk
并重新包装它并重新添加到层,但它仍然给出相同的错误。
修复了使用AWS Arnarn:aws:lambda:{region}:017000801446:layer:AWSLambdaPowertoolsPythonV2:18📋
而不是使用我自己自定义重新打包的库层的错误。
参考链接:https://awslabs.github.io/aws-lambda-powertools-python/2.6.0/
跟踪(如验证和解析)需要额外的依赖项。默认情况下不包含它们,以使生成的包尽可能小。
使用AWS SAM打包时,我在my_code/requirements.txt
中使用它,然后在本地虚拟环境中使用pip install
:
aws-lambda-powertools[parser, validation, tracer]==2.6.0
此外,我将其包括在tests/requirements.txt
中,我也在本地pip install
,但这是而不是SAM拾取的(再次保持图像小,并且在运行时无论如何都不需要)。
aws-lambda-powertools[aws-sdk]==2.6.0
pytest==7.2.1
在2.0版本中,默认情况下不包括xray SDK,因为即使对于那些不使用Tracer的人来说,这也会引入大小开销。要解决这个问题,只需使用aws-lambda-powertools[tracer]将跟踪器依赖项或使用aws-lambda-powertools[all]将所有依赖项放入requirements.txt。
参考此链接:https://github.com/awslabs/aws-lambda-powertools-python/issues/1872