gpt4 book ai didi

python - 使用 X-Ray 检测 Python 3.6 Lambda 函数会导致错误

转载 作者:太空宇宙 更新时间:2023-11-03 20:40:54 24 4
gpt4 key购买 nike

我有一个非常简单的 Lambda 函数,我使用运行 ECS 任务的 IOT 按钮来调用它,这是非常轻量级的东西。我一直对添加跟踪很感兴趣,发现从 Lambda 获得的“一键式”跟踪并不能提供开箱即用的功能。

我一直在阅读一些关于 Decorators 的帖子和 SDK Github以及 AWS 文档 Python tracing for Lambda并认为这应该很容易。

我的函数的开头如下

import boto3
from aws_xray_sdk.core import xray_recorder

@xray_recorder.capture("handler")

def handler(event,context):
client = boto3.client('ecs')
response = client.run_task(
---python code---
return str(response)

现在的测试给我一个这样的错误:

Response:
{
"errorMessage": "Unable to import module 'lambda_function'"
}

Request ID:
"REQID...e3f379f4702a"

Function Logs:
START RequestId: REQID...e3f379f4702a Version: $LATEST
Unable to import module 'lambda_function': No module named 'aws_xray_sdk'

控制台中的我的处理程序只是lambda_function.handler,并在添加该检测之前工作。我尝试在代码中使用 Subsegments 代替其他一些品种,但遇到了同样的问题。对于 Python,我还是个新手,所以我不确定下一步该检查哪里,或者我是否正确地执行了此操作。

如果适用的话,我已经在控制台中编写了代码,并且也不使用 Layers 或 ZIP 打包

最佳答案

弄清楚我做错了什么(一些事情),但幸运的是,对于我的自尊来说,命名约定并不是错误的事情。

aws-xray-sdk 是一个外部依赖项,需要内置而不是在控制台中执行,我还进行了几次打包并看到了 module missing Queue 的错误包含在 multiprocessing 中Python 3.x 的库。

在 Cloud9 IDE 中,我执行了以下步骤

mkdir package && cd package
pip install multiprocessing --system -t ./
pip3 install boto3 --system -t ./
pip install aws-xray-sdk --system -t ./
chmod -R 755 .
zip -r ../myDeploymentPackage.zip .
cd -
aws s3 cp myDeploymentPackage.zip s3://<my-bucket>/<my-path>/

在 Lambda 控制台中,我指定了上传的 Zip 文件的当前版本的 URL,在控制台中启用了 X 射线跟踪,并且它工作得很好。我还必须稍微修改一下 Python 代码的编写方式,以利用修补 boto3以及自动检测,因为该功能非常简单,并且使用 Boto 对不同的服务进行一到两次调用,所以它现在看起来像这样:

import boto3
from aws_xray_sdk.core import xray_recorder
from aws_xray_sdk.core import patch

patch(['boto3'])

@xray_recorder.capture("handler")

def handler(event,context):
client = boto3.client('<service here>')

关于python - 使用 X-Ray 检测 Python 3.6 Lambda 函数会导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56872793/

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