有没有办法使用sam invoke local
?
根据the idea which PaulMaddox mentioned, 我已经尝试了下面的步骤,我不知道我是否误解了:
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
如果您能提供更多信息,那就太好了。
答案 0 :(得分:1)
我对SAM不太熟悉,但是......
您需要设置_X_AMZN_TRACE_ID环境变量。目前,X-Ray Node SDK通过Lambda运行时启动代码和用户代码之间的交叉通信来工作。
Lambda在其启动代码中启动该段,记录时间和异常等信息,并将该段发送到X射线服务。然后,它通过设置_X_AMZN_TRACE_ID环境变量将跟踪ID /父ID /采样决策转发给用户代码。这允许SDK创建一个单独的子段,推断与原始段的连接,该段在服务端被“编织”到原始段而不实际直接相关。两者都是带外发送的,彼此异步发送。
_X_AMZN_TRACE_ID变量与此处讨论的跟踪标头的格式相同:https://docs.aws.amazon.com/xray/latest/devguide/xray-concepts.html#xray-concepts-tracingheader
如果要通过守护程序将跟踪发送到X射线服务,您需要弄清楚如何让SAM最初构建此Lambda段并在导入SDK之前设置_X_AMZN_TRACE_ID。
由于SDK自动检测Lambda的存在(据我所知,SAM模仿),您必须在导入SDK之前设置_X_AMZN_TRACE_ID变量。其中,有点像catch-22,因为你需要导入SDK(在非Lambda模式下)来构造Lambda段,然后才能填充_X_AMZN_TRACE_ID。
问题在于: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端可能有一些工作要内置它。但是,希望这可以解决这个问题。