Более двух дней я пытался развернуть стек CloudFormation с использованием бессерверной инфраструктуры. Дело в том, что как часть стека у меня есть кластер RDS, а также пользовательский ресурс, который использует лямбда-функцию (записанную в Python) для инициализации некоторых таблиц базы данных.
Подробности этого настраиваемого ресурса в файле serverless.yml следующие:
rdsMigration:
Type: Custom::DatabaseMigration
DependsOn: rdsCluster
Properties:
ServiceToken: !GetAtt MigrateDatabaseLambdaFunction.Arn
Version: 1.0
При развертывании с использованием sls deploy
кластер и лямбда-функции создаются правильно, но процесс застревает. создание ресурса rdsMigration
.
В лямбда-коде я старался генерировать ответ во всех возможных сценариях ios, включая исключения. Однако, похоже, проблема не в этом.
Очевидно, функция не вызывается ... вроде, потому что даже диаграммы выглядят странно:
Вы можете видеть, что нет вызовов, но есть красная точка в «Счетчике ошибок и успешности» около 17:15, это время, когда началось создание ресурса. Кроме того, нет зеленых точек, и вы можете увидеть предупреждение внизу в легенде, в котором говорится, что «Одна или несколько точек данных были потеряны из-за нечисловых c значений (NaN, -Infinite, + Infinite) ". Как это возможно? Я предполагаю, что это нестандартное поведение, поскольку другие функции Lambda (которые должны вызываться с помощью конечной точки API Gateway) не отображают эту странную диаграмму.
Кроме того, в CloudWatch нет потоков журналов. Он полностью пустой, как если бы функция никогда не вызывалась (что, кажется, так, за исключением странной «красной точки» в момент создания ресурса).
Наконец, если я запустил тестовый пример с помощью Шаблон «AWS CloudFormation Create Request», функция работает правильно, создает начальные таблицы, которые я ожидал для БД (не всегда, но это другой вопрос), и возвращает ответ.
У вас есть есть представление о том, что здесь происходит? Хуже всего то, что мне нужно подождать два часа между тестами, поскольку стек CFN застревает на этапах создания и уничтожения, пока не истечет время ожидания.
Спасибо!