Инструментарий Python 3.6 Лямбда-функция с рентгеновским излучением вызывает ошибку - PullRequest
0 голосов
/ 03 июля 2019

У меня есть очень простая лямбда-функция, которую я вызываю с помощью кнопки IOT, которая запускает задачу ECS, очень легкий материал.Я был заинтересован в добавлении трассировки и обнаружил, что трассировка «одним щелчком», которую вы получаете от Lambda, не дает вам ничего особенного.

Я читал несколько сообщений о Декораторах и SDK Github , а также документы AWS по трассировке Python для 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 упаковку либо

1 Ответ

0 голосов
/ 04 июля 2019

Понял, что я делал неправильно (несколько вещей), но, к счастью для моего эго, соглашение об именах не было неправильным.

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-консоли я указал URL-адрес текущей версии загруженного Zip-файла, включил трассировку рентгеновских лучей в консоли, и у меня все заработало нормально.Мне также пришлось немного изменить свой код 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>')
...