【问题标题】:SegmentNotFoundException in AWS Xray with Lambda带有 Lambda 的 AWS Xray 中的 SegmentNotFoundException
【发布时间】:2018-01-12 08:36:37
【问题描述】:

我正在尝试编写一个 Lambda 函数来将文件从一个 s3 存储桶复制到另一个与 AWS Xray 集成的存储桶。下面是 Lambda 函数的代码。我收到错误

aws_xray_sdk.core.exceptions.exceptions.SegmentNotFoundException:找不到当前段/子段,请确保您有一个段打开

我已将 Aws xray SDK 包含在我的部署包中。此外,代码中还包含开始段和结束段。请给出此错误的解决方案。

import boto3
from aws_xray_sdk.core import xray_recorder
from aws_xray_sdk.core import patch
patch(['boto3'])

client = boto3.client('s3')
s3 = boto3.resource('s3')
SourceBucket = 'bucket1'
DestBucket = 'bucket2'
list1=[];

def lambda_handler(event, context):
    response = client.list_objects(Bucket=SourceBucket)
    if 'Contents' in response:
        for item in response['Contents']:
            list1.append(item['Key']);
        put_object_into_s3()
        for name in list1:
            copy_source = {
                'Bucket': SourceBucket,
                'Key': name
            }
            response = s3.meta.client.copy(copy_source, DestBucket, name)

【问题讨论】:

    标签: python amazon-s3 aws-lambda aws-xray


    【解决方案1】:

    Lambda 环境的上下文管理永远不会抛出SegmentNotFoundException。如果线程本地存储中没有活动的segment/subsegment,它会根据Lambda容器中设置的环境变量构造一个segment。见https://github.com/aws/aws-xray-sdk-python/blob/master/aws_xray_sdk/core/lambda_launcher.py#L79

    设置环境变量LAMBDA_TASK_ROOT 时将使用lambda 上下文管理。您是使用某种工具在本地运行 Lambda 函数还是启用了 Lambda 函数的active tracing

    【讨论】:

    • 我现在面临同样的问题,我正在使用 pycharm 在本地对其进行测试,并且在我的 lambda 函数中启用了主动跟踪。那么这个问题的解决方案是什么。
    • @Jessica 如果您只想测试非 XRay 代码,您可以将 AWS_XRAY_CONTEXT_MISSING 设置为 LOG_ERROR,这样 SDK 就不会抱怨缺少上下文,而只是放弃捕获包装的函数。与模仿 lambda 行为相比,这将运行更少的代码路径。理想情况下,lambda 本地测试工具对 X 射线友好会更好。你在用github.com/awslabs/aws-sam-cli吗?此功能已经有一个未解决的问题github.com/awslabs/aws-sam-cli/issues/217
    【解决方案2】:

    如果您有任何调用 xray_recorder.configure 的顶级代码(几乎总是一个坏主意),那么它将清除 Lambda 创建的段,不会创建新的有效段。如果您还将环境变量 AWS_XRAY_CONTEXT_MISSING 设置为 RUNTIME_ERROR - 默认情况下通常是这样 - 那么您将遇到这些异常。

    我们的日志中充斥着错误日志消息(带有AWS_XRAY_CONTEXT_MISSING=LOG_ERROR),直到我们找到并删除了对xray_recorder.configure 的不必要调用。

    【讨论】:

      猜你喜欢
      • 2020-11-12
      • 1970-01-01
      • 2023-01-30
      • 1970-01-01
      • 1970-01-01
      • 2021-05-15
      • 1970-01-01
      • 2020-07-21
      • 2020-10-19
      相关资源
      最近更新 更多