首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AWS XRay:无法写入/tmp/.AWS-xray/初始化。未能向SDK初始化发出信号

AWS XRay:无法写入/tmp/.AWS-xray/初始化。未能向SDK初始化发出信号
EN

Stack Overflow用户
提问于 2018-12-01 10:44:08
回答 1查看 1K关注 0票数 0

我正在尝试编写一个Lambda函数来存储dyanamodb中的数据,并尝试与AWS X射线集成。下面是Lambda函数的代码。我收到错误了

无法写入/tmp/..aws xray/初始化。未能向SDK初始化发出信号。由于Lambda工作人员仍在初始化而丢弃的子段put_item

我安装了Aws xray SDK软件包。此外,代码中还包括开始段和结束段。并设置了LAMBDA_TASK_ROOT.的环境变量。请给出这个错误的解决方案。

代码语言:javascript
复制
import json
import os
import configparser
import boto3
from aws_xray_sdk.core import xray_recorder
from aws_xray_sdk.core import patch

patch(['boto3'])
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table(os.environ['dynamodb_table'])

def lambda_handler(event, context):
    for i in event:
        item = {
            'key': i['key'],
            'search': i['search'],
        }
        put_item_into_dynamodb(item)

    response = {
         "statusCode": 200,
         "body": json.dumps(item)
    }
    return response

def put_item_into_dynamodb(item):
    try:
        xray_recorder.begin_subsegment('put_item')
        response = table.put_item(Item=item)
        status_code = response['ResponseMetadata']['HTTPStatusCode']
        xray_recorder.current_subsegment().put_annotation('put_response', status_code)
    finally:
        xray_recorder.end_subsegment()

更新-2(第二个问题):在这段代码中,AttributeError:'NoneType‘对象没有属性'put_annotation',这个错误即将出现。我不知道这是为什么..。

代码语言:javascript
复制
def lambda_handler(event, context):

    val = (str(event['userId']),str(event['teamId']), str(event['searchScope']))
    key_table = "|".join(val)
    key = {
        'key': key_table
    }
    response = get_item_into_dynamodb(key)

    try:
        data = response['Item']
        for i in data['search']:
            keyword_list.append(i['searchText'])
            dict_of_keyword[i['searchText']] = i['dateTime']

        recent_sort = sorted(dict_of_keyword.items(), key=lambda x: x[1], reverse=True)
def get_item_into_dynamodb(key):
    try:
        xray_recorder.begin_segment('get_item')
        response = table.get_item(Key = key)
        status_code = response['ResponseMetadata']['HTTPStatusCode']
        xray_recorder.current_subsegment().put_annotation('get_response', status_code) #error is on this line
    finally:
        xray_recorder.end_subsegment()

    return response
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-04 01:33:56

不能在Lambda函数中创建段。Lambda将在外部包装器中创建无法在函数中访问的段。你能试着把xray_recorder.begin_segment('get_item')换成xray_recorder.begin_subsegment('get_item')吗?

此外,在lambda处理程序之外生成的跟踪数据将不会被捕获,因为在此期间,lambda函数仍在初始化,并且没有可用的跟踪上下文。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53570002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档