#amazon-cloudformation #amazon-cognito #serverless #aws-serverless
Вопрос:
Как твои дела?
Я столкнулся с очень странной ошибкой после обновления моей бессерверной версии с 2.35 до любой новой версии. Используя точно такой же .yml, который развертывается в версии 2.35, в более новых версиях возникает следующая ошибка:
Поставщики должны быть действительными Пулами пользователей Cognito:
Serverless Error ----------------------------------------
An error occurred: ApiGatewayCognitoAuthorizer - ProviderARNs need to be valid Cognito Userpools. Invalid ARNs-
arn:aws:cognito-idp:${file(./src/config/dev.json):REGION}:${file(./src/config/dev.json):AWS_ACCOUNT}:userpool/${file(./src/config/dev.json):COGNITO_POOL_ID} (Service: AmazonApiGateway; Status Code: 400; Error Code: BadRequestException; Request ID: e8403d66-ec5c-4ead-9528-308baed7640f; Proxy: null).
Get Support --------------------------------------------
Docs: docs.serverless.com
Bugs: github.com/serverless/serverless/issues
Issues: forum.serverless.com
Your Environment Information ---------------------------
Operating System: darwin
Node Version: 12.22.1
Framework Version: 2.50.0 (local)
Plugin Version: 5.4.4
SDK Version: 4.3.0
Components Version: 3.17.0
В глубине души проблема заключается в том, что шаблон CloudFormation, созданный в развертывании, не может разрешить переменные, которые в версии 2.35 и предыдущих версиях были разрешены правильно (особенно те переменные, которые зависят от файла конфигурации), например, в моем коде:
ApiGatewayCognitoAuthorizer:
DependsOn:
- ApiGatewayRestApi
Type: AWS::ApiGateway::Authorizer
Properties:
Name: cognito-authorizer
IdentitySource: method.request.header.Authorization
ProviderARNs:
- "arn:aws:cognito-idp:${${self:custom.config}:REGION}:${${self:custom.config}:AWS_ACCOUNT}:userpool/${${self:custom.config}:COGNITO_POOL_ID}"
RestApiId:
Ref: ApiGatewayRestApi
Type: COGNITO_USER_POOLS
Те же замены переменных используются в других ресурсах, лямбдах и т. Д., Но ошибка передается только авторизатору API Cognito, я не понимаю…
Спасибо всем вам за внимание и помощь 🙂
Комментарии:
1. Пожалуйста, не публикуйте код или сообщения об ошибках в виде изображений.
2. Извините за изображения @Marcin
Ответ №1:
Решается с помощью https://www.serverless.com/framework/docs/environment-variables/, т. е. загрузка переменных среды из файлов .env вместо пользовательских файлов .json.
В любом случае, спасибо всем.