Serverless version > 2.35 error in variable replacement to Cloudformation template

How are you?

I’m facing to a very odd error after upgrading my Serverless version from 2.35 to any newer version. Using the exactly the same .yml that deploys in 2.35, in newer versions the following error is thrown:

ProviderARNs need to be valid Cognito Userpools:

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

In the deep, the problem is that the CloudFormation template generated in the deployment is unable to resolve variables that 2.35 and previous versions resolved properly, for example in my code:

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

Same variable replacements are used in other resources, lambdas, etc. but the error is only thrown to API Cognito Authorizer, I don’t understand…

Thank you all for your attention and help :slight_smile:

Hi guys!

Solved using Resolution of environment variables, ie, loading environment variables from .env files instead custom .json files.

Thanks anyway to everybody.