检测 Python 3.6 Lambda 函数与 X 射线导致错误
Instrumenting Python 3.6 Lambda Function with X-Ray Causes Error
我有一个非常简单的 Lambda 函数,我用 IOT 按钮调用它 运行 是一个 ECS 任务,非常轻量级的东西。我一直对添加 Tracing 很感兴趣,发现 "One-Click" 从 Lambda 获得的跟踪并没有给你很多开箱即用的东西。
我一直在阅读一些关于 Decorators and the SDK Github as well as the AWS Docs on 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 是一个外部依赖项,需要内置而不是在控制台中执行,我也经历了几次打包并看到 [=13= 的 module missing
错误] 包含在 Python 3.x.
的 multiprocessing
库中
在 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-Ray 跟踪,我让它工作得很好。我还必须稍微修改 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>')
我有一个非常简单的 Lambda 函数,我用 IOT 按钮调用它 运行 是一个 ECS 任务,非常轻量级的东西。我一直对添加 Tracing 很感兴趣,发现 "One-Click" 从 Lambda 获得的跟踪并没有给你很多开箱即用的东西。
我一直在阅读一些关于 Decorators and the SDK Github as well as the AWS Docs on 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 是一个外部依赖项,需要内置而不是在控制台中执行,我也经历了几次打包并看到 [=13= 的 module missing
错误] 包含在 Python 3.x.
multiprocessing
库中
在 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-Ray 跟踪,我让它工作得很好。我还必须稍微修改 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>')