Бессерверная версия > 2.35 ошибка при замене переменной на шаблон Cloudformation

#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.

В любом случае, спасибо всем.