В основном благодаря удаче я нашел ответ, который позволяет мне обойти это автоматически.
Как работали наши скрипты
Сначала позвольте мне объяснить, как это работало. Раньше у меня был следующий набор скриптов cloudFormation:
cognitoSetup.template --> <Serverless Framework> --> <cognitoSetup.template updated with triggers>
Таким образом, мы настроили пул Cognito, запустили Serverless Framework, чтобы добавить функции Cognito Lambda, а затем обновили файл cognitoSetup.template с помощью ARN для лямбд, экспортируемых при запуске Serverless Framework.
Исправление
Теперь мы включаем ARN для лямбд в cognitoSetup.template
. Так что теперь cognitoSetup.template
выглядит так:
"CognitoUserPool": {
"Type": "AWS::Cognito::UserPool"
...
"Properties": {
...
"LambdaConfig": {
"CustomMessage": "arn:aws:lambda:<our aws region>:<our account#>:function:main-<our stage>-onCognitoCustomMessage"
}
}
Обратите внимание, мы устанавливаем этот триггер до того, как лямбда даже существует. Триггеру просто нужен ARN, и, похоже, его не волнует, что он еще не там. Затем мы запускаем sls deploy
, который создает настоящую лямбда-функцию, и все работает нормально.
Теперь наши скрипты выглядят так:
cognitoSetup.template --> <Serverless Framework>
Почему это исправляет эту ошибку? Я на самом деле не знаю. CloudFormation, кажется, хорошо с этой модификацией, но не хорошо с изменением того же файла позже в нашем процессе. Но это работает.