はじめに
AWSCDKはTypeScriptやPythonといったプログラミング言語でCloudFormationのテンプレートを生成できるフレームワークです。
今回はAWSCDK(TypeScript)でVPCをデプロイする書き方を紹介していきます。
必要なパッケージ
VPC関係の定義は @aws-cdk/aws-ec2
にあります。
$ npm i -D @aws-cdk/aws-ec2
Stackファイルを書く
import cdk = require("@aws-cdk/core")
import {
DefaultInstanceTenancy,
RouterType,
Vpc,
Subnet,
CfnInternetGateway,
CfnVPCGatewayAttachment
} from "@aws-cdk/aws-ec2"
export class CreateVPCStack extends cdk.Stack {
constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
super(scope, id, props)
const vpc = new Vpc(this, "cdk-vpc", {
cidr: "10.0.0.0/16",
defaultInstanceTenancy: DefaultInstanceTenancy.DEFAULT,
enableDnsSupport: true,
enableDnsHostnames: true,
subnetConfiguration: []
})
const pubSubnet = new Subnet(this, "PublicSubnet1c", {
availabilityZone: "us-west-2c",
vpcId: vpc.vpcId,
cidrBlock: "10.0.0.0/24"
})
new Subnet(this, "PrivateSubnet1c", {
availabilityZone: "us-west-2c",
vpcId: vpc.vpcId,
cidrBlock: "10.0.1.0/24"
})
new Subnet(this, "PrivateSubnet1d", {
availabilityZone: "us-west-2c",
vpcId: vpc.vpcId,
cidrBlock: "10.0.2.0/24"
})
const internetGateway = new CfnInternetGateway(this, "InternetGateway", {})
new CfnVPCGatewayAttachment(this, "gateway", {
vpcId: vpc.vpcId,
internetGatewayId: internetGateway.ref
})
pubSubnet.addRoute("PubSubnetRoute", {
routerType: RouterType.GATEWAY,
routerId: internetGateway.ref
})
}
}
Stackファイルの説明
VPC
各パラメータを渡してVPCを構築します。
subnetConfiguration
を指定しなければいくつかSubnetが用意されます。
今回はSubnetを自分で構築したいので、 subnetConfiguration
に []
を指定します。
const vpc = new Vpc(this, "cdk-vpc", {
cidr: "10.0.0.0/16",
defaultInstanceTenancy: DefaultInstanceTenancy.DEFAULT,
enableDnsSupport: true,
enableDnsHostnames: true,
subnetConfiguration: []
})
Subnets
ここではPublicのSubnetを一つとPrivateのSubnetを2つ作っています。
const pubSubnet = new Subnet(this, "PublicSubnet1c", {
availabilityZone: "us-west-2c",
vpcId: vpc.vpcId,
cidrBlock: "10.0.0.0/24"
})
new Subnet(this, "PrivateSubnet1c", {
availabilityZone: "us-west-2c",
vpcId: vpc.vpcId,
cidrBlock: "10.0.1.0/24"
})
new Subnet(this, "PrivateSubnet1d", {
availabilityZone: "us-west-2c",
vpcId: vpc.vpcId,
cidrBlock: "10.0.2.0/24"
})
PublicのSubnetに外からアクセスするためのインターフェースを定義します。
const internetGateway = new CfnInternetGateway(this, "InternetGateway", {})
new CfnVPCGatewayAttachment(this, "gateway", {
vpcId: vpc.vpcId,
internetGatewayId: internetGateway.ref
})
pubSubnet.addRoute("PubSubnetRoute", {
routerType: RouterType.GATEWAY,
routerId: internetGateway.ref
})
さいごに
これでVPCをCDKでデプロイすることができるようになりました。
次回はこのVPCを利用してRDSのデプロイをしていこうと思います。
ではまた!!!