Reference Variable in JavaScript returned Resolved Promise Failing

This is a Bug Report

Description

Following the instruction from: Serverless Variables

Implemented the returned Promise (async); however, an error is thrown whereas the same function works if just a string is returned.

Logging from getValueFromSource shows that each time a Promise is returned there are additional calls for AWS variables that didn't exist when just a string was returned:

variable AWS::Partition property arn:${AWS::Partition}:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/lambda/undefined:*
variable AWS::Region property arn:${AWS::Partition}:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/lambda/undefined:*
variable AWS::AccountId property arn:${AWS::Partition}:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/lambda/undefined:*
variable AWS::Partition property arn:${AWS::Partition}:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/lambda/undefined:*:*
variable AWS::Region property arn:${AWS::Partition}:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/lambda/undefined:*:*
variable AWS::AccountId property arn:${AWS::Partition}:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/lambda/undefined:*:*

Additionally, several of the _fulfillmentHandler0 properties of getValueFromFile results have various errors the first being the one reported below.

function.js

module.exports.FN = () => {
    const val = "value";
    //return val;
    return Promise.resolve(val);
};

serverless.yml

service: example
frameworkVersion: ">=1.28.0 <2.0.0"
provider:
  name: aws
  runtime: go1.x
environment:
  FN: ${self:custom.FN}
package:
 exclude:
   - ./**
 include:
   - ./bin/**
functions:
   read:
     handler: bin/read
plugins:
  - serverless-sam
custom:
  stage: ${opt:stage, self:provider.stage}
  FN: ${file(function.js):FN}

Similar or dependent issues:

Additional Data

  • Serverless Framework Version you're using: 1.40.0
  • Operating System: Ubuntu 18.04.2 LTS
  • Stack Trace:
ServerlessError: Invalid variable reference syntax for variable AWS::Partition. You can only reference env vars, options, & files. You can check our docs for more info.
    at Variables.getValueFromSource (/home/gregl83/n/lib/node_modules/serverless/lib/classes/Variables.js:546:32)
    at Variables.splitAndGet (/home/gregl83/n/lib/node_modules/serverless/lib/classes/Variables.js:397:17)
    at _.map (/home/gregl83/n/lib/node_modules/serverless/lib/classes/Variables.js:334:43)
    at arrayMap (/home/gregl83/n/lib/node_modules/serverless/node_modules/lodash/lodash.js:639:23)
    at Function.map (/home/gregl83/n/lib/node_modules/serverless/node_modules/lodash/lodash.js:9556:14)
    at Variables.populateMatches (/home/gregl83/n/lib/node_modules/serverless/lib/classes/Variables.js:334:14)
    at Variables.populateValue (/home/gregl83/n/lib/node_modules/serverless/lib/classes/Variables.js:365:30)
    at _.map.variable (/home/gregl83/n/lib/node_modules/serverless/lib/classes/Variables.js:249:24)
    at arrayMap (/home/gregl83/n/lib/node_modules/serverless/node_modules/lodash/lodash.js:639:23)
    at Function.map (/home/gregl83/n/lib/node_modules/serverless/node_modules/lodash/lodash.js:9556:14)
    at Variables.populateVariables (/home/gregl83/n/lib/node_modules/serverless/lib/classes/Variables.js:248:14)
    at Variables.populateObjectImpl (/home/gregl83/n/lib/node_modules/serverless/lib/classes/Variables.js:277:30)
    at assignProperties.then (/home/gregl83/n/lib/node_modules/serverless/lib/classes/Variables.js:282:24)
From previous event:
    at Variables.populateObjectImpl (/home/gregl83/n/lib/node_modules/serverless/lib/classes/Variables.js:282:8)
    at prepopulateService.then (/home/gregl83/n/lib/node_modules/serverless/lib/classes/Variables.js:161:26)
From previous event:
    at initialCall (/home/gregl83/n/lib/node_modules/serverless/lib/classes/Variables.js:161:10)
    at Variables.initialCall (/home/gregl83/n/lib/node_modules/serverless/lib/classes/Variables.js:67:12)
    at Variables.populateService (/home/gregl83/n/lib/node_modules/serverless/lib/classes/Variables.js:159:17)
    at SamPlugin.prepareTemplate (/home/gregl83/Code/go/src/github.com/gregl83/serverless-template-build/node_modules/serverless-sam/index.js:153:31)
    at runCallback (timers.js:705:18)
    at tryOnImmediate (timers.js:676:5)
    at processImmediate (timers.js:658:5)
    at process.topLevelDomainCallback (domain.js:120:23)
  • Provider Error messages:
    Invalid variable reference syntax for variable AWS::Partition. You can only reference env vars, options, & files. You can check our docs for more info.