diff --git a/lib/plugins/aws/package/compile/functions.js b/lib/plugins/aws/package/compile/functions.js index 0a5c7f187..b397aea70 100644 --- a/lib/plugins/aws/package/compile/functions.js +++ b/lib/plugins/aws/package/compile/functions.js @@ -659,6 +659,7 @@ class AwsCompileFunctions { AuthType: auth, TargetFunctionArn: resolveLambdaTarget(functionName, functionObject), }, + DependsOn: _.get(functionObject.targetAlias, 'logicalId'), }; if (cors) { @@ -690,6 +691,7 @@ class AwsCompileFunctions { Principal: '*', FunctionUrlAuthType: auth, }, + DependsOn: _.get(functionObject.targetAlias, 'logicalId'), }; } } diff --git a/test/unit/lib/plugins/aws/package/compile/functions.test.js b/test/unit/lib/plugins/aws/package/compile/functions.test.js index a83dfe96e..f24b43a2a 100644 --- a/test/unit/lib/plugins/aws/package/compile/functions.test.js +++ b/test/unit/lib/plugins/aws/package/compile/functions.test.js @@ -1677,6 +1677,11 @@ describe('lib/plugins/aws/package/compile/functions/index.test.js', () => { }, }, }, + fnUrlWithProvisioned: { + handler: 'target.handler', + url: true, + provisionedConcurrency: 1, + }, }, resources: { Resources: { @@ -1900,6 +1905,42 @@ describe('lib/plugins/aws/package/compile/functions/index.test.js', () => { }); }); + it('should support `functions[].url` set to `true` with provisionedConcurrency set', () => { + expect( + cfResources[naming.getLambdaFunctionUrlLogicalId('fnUrlWithProvisioned')].Properties + ).to.deep.equal({ + AuthType: 'NONE', + TargetFunctionArn: { + 'Fn::Join': [ + ':', + [ + { + 'Fn::GetAtt': ['FnUrlWithProvisionedLambdaFunction', 'Arn'], + }, + 'provisioned', + ], + ], + }, + }); + expect( + cfResources[naming.getLambdaFunctionUrlLogicalId('fnUrlWithProvisioned')].DependsOn + ).to.equal('FnUrlWithProvisionedProvConcLambdaAlias'); + + expect( + cfResources[naming.getLambdaFnUrlPermissionLogicalId('fnUrl')].Properties + ).to.deep.equal({ + Action: 'lambda:InvokeFunctionUrl', + FunctionName: { + 'Fn::GetAtt': ['FnUrlLambdaFunction', 'Arn'], + }, + FunctionUrlAuthType: 'NONE', + Principal: '*', + }); + expect( + cfResources[naming.getLambdaFnUrlPermissionLogicalId('fnUrlWithProvisioned')].DependsOn + ).to.equal('FnUrlWithProvisionedProvConcLambdaAlias'); + }); + it('should support `functions[].url` set to an object with authorizer and cors', () => { expect( cfResources[naming.getLambdaFunctionUrlLogicalId('fnUrlWithAuthAndCors')].Properties