From 3584aeba7a4ad0b51bb8130ab3230905b1ce7680 Mon Sep 17 00:00:00 2001 From: HBobertz Date: Wed, 22 Jan 2025 19:20:25 -0500 Subject: [PATCH 1/2] validation errors for apigwv2-integrations --- packages/aws-cdk-lib/.eslintrc.js | 1 + .../aws-apigatewayv2-integrations/lib/http/alb.ts | 3 ++- .../aws-apigatewayv2-integrations/lib/http/nlb.ts | 3 ++- .../lib/http/service-discovery.ts | 5 +++-- .../aws-apigatewayv2-integrations/lib/http/stepfunctions.ts | 5 +++-- 5 files changed, 11 insertions(+), 6 deletions(-) diff --git a/packages/aws-cdk-lib/.eslintrc.js b/packages/aws-cdk-lib/.eslintrc.js index a54c29ef2583d..110d8b6e55785 100644 --- a/packages/aws-cdk-lib/.eslintrc.js +++ b/packages/aws-cdk-lib/.eslintrc.js @@ -25,6 +25,7 @@ const enableNoThrowDefaultErrorIn = [ 'aws-ssmcontacts', 'aws-ssmincidents', 'aws-ssmquicksetup', + 'aws-apigatewayv2-integrations', ]; baseConfig.overrides.push({ files: enableNoThrowDefaultErrorIn.map(m => `./${m}/lib/**`), diff --git a/packages/aws-cdk-lib/aws-apigatewayv2-integrations/lib/http/alb.ts b/packages/aws-cdk-lib/aws-apigatewayv2-integrations/lib/http/alb.ts index 6fa071849cd4f..cd333700ad2dd 100644 --- a/packages/aws-cdk-lib/aws-apigatewayv2-integrations/lib/http/alb.ts +++ b/packages/aws-cdk-lib/aws-apigatewayv2-integrations/lib/http/alb.ts @@ -3,6 +3,7 @@ import { HttpPrivateIntegration } from './private/integration'; import { HttpRouteIntegrationBindOptions, HttpRouteIntegrationConfig } from '../../../aws-apigatewayv2'; import * as ec2 from '../../../aws-ec2'; import * as elbv2 from '../../../aws-elasticloadbalancingv2'; +import { ValidationError } from '../../../core/lib/errors'; /** * Properties to initialize `HttpAlbIntegration`. @@ -33,7 +34,7 @@ export class HttpAlbIntegration extends HttpPrivateIntegration { vpc = this.listener.loadBalancer.vpc; } if (!vpc) { - throw new Error('The vpcLink property must be specified when using an imported Application Listener.'); + throw new ValidationError('The vpcLink property must be specified when using an imported Application Listener.', options.scope); } const vpcLink = this._configureVpcLink(options, { diff --git a/packages/aws-cdk-lib/aws-apigatewayv2-integrations/lib/http/nlb.ts b/packages/aws-cdk-lib/aws-apigatewayv2-integrations/lib/http/nlb.ts index 5015e8622bec1..3fe195ef7f511 100644 --- a/packages/aws-cdk-lib/aws-apigatewayv2-integrations/lib/http/nlb.ts +++ b/packages/aws-cdk-lib/aws-apigatewayv2-integrations/lib/http/nlb.ts @@ -3,6 +3,7 @@ import { HttpPrivateIntegration } from './private/integration'; import { HttpRouteIntegrationBindOptions, HttpRouteIntegrationConfig } from '../../../aws-apigatewayv2'; import * as ec2 from '../../../aws-ec2'; import * as elbv2 from '../../../aws-elasticloadbalancingv2'; +import { ValidationError } from '../../../core/lib/errors'; /** * Properties to initialize `HttpNlbIntegration`. @@ -33,7 +34,7 @@ export class HttpNlbIntegration extends HttpPrivateIntegration { vpc = this.listener.loadBalancer.vpc; } if (!vpc) { - throw new Error('The vpcLink property must be specified when using an imported Network Listener.'); + throw new ValidationError('The vpcLink property must be specified when using an imported Network Listener.', options.scope); } const vpcLink = this._configureVpcLink(options, { diff --git a/packages/aws-cdk-lib/aws-apigatewayv2-integrations/lib/http/service-discovery.ts b/packages/aws-cdk-lib/aws-apigatewayv2-integrations/lib/http/service-discovery.ts index 4aa9f87900e2c..18be36c883545 100644 --- a/packages/aws-cdk-lib/aws-apigatewayv2-integrations/lib/http/service-discovery.ts +++ b/packages/aws-cdk-lib/aws-apigatewayv2-integrations/lib/http/service-discovery.ts @@ -2,6 +2,7 @@ import { HttpPrivateIntegrationOptions } from './base-types'; import { HttpPrivateIntegration } from './private/integration'; import { HttpRouteIntegrationBindOptions, HttpRouteIntegrationConfig } from '../../../aws-apigatewayv2'; import * as servicediscovery from '../../../aws-servicediscovery'; +import { ValidationError } from '../../../core/lib/errors'; /** * Properties to initialize `HttpServiceDiscoveryIntegration`. @@ -26,9 +27,9 @@ export class HttpServiceDiscoveryIntegration extends HttpPrivateIntegration { super(id); } - public bind(_options: HttpRouteIntegrationBindOptions): HttpRouteIntegrationConfig { + public bind(options: HttpRouteIntegrationBindOptions): HttpRouteIntegrationConfig { if (!this.props.vpcLink) { - throw new Error('The vpcLink property is mandatory'); + throw new ValidationError('The vpcLink property is mandatory', options.scope); } return { diff --git a/packages/aws-cdk-lib/aws-apigatewayv2-integrations/lib/http/stepfunctions.ts b/packages/aws-cdk-lib/aws-apigatewayv2-integrations/lib/http/stepfunctions.ts index 4229bda171232..780d984294612 100644 --- a/packages/aws-cdk-lib/aws-apigatewayv2-integrations/lib/http/stepfunctions.ts +++ b/packages/aws-cdk-lib/aws-apigatewayv2-integrations/lib/http/stepfunctions.ts @@ -1,6 +1,7 @@ import * as apigwv2 from '../../../aws-apigatewayv2'; import * as iam from '../../../aws-iam'; import * as sfn from '../../../aws-stepfunctions'; +import { ValidationError } from '../../../core/lib/errors'; /** * Properties to initialize `HttpStepFunctionsIntegration`. @@ -51,13 +52,13 @@ export class HttpStepFunctionsIntegration extends apigwv2.HttpRouteIntegration { public bind(options: apigwv2.HttpRouteIntegrationBindOptions): apigwv2.HttpRouteIntegrationConfig { if (this.props.subtype && !this.props.subtype.startsWith('StepFunctions-')) { - throw new Error('Subtype must start with `STEPFUNCTIONS_`'); + throw new ValidationError('Subtype must start with `STEPFUNCTIONS_`', options.scope); } if ( this.props.subtype === apigwv2.HttpIntegrationSubtype.STEPFUNCTIONS_START_SYNC_EXECUTION && this.props.stateMachine.stateMachineType === sfn.StateMachineType.STANDARD ) { - throw new Error('Cannot use subtype `STEPFUNCTIONS_START_SYNC_EXECUTION` with a standard type state machine'); + throw new ValidationError('Cannot use subtype `STEPFUNCTIONS_START_SYNC_EXECUTION` with a standard type state machine', options.scope); } const invokeRole = new iam.Role(options.scope, 'InvokeRole', { From f318eb7897f9a636730b1e68bae959632b04cbcf Mon Sep 17 00:00:00 2001 From: HBobertz Date: Wed, 22 Jan 2025 19:36:50 -0500 Subject: [PATCH 2/2] replace error --- .../lib/http/private/integration.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/aws-cdk-lib/aws-apigatewayv2-integrations/lib/http/private/integration.ts b/packages/aws-cdk-lib/aws-apigatewayv2-integrations/lib/http/private/integration.ts index d21d1b07a7b44..f1d4f01fabe5f 100644 --- a/packages/aws-cdk-lib/aws-apigatewayv2-integrations/lib/http/private/integration.ts +++ b/packages/aws-cdk-lib/aws-apigatewayv2-integrations/lib/http/private/integration.ts @@ -9,6 +9,7 @@ import { IVpcLink, } from '../../../../aws-apigatewayv2'; import * as ec2 from '../../../../aws-ec2'; +import { ValidationError } from '../../../../core/lib/errors'; /** * Options required to use an existing vpcLink or configure a new one @@ -51,7 +52,7 @@ export abstract class HttpPrivateIntegration extends HttpRouteIntegration { let vpcLink = configOptions.vpcLink; if (!vpcLink) { if (!configOptions.vpc) { - throw new Error('One of vpcLink or vpc should be provided for private integration'); + throw new ValidationError('One of vpcLink or vpc should be provided for private integration', bindOptions.scope); } vpcLink = bindOptions.route.httpApi.addVpcLink({ vpc: configOptions.vpc });