From ef5a8faf13a8fbf8564e7c0621e88d1ea5357ea5 Mon Sep 17 00:00:00 2001 From: Thiago Moraes Date: Wed, 18 Aug 2021 17:36:00 -0300 Subject: [PATCH] feat(AWS HTTP API): Support `shouldStartNameWithService` option (#9758) --- docs/providers/aws/events/http-api.md | 10 ++++++++ lib/plugins/aws/lib/naming.js | 5 +++- lib/plugins/aws/provider.js | 1 + test/unit/lib/plugins/aws/lib/naming.test.js | 24 ++++++++++++++++++++ 4 files changed, 39 insertions(+), 1 deletion(-) diff --git a/docs/providers/aws/events/http-api.md b/docs/providers/aws/events/http-api.md index 0d24ccae3..7d52ae352 100644 --- a/docs/providers/aws/events/http-api.md +++ b/docs/providers/aws/events/http-api.md @@ -443,3 +443,13 @@ provider: httpApi: disableDefaultEndpoint: true ``` + +### Service Naming + +You can use the `shouldStartNameWithService` option to change the naming scheme for HTTP API from the default `${stage}-${service}` to `${service}-${stage}`. + +```yml +provider: + httpApi: + shouldStartNameWithService: true +``` diff --git a/lib/plugins/aws/lib/naming.js b/lib/plugins/aws/lib/naming.js index 0df5f9dec..f820de996 100644 --- a/lib/plugins/aws/lib/naming.js +++ b/lib/plugins/aws/lib/naming.js @@ -652,7 +652,10 @@ module.exports = { ) { return `${String(this.provider.serverless.service.provider.httpApi.name)}`; } - return `${this.provider.getStage()}-${this.provider.serverless.service.service}`; + + return _.get(this.provider.serverless.service.provider.httpApi, 'shouldStartNameWithService') + ? `${this.provider.serverless.service.service}-${this.provider.getStage()}` + : `${this.provider.getStage()}-${this.provider.serverless.service.service}`; }, getHttpApiLogicalId() { return 'HttpApi'; diff --git a/lib/plugins/aws/provider.js b/lib/plugins/aws/provider.js index 884596ba4..72b408238 100644 --- a/lib/plugins/aws/provider.js +++ b/lib/plugins/aws/provider.js @@ -912,6 +912,7 @@ class AwsProvider { metrics: { type: 'boolean' }, useProviderTags: { const: true }, disableDefaultEndpoint: { type: 'boolean' }, + shouldStartNameWithService: { const: true }, }, additionalProperties: false, }, diff --git a/test/unit/lib/plugins/aws/lib/naming.test.js b/test/unit/lib/plugins/aws/lib/naming.test.js index 9b874e717..7fa3f1f65 100644 --- a/test/unit/lib/plugins/aws/lib/naming.test.js +++ b/test/unit/lib/plugins/aws/lib/naming.test.js @@ -1025,4 +1025,28 @@ describe('#naming()', () => { ); }); }); + + describe('#getHttpApiName()', () => { + it('should return the composition of service & stage name if custom name not provided and shouldStartNameWithService is true', () => { + serverless.service.service = 'myService'; + serverless.service.provider.httpApi = { shouldStartNameWithService: true }; + expect(sdk.naming.getHttpApiName()).to.equal( + `${serverless.service.service}-${sdk.naming.provider.getStage()}` + ); + }); + + it('should return the composition of stage & service name if custom name not provided', () => { + serverless.service.service = 'myService'; + expect(sdk.naming.getHttpApiName()).to.equal( + `${sdk.naming.provider.getStage()}-${serverless.service.service}` + ); + }); + + it('should return the custom api name if provided', () => { + serverless.service.provider.httpApi = { name: 'app-dev-testApi' }; + serverless.service.service = 'myService'; + serverless.service.provider.stage = sdk.naming.provider.getStage(); + expect(sdk.naming.getHttpApiName()).to.equal('app-dev-testApi'); + }); + }); });