Ваша функция обработчика должна быть определена как:
def lambda_handler(event, context):
lightID = event
...
С AWS Лямбда-функция Обработчик в Python - AWS Лямбда :
event
- AWS Lambda использует этот параметр для передачи данных события обработчику. Этот параметр обычно имеет тип Python dict. Это также может быть тип list, str, int, float или NoneType.
Когда вы вызываете свою функцию, вы определяете содержание и структуру события. Когда служба AWS вызывает вашу функцию, структура события зависит от службы.
context
- AWS Lambda использует этот параметр для предоставления информации о времени выполнения вашему обработчику.
Вполне вероятно, что ваш event
просто содержит Light ID, как показано вашим кодом, но лучше всего назвать его event
, чтобы распознать, что это значение передается в функцию Lambda, но тогда ваш код выбрав для интерпретации его как lightID
.
Кроме того, ваш код не должен вызывать функцию lambda_handler
. Служба AWS Lambda сделает это при вызове функции.
Наконец, вы можете воспользоваться Python 3.x f-строками, которые создают строки в более хорошем формате:
import requests
import json
bridgeIP = "PublicIPAddress:999"
userID = "someone"
def lambda_handler(event, context):
lightID = event
url = f"http://{bridgeIP}/api/{userID}/lights/{lightID}"
r = requests.get(url)
data = json.loads(r.text)
r = requests.put(f"{url}/state", json.dumps({'on': not data["state"]["on"]}))