From c240b7d1397869aaa2ab05345ce8011b2f577679 Mon Sep 17 00:00:00 2001 From: Callum Gare Date: Wed, 3 Jul 2024 14:23:08 +1000 Subject: [PATCH] perf: get VPC details at stack deploy time BREAKING CHANGE: IxVpcDetails will no longer have VPC details available at synth time. --- src/cdk-constructs/IxElasticache.ts | 7 +------ src/cdk-constructs/IxNextjsSite.ts | 14 -------------- src/cdk-constructs/IxVpcDetails.ts | 23 +++++++++++++---------- 3 files changed, 14 insertions(+), 30 deletions(-) diff --git a/src/cdk-constructs/IxElasticache.ts b/src/cdk-constructs/IxElasticache.ts index b460f34..eb77455 100644 --- a/src/cdk-constructs/IxElasticache.ts +++ b/src/cdk-constructs/IxElasticache.ts @@ -42,12 +42,7 @@ export class IxElasticache extends Construct { // Setup VPC subnets if (vpc && !vpcSubnetIds) { if (deployConfig.isIxDeploy) { - vpcSubnetIds = [1, 2, 3].map((subnetNum) => - StringParameter.valueForStringParameter( - scope, - `/vpc/subnet/private-${deployConfig.workloadGroup}/${subnetNum}/id`, - ), - ); + vpcSubnetIds = IxVpcDetails.getVpcSubnetIds(scope); } else { vpcSubnetIds = vpc.privateSubnets.map((subnet) => subnet.subnetId); diff --git a/src/cdk-constructs/IxNextjsSite.ts b/src/cdk-constructs/IxNextjsSite.ts index 770445e..91c17ab 100644 --- a/src/cdk-constructs/IxNextjsSite.ts +++ b/src/cdk-constructs/IxNextjsSite.ts @@ -53,20 +53,6 @@ export class IxNextjsSite extends NextjsSite { vpc: vpcDetails.vpc, }; } - if (!props.cdk?.server || !("vpcSubnets" in props.cdk.server)) { - props.cdk = props.cdk ?? {}; - props.cdk.server = { - ...props.cdk.server, - vpcSubnets: vpcDetails.vpcSubnets, - }; - } - if (!props.cdk?.revalidation || !("vpcSubnets" in props.cdk.revalidation)) { - props.cdk = props.cdk ?? {}; - props.cdk.revalidation = { - ...props.cdk.revalidation, - vpcSubnets: vpcDetails.vpcSubnets, - }; - } } // This must be static because we need to call it in the constructor before super diff --git a/src/cdk-constructs/IxVpcDetails.ts b/src/cdk-constructs/IxVpcDetails.ts index 85f58b3..2d403ea 100644 --- a/src/cdk-constructs/IxVpcDetails.ts +++ b/src/cdk-constructs/IxVpcDetails.ts @@ -1,6 +1,6 @@ import { Construct } from "constructs"; import { StringParameter } from "aws-cdk-lib/aws-ssm"; -import { Vpc, IVpc, SubnetSelection, SubnetFilter } from "aws-cdk-lib/aws-ec2"; +import { Vpc, IVpc } from "aws-cdk-lib/aws-ec2"; import ixDeployConfig from "../deployConfig.js"; type ConstructScope = ConstructorParameters[0]; @@ -8,28 +8,31 @@ type ConstructId = ConstructorParameters[1]; export class IxVpcDetails extends Construct { public vpc: IVpc; - public vpcSubnets: SubnetSelection; constructor(scope: ConstructScope, id: ConstructId) { super(scope, id); this.vpc = this.getVpc(scope, id); - this.vpcSubnets = this.getVpcSubnet(scope); } private getVpc(scope: ConstructScope, id: ConstructId): IVpc { - const vpcId = StringParameter.valueFromLookup(scope, "/vpc/id"); - return Vpc.fromLookup(scope, id + "-Vpc", { vpcId }); + const vpcId = StringParameter.valueForStringParameter(scope, "/vpc/id"); + return Vpc.fromVpcAttributes(this, id + "-Vpc", { + vpcId, + availabilityZones: [ + "ap-southeast-2a", + "ap-southeast-2b", + "ap-southeast-2c", + ], + isolatedSubnetIds: IxVpcDetails.getVpcSubnetIds(scope), + }); } - private getVpcSubnet(scope: ConstructScope): SubnetSelection { - const vpcSubnetIds = [1, 2, 3].map((subnetNum) => + static getVpcSubnetIds(scope: ConstructScope): Array { + return [1, 2, 3].map((subnetNum) => StringParameter.valueForStringParameter( scope, `/vpc/subnet/private-${ixDeployConfig.workloadGroup}/${subnetNum}/id`, ), ); - return { - subnetFilters: [SubnetFilter.byIds(vpcSubnetIds)], - }; } }