Ошибка при вызове AWS lambda с использованием python. Ошибка: были заданы позиционные аргументы, но 2

#python-3.x #aws-lambda

#python-3.x #aws-lambda

Вопрос:

Я использую лямбда-выражение для вызова другого с помощью этого фрагмента кода:

 import boto3
import json

# Lambda Handler
def lambla_handler(event,context):

    lam = boto3.client('lambda', region_name='sa-east-1')

    try:
        response = lam.invoke(FunctionName='water_types', InvocationType='RequestResponse') 
    except Exception as e:
        print(e)
        raise e
    print(response)
  

Все работает нормально, однако, когда лямбда ‘water_types’ выдает эту ошибку:

 water_types() takes 0 positional arguments but 2 were given: TypeError
Traceback (most recent call last):
File "/var/runtime/awslambda/bootstrap.py", line 250, in handle_event_request
result = request_handler(json_input, context)
TypeError: water_types() takes 0 positional arguments but 2 were given
  

Как я вижу, я не отправляю никаких аргументов. Есть идеи, как это исправить?

 def water_types(): 
   return print("water updated: 90")
  

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

1. Не могли бы вы показать обработчик water_types ? Я думаю, вам не хватает обязательных (event, context) аргументов

2. Да, это так. Всегда ли мне нужно их использовать?

Ответ №1:

Если water_types это обработчик функции (который, согласно вашему коду, является), вам необходимо следовать рекомендациям AWS о том, как создавать лямбда-функции с помощью Python

Обработчик lambda должен иметь структуру, аналогичную

 def handler_name(event, context): 
    ...
    return some_value
  

Среда выполнения lambda предоставит значения для event и context при вызове обработчика.

Итак, TL; DR, ваша функция должна выглядеть так

 def water_types(event, context): 
   return print("water updated: 90")
  

Вам не нужно ничего делать с этими параметрами, но они должны быть там.