Ваша лямбда-функция выдавала ошибки , поэтому у нее никогда не было возможности вызвать cfnresponse.send()
. Это означало, что CloudFormation продолжала ждать ответа.
Вот обновленная версия лямбда-функции:
from datetime import date, timedelta
import cfnresponse, os
def lambda_handler(event, context):
current_delta = date.today() - timedelta(days=int(os.environ['DaysToSubtract']))
current_delta_str = current_delta.strftime("%Y-%m-%d")
responseData = {}
responseData['Dates'] = current_delta_str
cfnresponse.send(event, context, cfnresponse.SUCCESS, responseData)
Проблемы были:
- Переменные среды передаются через
os.environ()
, а не event()
- Значение
DaysToSubtract
проходило как string
, а не int
, поэтому функция timedelta()
не работала (Осторожно ... правописание Substract
против Subtract
) - Словарь
responseData
не был инициализирован, поэтому он выдавал ошибку NameError: name 'responseData' is not defined
Я настоятельно рекомендую вам сначала разработайте лямбда-функции в консоли . Затем, когда они будут работать, переместите их в шаблон CloudFormation. Это значительно упрощает отладку.
О, также обратите внимание, что Пользовательские ресурсы вызываются при создании, обновлении и удалении стека . Это может привести к неожиданному поведению, особенно во время операции Delete
. Обычно хорошей идеей является вставка оператора if
для запуска кода только на этапе Create
с помощью:
if event['RequestType'] == 'Create':