Tho*_*ysa 4 amazon-web-services aws-lambda aws-xray
我有一个 Flask 应用程序作为与 Zappa 一起部署的 AWS Lambda 函数运行,我想激活 X-Ray 以获取有关不同函数的更多信息。
使用 Zappa 激活 X-Ray 非常简单 - 只需要在 zappa-settings.json 中添加以下行:
"xray_tracing": true
Run Code Online (Sandbox Code Playgroud)
此外,我安装了AWS X-Ray Python SDK并为一些函数添加了一些装饰器,如下所示:
@xray_recorder.capture()
Run Code Online (Sandbox Code Playgroud)
当我将其部署为 Lambda 函数时,一切正常。问题是在本地使用系统,无论是在运行测试时还是在本地服务器中运行 Flask 而不是作为 lambda 函数时。
当我使用在测试中或通过本地服务器修饰的任何函数时,抛出以下异常:
aws_xray_sdk.core.exceptions.exceptions.SegmentNotFoundException: cannot find the current segment/subsegment, please make sure you have a segment open
Run Code Online (Sandbox Code Playgroud)
这当然是有道理的,因为 AWS Lambda 处理分段的创建。
有什么好的方法可以在本地停用捕获吗?这将很有用,例如,对我想在 X-Ray 中观看的函数在本地运行单元测试。
小智 5
此 SDK 的功能要求之一是具有“禁用”全局标志,因此一切都变得无操作https://github.com/aws/aws-xray-sdk-python/issues/26。
但是,这仍然取决于您要测试的对象。测试实际将在 Lambda 上运行的内容是一种很好的做法。您可以设置一些环境变量,以便 SDK 认为它在 Lambda 上运行。
您可以看到 SDK 正在寻找两个环境变量https://github.com/aws/aws-xray-sdk-python/blob/master/aws_xray_sdk/core/lambda_launcher.py。一个被LAMBDA_TASK_ROOT设置为true所以它知道切换到 lambda 模式。另一个是_X_AMZN_TRACE_ID包含通常由 lambda 容器传递的跟踪上下文。
如果您只想测试非 XRay 代码,您可以设置AWS_XRAY_CONTEXT_MISSING为,LOG_ERROR这样 SDK 就不会抱怨上下文丢失,而只是放弃捕获包装函数。这将比模拟 lambda 行为运行更少的代码路径。理想情况下,lambda 本地测试工具最好是 X-Ray 友好的。您在使用https://github.com/awslabs/aws-sam-cli吗?此功能已经存在一个未解决的问题https://github.com/awslabs/aws-sam-cli/issues/217
| 归档时间: |
|
| 查看次数: |
1253 次 |
| 最近记录: |