From da423fd0ec5e75bc8778305d94dd9e362ac710fd Mon Sep 17 00:00:00 2001 From: Jamison French Date: Wed, 16 Aug 2023 13:28:55 -0500 Subject: [PATCH 1/3] feat: custom domain names for apis --- lib/ingestor-api/index.ts | 11 +++++++++++ lib/stac-api/index.ts | 10 +++++++++- lib/titiler-pgstac-api/index.ts | 11 +++++++++-- 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/lib/ingestor-api/index.ts b/lib/ingestor-api/index.ts index b3dec43..0d9ba30 100644 --- a/lib/ingestor-api/index.ts +++ b/lib/ingestor-api/index.ts @@ -191,6 +191,7 @@ export class StacIngestor extends Construct { stage: string; policy?: iam.PolicyDocument; endpointConfiguration?: apigateway.EndpointConfiguration; + ingestorDomainNameOptions?: apigateway.DomainNameOptions; }): apigateway.LambdaRestApi { return new apigateway.LambdaRestApi( this, @@ -205,6 +206,11 @@ export class StacIngestor extends Construct { endpointConfiguration: props.endpointConfiguration, policy: props.policy, + + domainName: props.ingestorDomainNameOptions ? { + domainName: props.ingestorDomainNameOptions.domainName, + certificate: props.ingestorDomainNameOptions.certificate, + } : undefined, } ); } @@ -277,4 +283,9 @@ export interface StacIngestorProps { * API Policy Document, useful for creating private APIs. */ readonly apiPolicy?: iam.PolicyDocument; + + /** + * Custom Domain Name Options for Ingestor API + */ + readonly ingestorDomainNameOptions?: apigateway.DomainNameOptions; } diff --git a/lib/stac-api/index.ts b/lib/stac-api/index.ts index b21e870..a6e5212 100644 --- a/lib/stac-api/index.ts +++ b/lib/stac-api/index.ts @@ -10,7 +10,7 @@ import { PythonFunction, PythonFunctionProps, } from "@aws-cdk/aws-lambda-python-alpha"; -import { HttpApi } from "@aws-cdk/aws-apigatewayv2-alpha"; +import { IDomainName, HttpApi } from "@aws-cdk/aws-apigatewayv2-alpha"; import { HttpLambdaIntegration } from "@aws-cdk/aws-apigatewayv2-integrations-alpha"; import { Construct } from "constructs"; @@ -58,6 +58,9 @@ export class PgStacApiLambda extends Construct { this.stacApiLambdaFunction.connections.allowTo(props.db, ec2.Port.tcp(5432)); const stacApi = new HttpApi(this, `${Stack.of(this).stackName}-stac-api`, { + defaultDomainMapping: props.stacApiDomainName ? { + domainName: props.stacApiDomainName + } : undefined, defaultIntegration: new HttpLambdaIntegration("integration", this.stacApiLambdaFunction), }); @@ -102,6 +105,11 @@ export interface PgStacApiLambdaProps { * Customized environment variables to send to fastapi-pgstac runtime. */ readonly apiEnv?: Record; + + /** + * Custom Domain Name Options for STAC API, + */ + readonly stacApiDomainName?: IDomainName; } export interface ApiEntrypoint { diff --git a/lib/titiler-pgstac-api/index.ts b/lib/titiler-pgstac-api/index.ts index de242ce..a64cbb3 100644 --- a/lib/titiler-pgstac-api/index.ts +++ b/lib/titiler-pgstac-api/index.ts @@ -9,7 +9,7 @@ import { Duration, aws_logs, } from "aws-cdk-lib"; - import { HttpApi } from "@aws-cdk/aws-apigatewayv2-alpha"; + import { IDomainName, HttpApi } from "@aws-cdk/aws-apigatewayv2-alpha"; import { HttpLambdaIntegration } from "@aws-cdk/aws-apigatewayv2-integrations-alpha"; import { Construct } from "constructs"; @@ -67,6 +67,9 @@ import { this.titilerPgstacLambdaFunction.connections.allowTo(props.db, ec2.Port.tcp(5432), "allow connections from titiler"); const stacApi = new HttpApi(this, `${Stack.of(this).stackName}-titiler-pgstac-api`, { + defaultDomainMapping: props.titilerPgstacApiDomainName ? { + domainName: props.titilerPgstacApiDomainName + } : undefined, defaultIntegration: new HttpLambdaIntegration("integration", this.titilerPgstacLambdaFunction), }); @@ -111,4 +114,8 @@ import { */ readonly buckets?: string[]; - } \ No newline at end of file + /** + * Custom Domain Name Options for Titiler Pgstac API, + */ + readonly titilerPgstacApiDomainName?: IDomainName; + } From 385fdc16e3af5ac3a59e5c510326eaa1a4f407eb Mon Sep 17 00:00:00 2001 From: emileten Date: Fri, 18 Aug 2023 11:06:09 +0200 Subject: [PATCH 2/3] import the titiler app AFTER setting up the postgres env vars in the titiler-pgstac handler --- lib/titiler-pgstac-api/runtime/src/handler.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/titiler-pgstac-api/runtime/src/handler.py b/lib/titiler-pgstac-api/runtime/src/handler.py index 34cf618..297b847 100644 --- a/lib/titiler-pgstac-api/runtime/src/handler.py +++ b/lib/titiler-pgstac-api/runtime/src/handler.py @@ -6,8 +6,6 @@ import os from mangum import Mangum from utils import get_secret_dict -from titiler.pgstac.main import app -from titiler.pgstac.db import connect_to_db pgstac_secret_arn = os.environ["PGSTAC_SECRET_ARN"] @@ -22,6 +20,11 @@ } ) +from titiler.pgstac.main import app +from titiler.pgstac.db import connect_to_db + + + @app.on_event("startup") async def startup_event() -> None: From d0b344c763601b414546e8e3b510ce919a6b14b9 Mon Sep 17 00:00:00 2001 From: emileten Date: Fri, 18 Aug 2023 11:06:44 +0200 Subject: [PATCH 3/3] add the missing ingestorDomainNameOptions parameter when calling the ingestor construct buildApiEndpoint method --- lib/ingestor-api/index.ts | 2 ++ lib/titiler-pgstac-api/runtime/src/handler.py | 6 ++---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/ingestor-api/index.ts b/lib/ingestor-api/index.ts index 0d9ba30..c2de4d8 100644 --- a/lib/ingestor-api/index.ts +++ b/lib/ingestor-api/index.ts @@ -62,6 +62,7 @@ export class StacIngestor extends Construct { stage: props.stage, endpointConfiguration: props.apiEndpointConfiguration, policy: props.apiPolicy, + ingestorDomainNameOptions: props.ingestorDomainNameOptions, }); this.buildIngestor({ @@ -193,6 +194,7 @@ export class StacIngestor extends Construct { endpointConfiguration?: apigateway.EndpointConfiguration; ingestorDomainNameOptions?: apigateway.DomainNameOptions; }): apigateway.LambdaRestApi { + return new apigateway.LambdaRestApi( this, `${Stack.of(this).stackName}-ingestor-api`, diff --git a/lib/titiler-pgstac-api/runtime/src/handler.py b/lib/titiler-pgstac-api/runtime/src/handler.py index 297b847..2b5a987 100644 --- a/lib/titiler-pgstac-api/runtime/src/handler.py +++ b/lib/titiler-pgstac-api/runtime/src/handler.py @@ -20,10 +20,8 @@ } ) -from titiler.pgstac.main import app -from titiler.pgstac.db import connect_to_db - - +from titiler.pgstac.main import app # noqa: E402 +from titiler.pgstac.db import connect_to_db # noqa: E402 @app.on_event("startup")