Boto3 AWS lambda не запускается

#python #amazon-web-services #aws-lambda #boto3

Вопрос:

Я использую код, аналогичный приведенному ниже, для запуска функции AWS Lambda в своей учетной записи AWS educate, при запуске этой функции на лямбде ничего не срабатывает (лямбда работает с той же полезной нагрузкой в тестовой конфигурации). Мой сеанс и разрешения также верны, поскольку я могу использовать boto3 для доступа к ресурсам S3 с теми же учетными данными. Что я могу попытаться исправить/устранить эту проблему?

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

 import boto3
import json

AWS_ACCESS_KEY_ID ="XXXXXXXXXXXXXXXXXX"
AWS_SECRET_ACCESS_KEY ="XXXXXXXXXXXXXXXXXXXXXXXXXX"
REGION = 'us-east-1'
session = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

payload = json.dumps({"function":"tweets","amount":10,"time":10})

client = boto3.client('lambda',
                        region_name=REGION,
                        aws_access_key_id=AWS_ACCESS_KEY_ID,
                        aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
                        aws_session_token = session)

response = client.invoke(
    FunctionName="MyFunctionARN",
    InvocationType="RequestResponse",
    Payload=payload
)
 

Комментарии:

1. В чем заключаются ошибки, вы распечатали свой ответ print(response) ?

2. Пожалуйста, обратите внимание, что вызов функции отличается от запуска функции. Вызов непосредственно приведет к запуску функции. Запуск используется, когда служба AWS запускает функцию в ответ на событие (например, новый файл в S3 запускает функцию).

3. проверьте журналы, чтобы узнать, удалось ли это/не удалось docs.aws.amazon.com/lambda/latest/dg/…

4. Я добавил ответ на печать в код, и теперь он ожидает лямбда-ответа и успешно запускается, после удаления инструкции печати он продолжал работать, я не уверен, что опубликовать в качестве решения, так как он начал работать без изменений?

Ответ №1:

Каждая лямбда-функция имеет функцию обработчика, которая является записью кода. По умолчанию это lambda_handler. Вы также можете изменить функцию обработчика по умолчанию в настройках среды выполнения. Следующий код решит вашу проблему.

 import boto3
import json

AWS_ACCESS_KEY_ID ="XXXXXXXXXXXXXXXXXX"
AWS_SECRET_ACCESS_KEY ="XXXXXXXXXXXXXXXXXXXXXXXXXX"
REGION = 'us-east-1'
session = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
def lambda_handler(event,context):
    payload = json.dumps({"function":"tweets","amount":10,"time":10})

    client = boto3.client('lambda',
                        region_name=REGION,
                        aws_access_key_id=AWS_ACCESS_KEY_ID,
                        aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
                        aws_session_token = session)

    response = client.invoke(
        FunctionName="MyFunctionARN",
        InvocationType="RequestResponse",
        Payload=payload
    )