Not be able to use Fn::ImportValue or Ref in the Authorizer section of a File in *.YAML File
Description
Hi, It seems we found a bug. The scenario is as follows :
We defined a custom authorizer lambda function in a Cloudformation (stack A) and we exposed the ARN of the lambda function as an Output resource (Export name is "CustomAuthorizerDefaultFunction").
In the following Yml file which is located in a different Cloudformation stack (Stack B), we are going to Fn::ImportValue from cloudformation stack A. As we commented in the following Yaml file :
1- 'Fn::ImportValue': 'CustomAuthorizerDefaultFunction' works fine in the Resources-> Output section.
2- 'Fn::ImportValue': 'CustomAuthorizerDefaultFunction' does not work when we use it in Authorizer section of the function.
3- 'Fn::ImportValue': 'CustomAuthorizerDefaultFunction' works in the environment section of a function definition.
4- Also Besides 'Fn::ImportValue', Ref: AuthorizerArnImport does not work either.
Any thought ? If it is a known issue, any suggestions ?
Thanks
------------------------------------------------------ part of our Yml File----------------
service: usvc-dmp-rest
frameworkVersion: ">=1.0.0 <2.0.0"
plugins:
- serverless-offline
provider:
profile: serverless-admin
name: aws
runtime: nodejs4.3
memorySize: 128
resources:
Outputs:
AuthorizerArnImport:
Description: 'Authorizer Arn'
Value:
'Fn::ImportValue': 'CustomAuthorizerDefaultFunction'
functions:
myFunction:
handler: 'app/endpoints/myFunction/handler.myFunctionHandler'
environment:
MY_THING:
Works
'Fn::ImportValue': 'CustomAuthorizerDefaultFunction'
events:
- http:
path: aPath
method: get
authorizer:
Fails
arn:
Ref: AuthorizerArnImport
Works
arn: "arn:aws:lambda:us-east-1:xxxxxxx:function:CustomAuthorizer-DefaultFunction-1BT9PWQLLI7GI"
Fails?
arn:
'Fn::ImportValue': 'CustomAuthorizerDefaultFunction'
integration: lambda
request:
template:
application/json: ${self:custom.requestTemplate}
cors: ${self:custom.cors}
TypeError: functionArn.split is not a function
at Object.extractAuthorizerNameFromArn (C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\lib\plugins\aws\lib\naming.js:110:34)
at AwsCompileApigEvents.getAuthorizer (C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\lib\plugins\aws\deploy\compile\events\apiGateway\lib\validate.js:204:37)
at _.forEach (C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\lib\plugins\aws\deploy\compile\events\apiGateway\lib\validate.js:50:36)
at arrayEach (C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\node_modules\lodash\lodash.js:537:11)
at Function.forEach (C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\node_modules\lodash\lodash.js:9344:14)
at _.forEach (C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\lib\plugins\aws\deploy\compile\events\apiGateway\lib\validate.js:42:9)
at C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\node_modules\lodash\lodash.js:4970:15
at baseForOwn (C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\node_modules\lodash\lodash.js:3020:24)
at C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\node_modules\lodash\lodash.js:4939:18
at Function.forEach (C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\node_modules\lodash\lodash.js:9344:14)
at AwsCompileApigEvents.validate (C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\lib\plugins\aws\deploy\compile\events\apiGateway\lib\validate.js:41:7)
at deploy:compileEvents (C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\lib\plugins\aws\deploy\compile\events\apiGateway\index.js:42:31)
at BbPromise.reduce (C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\lib\classes\PluginManager.js:160:50)
at tryCatcher (C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\node_modules\bluebird\js\release\util.js:16:23)
at Object.gotValue (C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\node_modules\bluebird\js\release\reduce.js:157:18)
at Object.gotAccum (C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\node_modules\bluebird\js\release\reduce.js:144:25)
at Object.tryCatcher (C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\node_modules\bluebird\js\release\util.js:16:23)
at Promise._settlePromiseFromHandler (C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\node_modules\bluebird\js\release\promise.js:510:31)
at Promise._settlePromise (C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\node_modules\bluebird\js\release\promise.js:567:18)
at Promise._settlePromise0 (C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\node_modules\bluebird\js\release\promise.js:612:10)
at Promise._settlePromises (C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\node_modules\bluebird\js\release\promise.js:691:18)
at Async._drainQueue (C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\node_modules\bluebird\js\release\async.js:138:16)
at Async._drainQueues (C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\node_modules\bluebird\js\release\async.js:148:10)
at Immediate.Async.drainQueues (C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\node_modules\bluebird\js\release\async.js:17:14)
at runCallback (timers.js:649:20)
at tryOnImmediate (timers.js:622:5)
at processImmediate [as _immediateCallback] (timers.js:594:5)
Your Environment Information -----------------------------
OS: win32
Node Version: 6.9.3
Serverless Version: 1.5.0
Not be able to use Fn::ImportValue or Ref in the Authorizer section of a File in *.YAML File
Description
Hi, It seems we found a bug. The scenario is as follows :
We defined a custom authorizer lambda function in a Cloudformation (stack A) and we exposed the ARN of the lambda function as an Output resource (Export name is "CustomAuthorizerDefaultFunction").
In the following Yml file which is located in a different Cloudformation stack (Stack B), we are going to Fn::ImportValue from cloudformation stack A. As we commented in the following Yaml file :
1- 'Fn::ImportValue': 'CustomAuthorizerDefaultFunction' works fine in the Resources-> Output section.
2- 'Fn::ImportValue': 'CustomAuthorizerDefaultFunction' does not work when we use it in Authorizer section of the function.
3- 'Fn::ImportValue': 'CustomAuthorizerDefaultFunction' works in the environment section of a function definition.
4- Also Besides 'Fn::ImportValue', Ref: AuthorizerArnImport does not work either.
Any thought ? If it is a known issue, any suggestions ?
Thanks
------------------------------------------------------ part of our Yml File----------------
service: usvc-dmp-rest
frameworkVersion: ">=1.0.0 <2.0.0"
plugins:
provider:
profile: serverless-admin
name: aws
runtime: nodejs4.3
memorySize: 128
resources:
Outputs:
AuthorizerArnImport:
Description: 'Authorizer Arn'
Value:
'Fn::ImportValue': 'CustomAuthorizerDefaultFunction'
functions:
myFunction:
handler: 'app/endpoints/myFunction/handler.myFunctionHandler'
environment:
MY_THING:
Works
Fails
arn:
Ref: AuthorizerArnImport
Works
arn: "arn:aws:lambda:us-east-1:xxxxxxx:function:CustomAuthorizer-DefaultFunction-1BT9PWQLLI7GI"
Fails?
Serverless Framework Version you're using:
Stack Trace:
TypeError: functionArn.split is not a function
at Object.extractAuthorizerNameFromArn (C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\lib\plugins\aws\lib\naming.js:110:34)
at AwsCompileApigEvents.getAuthorizer (C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\lib\plugins\aws\deploy\compile\events\apiGateway\lib\validate.js:204:37)
at _.forEach (C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\lib\plugins\aws\deploy\compile\events\apiGateway\lib\validate.js:50:36)
at arrayEach (C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\node_modules\lodash\lodash.js:537:11)
at Function.forEach (C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\node_modules\lodash\lodash.js:9344:14)
at _.forEach (C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\lib\plugins\aws\deploy\compile\events\apiGateway\lib\validate.js:42:9)
at C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\node_modules\lodash\lodash.js:4970:15
at baseForOwn (C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\node_modules\lodash\lodash.js:3020:24)
at C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\node_modules\lodash\lodash.js:4939:18
at Function.forEach (C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\node_modules\lodash\lodash.js:9344:14)
at AwsCompileApigEvents.validate (C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\lib\plugins\aws\deploy\compile\events\apiGateway\lib\validate.js:41:7)
at deploy:compileEvents (C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\lib\plugins\aws\deploy\compile\events\apiGateway\index.js:42:31)
at BbPromise.reduce (C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\lib\classes\PluginManager.js:160:50)
at tryCatcher (C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\node_modules\bluebird\js\release\util.js:16:23)
at Object.gotValue (C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\node_modules\bluebird\js\release\reduce.js:157:18)
at Object.gotAccum (C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\node_modules\bluebird\js\release\reduce.js:144:25)
at Object.tryCatcher (C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\node_modules\bluebird\js\release\util.js:16:23)
at Promise._settlePromiseFromHandler (C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\node_modules\bluebird\js\release\promise.js:510:31)
at Promise._settlePromise (C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\node_modules\bluebird\js\release\promise.js:567:18)
at Promise._settlePromise0 (C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\node_modules\bluebird\js\release\promise.js:612:10)
at Promise._settlePromises (C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\node_modules\bluebird\js\release\promise.js:691:18)
at Async._drainQueue (C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\node_modules\bluebird\js\release\async.js:138:16)
at Async._drainQueues (C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\node_modules\bluebird\js\release\async.js:148:10)
at Immediate.Async.drainQueues (C:\Users\KamroozN\AppData\Roaming\npm\node_modules\serverless\node_modules\bluebird\js\release\async.js:17:14)
at runCallback (timers.js:649:20)
at tryOnImmediate (timers.js:622:5)
at processImmediate [as _immediateCallback] (timers.js:594:5)
Your Environment Information -----------------------------
OS: win32
Node Version: 6.9.3
Serverless Version: 1.5.0