gpt4 book ai didi

amazon-web-services - 在本地使用 AWS X-Ray 调用 AWS Lambda

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

是否可以使用 sam invoke local 使用 X-Ray 调用 lambda ?

根据 the idea which PaulMaddox mentioned ,
我已经尝试了下面的步骤,不知道是不是我理解错了:

  • 按照 document 在本地 (0.0.0.0:2000) 运行 X-Ray 守护程序
  • 在我的 lambda 的 template.yaml 中设置 ENV AWS_XRAY_DAEMON_ADDRESS: 0.0.0.0:2000
  • 调用该函数,但仍然出现错误 Missing AWS Lambda trace data for X-Ray. Expected _X_AMZN_TRACE_ID to be set

  • 这是 template.yaml 的一部分设置,我用环境变量设置 AWS_XRAY_DAEMON_ADDRESS
    enter image description here

    如果您能提供更多信息就好了。

    最佳答案

    我对 SAM 不太熟悉,但是...

    您需要设置 _X_AMZN_TRACE_ID 环境变量。目前,X-Ray 节点 SDK 通过 Lambda 运行时启动代码和用户代码之间的交叉通信来工作。

    Lambda 在其启动代码中启动分段,记录计时和异常等信息,并将分段发送到 X-Ray 服务。然后,它通过设置 _X_AMZN_TRACE_ID 环境变量将跟踪 ID/父 ID/采样决策转发给用户代码。这允许 SDK 创建一个单独的子段,推断与原始段的连接,该连接在服务端“编织”到原始段中,而实际上并没有直接关联。两者都是带外发送的,彼此异步。

    _X_AMZN_TRACE_ID 变量与此处讨论的跟踪 header 的格式相同:https://docs.aws.amazon.com/xray/latest/devguide/xray-concepts.html#xray-concepts-tracingheader

    如果您想通过守护程序将跟踪发送到 X-Ray 服务,您需要弄清楚如何让 SAM 最初构建此 Lambda 段并在导入 SDK 之前设置 _X_AMZN_TRACE_ID。

    由于 SDK 自动检测 Lambda 的存在(据我所知,SAM 模仿),因此您必须在导入 SDK 之前设置 _X_AMZN_TRACE_ID 变量。这有点像第 22 条,因为在填充 _X_AMZN_TRACE_ID 之前,您需要导入 SDK(在非 Lambda 模式下)以构建 Lambda 段。

    问题出在这里:https://github.com/aws/aws-xray-sdk-node/blob/master/packages/core/lib/aws-xray.js#L361

    如果您将 SDK 翻转到 LOG_ERROR 模式(忽略 Lambda 错误),创建并发送 Lambda 段(只需手动创建一个段,将生成的 ID/父 ID/采样加载到 _X_AMZN_TRACE_ID 中然后关闭该段),然后清除缓存/重新- 之后导入 SDK,然后应该可以工作。

    否则,我怀疑 SAM 端可能需要做一些工作来内置它。但是,希望这项工作能够奏效。

    关于amazon-web-services - 在本地使用 AWS X-Ray 调用 AWS Lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50868512/

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