gpt4 book ai didi

amazon-web-services - Lambda AWS X 射线。 Python SDK - 在本地停用

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

我有一个 Flask 应用程序作为与 Zappa 一起部署的 AWS Lambda 函数运行,我想激活 X-Ray 以获取有关不同函数的更多信息。

使用 Zappa 激活 X-Ray 非常简单 - 只需要在 zappa-settings.json 中添加以下行:

"xray_tracing": true

此外,我安装了 AWS X-Ray Python SDK并为一些函数添加了一些装饰器,如下所示:
@xray_recorder.capture()

当我将其部署为 Lambda 函数时,一切正常。问题是在本地使用系统,无论是在运行测试时还是在本地服务器中运行 Flask 而不是作为 lambda 函数时。

当我使用在测试中或通过本地服务器修饰的任何函数时,抛出以下异常:
aws_xray_sdk.core.exceptions.exceptions.SegmentNotFoundException: cannot find the current segment/subsegment, please make sure you have a segment open

这当然是有道理的,因为 AWS Lambda 处理分段的创建。

有什么好的方法可以在本地停用捕获吗?这将是有用的,例如用于对我想在 X-Ray 中观看的函数在本地运行单元测试。

最佳答案

此 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_MISSINGLOG_ERROR所以 SDK 不会提示上下文丢失,而只是放弃捕获包装函数。这将比模拟 lambda 行为运行更少的代码路径。理想情况下,lambda 本地测试工具最好是 X-Ray 友好的。您在使用 https://github.com/awslabs/aws-sam-cli ?此功能已经有一个 Unresolved 问题 https://github.com/awslabs/aws-sam-cli/issues/217

关于amazon-web-services - Lambda AWS X 射线。 Python SDK - 在本地停用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53284809/

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