cdk で下記のようすると、1行でベストプラクティスのvpcを作ってくれます。
this.vpc = new ec2.Vpc(this, "TheVpc", cidr="10.0.0.0/16");
PublicSubnet,PrivateSubnet,IGW,Natgatewayなどが作られますが、
ちょっと検証したいだけの場合は、大げさすぎます。
NatGatewayは料金が高いし、あまり、使いたくありません。
自分好みのVPCを作りたい場合は、subnetConfigurationを空にします。
this.vpc = new ec2.Vpc(this, 'TheVPC', { cidr: "10.0.0.0/16", defaultInstanceTenancy: ec2.DefaultInstanceTenancy.DEFAULT, enableDnsSupport: true, enableDnsHostnames: true, subnetConfiguration: [] });
PublicSubnet、PrivateSubnet、IGWだけにして、他のスタックでVpcID, SubnetIDを使用できるようにしたいと思ったら、
最終的に、以下のようになりました。
import * as ec2 from '@aws-cdk/aws-ec2'; import * as cdk from '@aws-cdk/core'; export class VpcStack extends cdk.Stack { vpc: ec2.IVpc; pubSubnet: ec2.ISubnet[] = new Array(2); priSubnet: ec2.ISubnet[] = new Array(2); constructor(scope: cdk.App, id: string, props?: cdk.StackProps) { super(scope, id, props); // resources const internetGateway = new ec2.CfnInternetGateway(this, "InternetGateway", {}) this.vpc = new ec2.Vpc(this, 'TheVPC', { cidr: "10.0.0.0/16", defaultInstanceTenancy: ec2.DefaultInstanceTenancy.DEFAULT, enableDnsSupport: true, enableDnsHostnames: true, subnetConfiguration: [] }); const pub1 = new ec2.Subnet(this, "PublicSubnet1a", { availabilityZone: "us-east-1a", vpcId: this.vpc.vpcId, cidrBlock: "10.0.0.0/24" }); pub1.addRoute("PubSubnetRoute", { routerType: ec2.RouterType.GATEWAY, routerId: internetGateway.ref }); this.pubSubnet[0] = pub1 const pub2 = new ec2.Subnet(this, "PublicSubnet1c", { availabilityZone: "us-east-1c", vpcId: this.vpc.vpcId, cidrBlock: "10.0.1.0/24" }); pub2.addRoute("PubSubnetRoute", { routerType: ec2.RouterType.GATEWAY, routerId: internetGateway.ref }); this.pubSubnet[1] = pub2 this.priSubnet[0] = new ec2.Subnet(this, "PrivateSubnet1a", { availabilityZone: "us-east-1a", vpcId: this.vpc.vpcId, cidrBlock: "10.0.10.0/24" }); this.priSubnet[1] = new ec2.Subnet(this, "PrivateSubnet1c", { availabilityZone: "us-east-1c", vpcId: this.vpc.vpcId, cidrBlock: "10.0.11.0/24" }); new ec2.CfnVPCGatewayAttachment(this, "gateway", { vpcId: this.vpc.vpcId, internetGatewayId: internetGateway.ref }); // outputs new cdk.CfnOutput(this, 'VpcId', { description: 'vpc id', value: this.vpc.vpcId, exportName: `${this.stackName}-vpcId` }); new cdk.CfnOutput(this, 'PublicSubnetId1', { description: 'public subnet id (a)', value: this.pubSubnet[0].subnetId, exportName: `${this.stackName}-publicSubnetId1` }); new cdk.CfnOutput(this, 'PublicSubnetId2', { description: 'public subnet id (c)', value: this.pubSubnet[1].subnetId, exportName: `${this.stackName}-publicSubnetId2` }); new cdk.CfnOutput(this, 'PrivateSubnetId1', { description: 'private subnet id (a)', value: this.priSubnet[0].subnetId, exportName: `${this.stackName}-privateSubnetId1` }); new cdk.CfnOutput(this, 'PrivateSubnetId2', { description: 'private subnet id (c)', value: this.priSubnet[1].subnetId, exportName: `${this.stackName}-privateSubnetId2` }); } }
low-levelのCfnVPCを使う方法は、下記ページが詳しいです。
Constructの種類(high-level, low-level,pattern)については、下記ページが詳しいです。