From 8662f8fcf76fd47a2b2594e5bbe056dc10ceb371 Mon Sep 17 00:00:00 2001 From: Kieren Eaton Date: Thu, 11 Jul 2024 13:33:29 +0800 Subject: [PATCH 1/3] Add get service endpoint function --- src/globals.ts | 6 ++++++ src/types.ts | 3 ++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/globals.ts b/src/globals.ts index 880ef225..1825ee67 100644 --- a/src/globals.ts +++ b/src/globals.ts @@ -67,6 +67,12 @@ export default class Globals { return Globals.options.stage || Globals.serverless.service.provider.stage; } + public static getServiceEndpoint (service: string) { + if (!Globals.serverless.providers.aws.sdk) return null; + const config = Globals.serverless.providers.aws.sdk.config; + return config[service].endpoint || null; + } + public static getRegion () { const slsRegion = Globals.options.region || Globals.serverless.service.provider.region; return slsRegion || Globals.currentRegion || Globals.defaultRegion; diff --git a/src/types.ts b/src/types.ts index b5c0ae8c..57e594a8 100644 --- a/src/types.ts +++ b/src/types.ts @@ -60,7 +60,8 @@ export interface ServerlessInstance { }; providers: { aws: { - getCredentials (), + getCredentials (): any, + sdk: any }, }; cli: { From 3ff604a9a4ad03b0ec2dc6a161039ec69cfb986f Mon Sep 17 00:00:00 2001 From: Kieren Eaton Date: Thu, 11 Jul 2024 13:34:12 +0800 Subject: [PATCH 2/3] get service endpoint in wrappers --- src/aws/acm-wrapper.ts | 3 ++- src/aws/api-gateway-v1-wrapper.ts | 4 +++- src/aws/api-gateway-v2-wrapper.ts | 3 ++- src/aws/cloud-formation-wrapper.ts | 3 ++- src/aws/route53-wrapper.ts | 9 ++++++--- src/aws/s3-wrapper.ts | 3 ++- 6 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/aws/acm-wrapper.ts b/src/aws/acm-wrapper.ts index 70509125..851724f8 100644 --- a/src/aws/acm-wrapper.ts +++ b/src/aws/acm-wrapper.ts @@ -26,7 +26,8 @@ class ACMWrapper { credentials, region: isEdge ? Globals.defaultRegion : Globals.getRegion(), retryStrategy: Globals.getRetryStrategy(), - requestHandler: Globals.getRequestHandler() + requestHandler: Globals.getRequestHandler(), + endpoint: Globals.getServiceEndpoint("acm") }); } diff --git a/src/aws/api-gateway-v1-wrapper.ts b/src/aws/api-gateway-v1-wrapper.ts index 5d1dd749..0f9e2b7f 100644 --- a/src/aws/api-gateway-v1-wrapper.ts +++ b/src/aws/api-gateway-v1-wrapper.ts @@ -27,13 +27,15 @@ import { getAWSPagedResults } from "../utils"; class APIGatewayV1Wrapper extends APIGatewayBase { public readonly apiGateway: APIGatewayClient; + constructor (credentials?: any) { super(); this.apiGateway = new APIGatewayClient({ credentials, region: Globals.getRegion(), retryStrategy: Globals.getRetryStrategy(), - requestHandler: Globals.getRequestHandler() + requestHandler: Globals.getRequestHandler(), + endpoint: Globals.getServiceEndpoint("apigateway") }); } diff --git a/src/aws/api-gateway-v2-wrapper.ts b/src/aws/api-gateway-v2-wrapper.ts index d1b64805..ee7f2c3a 100644 --- a/src/aws/api-gateway-v2-wrapper.ts +++ b/src/aws/api-gateway-v2-wrapper.ts @@ -33,7 +33,8 @@ class APIGatewayV2Wrapper extends APIGatewayBase { credentials, region: Globals.getRegion(), retryStrategy: Globals.getRetryStrategy(), - requestHandler: Globals.getRequestHandler() + requestHandler: Globals.getRequestHandler(), + endpoint: Globals.getServiceEndpoint("apigatewayv2") }); } diff --git a/src/aws/cloud-formation-wrapper.ts b/src/aws/cloud-formation-wrapper.ts index bd5cc115..cb03d4bc 100644 --- a/src/aws/cloud-formation-wrapper.ts +++ b/src/aws/cloud-formation-wrapper.ts @@ -31,7 +31,8 @@ class CloudFormationWrapper { credentials, region: Globals.getRegion(), retryStrategy: Globals.getRetryStrategy(), - requestHandler: Globals.getRequestHandler() + requestHandler: Globals.getRequestHandler(), + endpoint: Globals.getServiceEndpoint("cloudformation") }); } diff --git a/src/aws/route53-wrapper.ts b/src/aws/route53-wrapper.ts index 0807a0bb..23e3b41d 100644 --- a/src/aws/route53-wrapper.ts +++ b/src/aws/route53-wrapper.ts @@ -17,20 +17,23 @@ class Route53Wrapper { constructor (credentials?: any, region?: string) { // not null and not undefined + const serviceEndpoint = Globals.getServiceEndpoint("route53"); if (credentials) { this.region = region || Globals.getRegion(); this.route53 = new Route53Client({ credentials, region: this.region, retryStrategy: Globals.getRetryStrategy(), - requestHandler: Globals.getRequestHandler() + requestHandler: Globals.getRequestHandler(), + endpoint: serviceEndpoint }); } else { this.region = Globals.getRegion(); this.route53 = new Route53Client({ region: this.region, retryStrategy: Globals.getRetryStrategy(), - requestHandler: Globals.getRequestHandler() + requestHandler: Globals.getRequestHandler(), + endpoint: serviceEndpoint }); } } @@ -59,7 +62,7 @@ class Route53Wrapper { "NextMarker", new ListHostedZonesCommand({}) ); - Logging.logInfo(`Founded hosted zones list: ${hostedZones.map((zone) => zone.Name)}.`); + Logging.logInfo(`Found hosted zones list: ${hostedZones.map((zone) => zone.Name)}.`); } catch (err) { throw new Error(`Unable to list hosted zones in Route53.\n${err.message}`); } diff --git a/src/aws/s3-wrapper.ts b/src/aws/s3-wrapper.ts index 4ec39023..8e5c7daf 100644 --- a/src/aws/s3-wrapper.ts +++ b/src/aws/s3-wrapper.ts @@ -10,7 +10,8 @@ class S3Wrapper { this.s3 = new S3Client({ credentials, region: Globals.getRegion(), - requestHandler: Globals.getRequestHandler() + requestHandler: Globals.getRequestHandler(), + endpoint: Globals.getServiceEndpoint("s3") }); } From e0f283bc4709ed70f78ca0cad6187dd206b5ec3d Mon Sep 17 00:00:00 2001 From: Kieren Eaton Date: Fri, 12 Jul 2024 11:24:50 +0800 Subject: [PATCH 3/3] Reworked endpoint logic for readability --- src/globals.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/globals.ts b/src/globals.ts index 1825ee67..daae332c 100644 --- a/src/globals.ts +++ b/src/globals.ts @@ -68,9 +68,11 @@ export default class Globals { } public static getServiceEndpoint (service: string) { - if (!Globals.serverless.providers.aws.sdk) return null; - const config = Globals.serverless.providers.aws.sdk.config; - return config[service].endpoint || null; + if (Globals.serverless.providers.aws.sdk) { + const serviceConf = Globals.serverless.providers.aws.sdk.config[service]; + return serviceConf.endpoint || null; + } + return null; } public static getRegion () {