AWS 兼容性注意事项

本页重点介绍 OpenTelemetry 插件在通过 aws-sdk、第三方库或直接 HTTP 请求与 AWS 托管服务交互时的兼容性注意事项。

上下文传播

在使用 AWS SDK、第三方库或直接 HTTP 请求调用 AWS 托管服务时,应使用 AWS 服务支持的传播格式,将上下文传播添加到出站请求的 HTTP 标头中,以便将上下文传播到此类调用间接调用的服务。

插件可能允许显式配置不同的传播器(例如,显式提供的传播器,或用于所有或某些调用的全局配置传播器的选项)。这对于允许服务将这些标头传输到接收端的情况很有用,例如带有消息属性的 SQS 或 SNS。请注意,这也意味着提供此选项的插件不能仅将其对 X-Ray 传播器的调用替换为对另一个传播器的调用(因为这只会将 HTTP 标头发送到接收 AWS 服务将立即忽略的 API REST 调用),而是需要引入适用于其适用的每服务调用实现(例如,对于 SQS 发送和 SQS 接收)。这可以传输 X-Ray 可能不支持的附加上下文,例如 baggage 或 tracestate,或者支持某些旧的传播格式。文档应建议这样做会受到属性限制和计费影响。

必须在计算签名之前添加传播标头,以防止签名请求出现错误。如果注入到请求本身(而不仅仅是添加额外的 HTTP 标头),可能需要考虑其他事项(例如,.NET AWS SDK 会计算其发送的属性的哈希值,并将其与收到的 MD5OfMessageAttributes 进行比较)。

以下格式目前由 AWS 服务原生支持传播

AWS 服务支持的上下文传播对于通过 AWS 托管服务传播上下文至关重要,例如:S3 -> SNS -> SQS -> Lambda

(有关 Lambda 插件如何使用此上下文传播的详细信息,请参阅 aws-lambda sqs-event 语义约定 文档)。