From af2eda9cf30390475fda415ac14c45213d17de6e Mon Sep 17 00:00:00 2001 From: Kyle Roach Date: Sun, 25 Oct 2020 00:10:18 -0400 Subject: [PATCH 1/6] feat(apigatewayv2): Export apiEndpoint fixes #10651 --- packages/@aws-cdk/aws-apigatewayv2/lib/http/api.ts | 7 +++++++ packages/@aws-cdk/aws-apigatewayv2/package.json | 3 +-- packages/@aws-cdk/aws-apigatewayv2/test/http/api.test.ts | 7 +++++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/packages/@aws-cdk/aws-apigatewayv2/lib/http/api.ts b/packages/@aws-cdk/aws-apigatewayv2/lib/http/api.ts index ff75808b5a8d6..49aac2ecb77c0 100644 --- a/packages/@aws-cdk/aws-apigatewayv2/lib/http/api.ts +++ b/packages/@aws-cdk/aws-apigatewayv2/lib/http/api.ts @@ -235,6 +235,12 @@ export class HttpApi extends HttpApiBase { public readonly httpApiId: string; + /** + * The default endpoint for an API + * @attribute + */ + public readonly apiEndpoint: string; + /** * default stage of the api resource */ @@ -278,6 +284,7 @@ export class HttpApi extends HttpApiBase { const resource = new CfnApi(this, 'Resource', apiProps); this.httpApiId = resource.ref; + this.apiEndpoint = resource.attrApiEndpoint; if (props?.defaultIntegration) { new HttpRoute(this, 'DefaultRoute', { diff --git a/packages/@aws-cdk/aws-apigatewayv2/package.json b/packages/@aws-cdk/aws-apigatewayv2/package.json index 7c079b71baab1..e24b88f34fe1b 100644 --- a/packages/@aws-cdk/aws-apigatewayv2/package.json +++ b/packages/@aws-cdk/aws-apigatewayv2/package.json @@ -106,8 +106,7 @@ "props-physical-name-type:@aws-cdk/aws-apigatewayv2.HttpStageProps.stageName", "props-physical-name:@aws-cdk/aws-apigatewayv2.HttpApiMappingProps", "props-physical-name:@aws-cdk/aws-apigatewayv2.HttpIntegrationProps", - "props-physical-name:@aws-cdk/aws-apigatewayv2.HttpRouteProps", - "resource-attribute:@aws-cdk/aws-apigatewayv2.HttpApi.apiEndpoint" + "props-physical-name:@aws-cdk/aws-apigatewayv2.HttpRouteProps" ] }, "stability": "experimental", diff --git a/packages/@aws-cdk/aws-apigatewayv2/test/http/api.test.ts b/packages/@aws-cdk/aws-apigatewayv2/test/http/api.test.ts index 13ee4e120945d..d3a8a221eba53 100644 --- a/packages/@aws-cdk/aws-apigatewayv2/test/http/api.test.ts +++ b/packages/@aws-cdk/aws-apigatewayv2/test/http/api.test.ts @@ -233,4 +233,11 @@ describe('HttpApi', () => { Description: 'My Api', }); }); + + test('apiEndpoint is exported', () => { + const stack = new Stack(); + const api = new HttpApi(stack, 'api'); + + expect(typeof api.apiEndpoint).toBe('string'); + }); }); From f25baf5a64d2eb4c25ae28eb89db4883e6d17aba Mon Sep 17 00:00:00 2001 From: Kyle Roach Date: Sun, 25 Oct 2020 00:15:25 -0400 Subject: [PATCH 2/6] docs: Add example of apiEndpoint --- packages/@aws-cdk/aws-apigatewayv2/README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/@aws-cdk/aws-apigatewayv2/README.md b/packages/@aws-cdk/aws-apigatewayv2/README.md index e5cf86886aa3d..c2ae8f16f3f78 100644 --- a/packages/@aws-cdk/aws-apigatewayv2/README.md +++ b/packages/@aws-cdk/aws-apigatewayv2/README.md @@ -79,6 +79,11 @@ httpApi.addRoutes({ methods: [ HttpMethod.ANY ], integration: booksDefaultIntegration, }); + +new CfnOutput(stack, 'my-api-url, { + exportName: 'ApiUrl', + value: httpApi.apiEndpoint, +}); ``` The `defaultIntegration` option while defining HTTP APIs lets you create a default catch-all integration that is From 700185f8c84fd3874a7916e68ae77eb04a34aa87 Mon Sep 17 00:00:00 2001 From: Kyle Roach Date: Mon, 26 Oct 2020 11:07:51 -0400 Subject: [PATCH 3/6] Fix typo in docs --- packages/@aws-cdk/aws-apigatewayv2/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/@aws-cdk/aws-apigatewayv2/README.md b/packages/@aws-cdk/aws-apigatewayv2/README.md index c2ae8f16f3f78..d847481b01908 100644 --- a/packages/@aws-cdk/aws-apigatewayv2/README.md +++ b/packages/@aws-cdk/aws-apigatewayv2/README.md @@ -80,7 +80,7 @@ httpApi.addRoutes({ integration: booksDefaultIntegration, }); -new CfnOutput(stack, 'my-api-url, { +new CfnOutput(stack, 'my-api-url', { exportName: 'ApiUrl', value: httpApi.apiEndpoint, }); From a19d86463f54a6195bb66e76acca09e9dee73fab Mon Sep 17 00:00:00 2001 From: Kyle Roach Date: Wed, 28 Oct 2020 16:44:19 +0000 Subject: [PATCH 4/6] Update packages/@aws-cdk/aws-apigatewayv2/test/http/api.test.ts Co-authored-by: Niranjan Jayakar --- packages/@aws-cdk/aws-apigatewayv2/test/http/api.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/@aws-cdk/aws-apigatewayv2/test/http/api.test.ts b/packages/@aws-cdk/aws-apigatewayv2/test/http/api.test.ts index d3a8a221eba53..b1ea1dd4b7aee 100644 --- a/packages/@aws-cdk/aws-apigatewayv2/test/http/api.test.ts +++ b/packages/@aws-cdk/aws-apigatewayv2/test/http/api.test.ts @@ -238,6 +238,6 @@ describe('HttpApi', () => { const stack = new Stack(); const api = new HttpApi(stack, 'api'); - expect(typeof api.apiEndpoint).toBe('string'); + expect(api.apiEndpoint).toBeDefined(); }); }); From 8e7ba5e8e99274703b65fe0b50611b7bd27eb7ed Mon Sep 17 00:00:00 2001 From: Kyle Roach Date: Wed, 28 Oct 2020 12:49:26 -0400 Subject: [PATCH 5/6] Updated apiEndpoint example Co-authored-by: Niranjan Jayakar --- packages/@aws-cdk/aws-apigatewayv2/README.md | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/packages/@aws-cdk/aws-apigatewayv2/README.md b/packages/@aws-cdk/aws-apigatewayv2/README.md index d847481b01908..dddd6cebcfc09 100644 --- a/packages/@aws-cdk/aws-apigatewayv2/README.md +++ b/packages/@aws-cdk/aws-apigatewayv2/README.md @@ -57,6 +57,8 @@ integrations](https://docs.aws.amazon.com/apigateway/latest/developerguide/http- The code snippet below configures a route `GET /books` with an HTTP proxy integration and uses the `ANY` method to proxy all other HTTP method calls to `/books` to a lambda proxy. +The URL to the endpoint can be retrieved via the `apiEndpoint` attribute. + ```ts const getBooksIntegration = new HttpProxyIntegration({ url: 'https://get-books-proxy.myproxy.internal', @@ -79,11 +81,6 @@ httpApi.addRoutes({ methods: [ HttpMethod.ANY ], integration: booksDefaultIntegration, }); - -new CfnOutput(stack, 'my-api-url', { - exportName: 'ApiUrl', - value: httpApi.apiEndpoint, -}); ``` The `defaultIntegration` option while defining HTTP APIs lets you create a default catch-all integration that is From c9ca1545127edc4d8b53eec242c7cce58f1ae151 Mon Sep 17 00:00:00 2001 From: Kyle Roach Date: Fri, 30 Oct 2020 11:37:43 -0400 Subject: [PATCH 6/6] nit --- packages/@aws-cdk/aws-apigatewayv2/test/http/api.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/@aws-cdk/aws-apigatewayv2/test/http/api.test.ts b/packages/@aws-cdk/aws-apigatewayv2/test/http/api.test.ts index 28fe946aaff15..96c747985be04 100644 --- a/packages/@aws-cdk/aws-apigatewayv2/test/http/api.test.ts +++ b/packages/@aws-cdk/aws-apigatewayv2/test/http/api.test.ts @@ -273,7 +273,7 @@ describe('HttpApi', () => { Name: 'Link-2', }); }); - + test('apiEndpoint is exported', () => { const stack = new Stack(); const api = new HttpApi(stack, 'api');