AWS Cloud Developement Kit : VPC編#1

AWS Cloud Development Kit (以下CDK)はプログラミング言語を使用してAWS環境の定義、デプロイができるフレームワークです。CDKのコードは最終的にCloudFormationのテンプレートに変換されてデプロイされるため、宣言型のCloudFormationの持つ冪等性(繰り返し実行しても同じ結果になる)の恩恵を受けつつ、様々なデータ構造や繰り返しなどの制御構造を持つプログラミング言語でインフラストラクチャを記述できるというメリットがあります。2019/1/20時点ではDeveloper Previewで、C#/JavaScript/TypeScript/Javaで記述することができます。
今回はTypeScriptでVPCを作成します。

# 環境
* OS: macOS Sierra (10.12.6)
* AWS CDK: 0.22.0  
基本的にはNode.jsが動く環境であればどの環境でも動作するはずです。

# 前提条件
以下は予めインストールしておく必要があります。

* Node.js (>= 8.11.x)
* AWS CLI
* git
* AWS CDK ([インストール手順](https://f-daiki.hatenablog.com/entry/2019/01/04/213959:title))
   
# CDKプロジェクトの初期化
CDKプロジェクトをデフォルトテンプレートから初期化します。

* CDKをアップデートします。

```sh:コマンド
$ npm -g update aws-cdk
$ cdk --version
```
```:Output例
0.22.0 (build 644ebf5)
```

* プロジェクトフォルダを作成します。

```sh:コマンド
$ mkdir aws-cdk-vpc-sample
$ cd aws-cdk-vpc-sample
```
* プロジェクトを初期化します。

```sh:コマンド
$ cdk init --language typescript
```

# プロパティ指定なしで VPCを作成する。
プロパティを一切指定せずにVPCを作成します。

* <code>@aws-cdk/aws-ec2</code>パッケージをインストールします。

```sh:コマンド
$ npm install @aws-cdk/aws-ec2
```

* <code>lib/aws-cdk-vpc-sample.ts</code>を編集し、VPCをスタックに追加します。

```typescript:lib/aws-cdk-vpc-sample.ts
import cdk = require('@aws-cdk/cdk');
import ec2 = require('@aws-cdk/aws-ec2');  //ec2モジュールをインポート

export class AwsCdkVpcSampleStack extends cdk.Stack {
  constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    new ec2.VpcNetwork(this, 'VPC');   //VPCを追加
  }
}
```

* ビルドします。

```sh:コマンド
$ npm run build
```

* <code>cdk diff</code>コマンドを実行すると作成されるリソースが表示されます。<br>AWSクレデンシャルとデフォルトリージョンが設定されていないとエラーになります。

```sh:コマンド
$ cdk diff
```
```:Output例
Resources
[+] AWS::EC2::VPC VPC VPCB9E5F0B4
[+] AWS::EC2::Subnet VPC/PublicSubnet1/Subnet VPCPublicSubnet1SubnetB4246D30
[+] AWS::EC2::RouteTable VPC/PublicSubnet1/RouteTable VPCPublicSubnet1RouteTableFEE4B781
[+] AWS::EC2::SubnetRouteTableAssociation VPC/PublicSubnet1/RouteTableAssociation VPCPublicSubnet1RouteTableAssociation0B0896DC
[+] AWS::EC2::Route VPC/PublicSubnet1/DefaultRoute VPCPublicSubnet1DefaultRoute91CEF279
[+] AWS::EC2::EIP VPC/PublicSubnet1/EIP VPCPublicSubnet1EIP6AD938E8
[+] AWS::EC2::NatGateway VPC/PublicSubnet1/NATGateway VPCPublicSubnet1NATGatewayE0556630
[+] AWS::EC2::Subnet VPC/PublicSubnet2/Subnet VPCPublicSubnet2Subnet74179F39
[+] AWS::EC2::RouteTable VPC/PublicSubnet2/RouteTable VPCPublicSubnet2RouteTable6F1A15F1
[+] AWS::EC2::SubnetRouteTableAssociation VPC/PublicSubnet2/RouteTableAssociation VPCPublicSubnet2RouteTableAssociation5A808732
[+] AWS::EC2::Route VPC/PublicSubnet2/DefaultRoute VPCPublicSubnet2DefaultRouteB7481BBA
[+] AWS::EC2::EIP VPC/PublicSubnet2/EIP VPCPublicSubnet2EIP4947BC00
[+] AWS::EC2::NatGateway VPC/PublicSubnet2/NATGateway VPCPublicSubnet2NATGateway3C070193
[+] AWS::EC2::Subnet VPC/PublicSubnet3/Subnet VPCPublicSubnet3Subnet631C5E25
[+] AWS::EC2::RouteTable VPC/PublicSubnet3/RouteTable VPCPublicSubnet3RouteTable98AE0E14
[+] AWS::EC2::SubnetRouteTableAssociation VPC/PublicSubnet3/RouteTableAssociation VPCPublicSubnet3RouteTableAssociation427FE0C6
[+] AWS::EC2::Route VPC/PublicSubnet3/DefaultRoute VPCPublicSubnet3DefaultRouteA0D29D46
[+] AWS::EC2::EIP VPC/PublicSubnet3/EIP VPCPublicSubnet3EIPAD4BC883
[+] AWS::EC2::NatGateway VPC/PublicSubnet3/NATGateway VPCPublicSubnet3NATGatewayD3048F5C
[+] AWS::EC2::Subnet VPC/PrivateSubnet1/Subnet VPCPrivateSubnet1Subnet8BCA10E0
[+] AWS::EC2::RouteTable VPC/PrivateSubnet1/RouteTable VPCPrivateSubnet1RouteTableBE8A6027
[+] AWS::EC2::SubnetRouteTableAssociation VPC/PrivateSubnet1/RouteTableAssociation VPCPrivateSubnet1RouteTableAssociation347902D1
[+] AWS::EC2::Route VPC/PrivateSubnet1/DefaultRoute VPCPrivateSubnet1DefaultRouteAE1D6490
[+] AWS::EC2::Subnet VPC/PrivateSubnet2/Subnet VPCPrivateSubnet2SubnetCFCDAA7A
[+] AWS::EC2::RouteTable VPC/PrivateSubnet2/RouteTable VPCPrivateSubnet2RouteTable0A19E10E
[+] AWS::EC2::SubnetRouteTableAssociation VPC/PrivateSubnet2/RouteTableAssociation VPCPrivateSubnet2RouteTableAssociation0C73D413
[+] AWS::EC2::Route VPC/PrivateSubnet2/DefaultRoute VPCPrivateSubnet2DefaultRouteF4F5CFD2
[+] AWS::EC2::Subnet VPC/PrivateSubnet3/Subnet VPCPrivateSubnet3Subnet3EDCD457
[+] AWS::EC2::RouteTable VPC/PrivateSubnet3/RouteTable VPCPrivateSubnet3RouteTable192186F8
[+] AWS::EC2::SubnetRouteTableAssociation VPC/PrivateSubnet3/RouteTableAssociation VPCPrivateSubnet3RouteTableAssociationC28D144E
[+] AWS::EC2::Route VPC/PrivateSubnet3/DefaultRoute VPCPrivateSubnet3DefaultRoute27F311AE
[+] AWS::EC2::InternetGateway VPC/IGW VPCIGWB7E252D3
[+] AWS::EC2::VPCGatewayAttachment VPC/VPCGW VPCVPCGW99B986DC
```
何も指定しなくてもVPC/Public Subnet x 3AZ/Private Subnet x 3AZ/Route Table/NATGW/IGWが作成されることがわかります。

* CDKによって作成されるCloudFormationスタックのテンプレート(Resources)を確認します。

```sh:コマンド
$ cdk synth AwsCdkVpcSampleStack
```
```yaml:Output例
Resources:
  VPCB9E5F0B4:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
      EnableDnsHostnames: true
      EnableDnsSupport: true
      InstanceTenancy: default
      Tags:
        - Key: Name
          Value: AwsCdkVpcSampleStack/VPC
    Metadata:
      aws:cdk:path: AwsCdkVpcSampleStack/VPC/Resource
  VPCPublicSubnet1SubnetB4246D30:
    Type: AWS::EC2::Subnet
    Properties:
      CidrBlock: 10.0.0.0/19
      VpcId:
        Ref: VPCB9E5F0B4
      AvailabilityZone: ap-northeast-1a
      MapPublicIpOnLaunch: true
      Tags:
        - Key: Name
          Value: AwsCdkVpcSampleStack/VPC/PublicSubnet1
        - Key: aws-cdk:subnet-name
          Value: Public
        - Key: aws-cdk:subnet-type
          Value: Public
    Metadata:
      aws:cdk:path: AwsCdkVpcSampleStack/VPC/PublicSubnet1/Subnet
  VPCPublicSubnet1RouteTableFEE4B781:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId:
        Ref: VPCB9E5F0B4
      Tags:
        - Key: Name
          Value: AwsCdkVpcSampleStack/VPC/PublicSubnet1
    Metadata:
      aws:cdk:path: AwsCdkVpcSampleStack/VPC/PublicSubnet1/RouteTable
  VPCPublicSubnet1RouteTableAssociation0B0896DC:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      RouteTableId:
        Ref: VPCPublicSubnet1RouteTableFEE4B781
      SubnetId:
        Ref: VPCPublicSubnet1SubnetB4246D30
    Metadata:
      aws:cdk:path: AwsCdkVpcSampleStack/VPC/PublicSubnet1/RouteTableAssociation
  VPCPublicSubnet1DefaultRoute91CEF279:
    Type: AWS::EC2::Route
    Properties:
      RouteTableId:
        Ref: VPCPublicSubnet1RouteTableFEE4B781
      DestinationCidrBlock: 0.0.0.0/0
      GatewayId:
        Ref: VPCIGWB7E252D3
    DependsOn:
      - VPCVPCGW99B986DC
    Metadata:
      aws:cdk:path: AwsCdkVpcSampleStack/VPC/PublicSubnet1/DefaultRoute
  VPCPublicSubnet1EIP6AD938E8:
    Type: AWS::EC2::EIP
    Properties:
      Domain: vpc
    Metadata:
      aws:cdk:path: AwsCdkVpcSampleStack/VPC/PublicSubnet1/EIP
  VPCPublicSubnet1NATGatewayE0556630:
    Type: AWS::EC2::NatGateway
    Properties:
      AllocationId:
        Fn::GetAtt:
          - VPCPublicSubnet1EIP6AD938E8
          - AllocationId
      SubnetId:
        Ref: VPCPublicSubnet1SubnetB4246D30
      Tags:
        - Key: Name
          Value: AwsCdkVpcSampleStack/VPC/PublicSubnet1
    Metadata:
      aws:cdk:path: AwsCdkVpcSampleStack/VPC/PublicSubnet1/NATGateway
  VPCPublicSubnet2Subnet74179F39:
    Type: AWS::EC2::Subnet
    Properties:
      CidrBlock: 10.0.32.0/19
      VpcId:
        Ref: VPCB9E5F0B4
      AvailabilityZone: ap-northeast-1c
      MapPublicIpOnLaunch: true
      Tags:
        - Key: Name
          Value: AwsCdkVpcSampleStack/VPC/PublicSubnet2
        - Key: aws-cdk:subnet-name
          Value: Public
        - Key: aws-cdk:subnet-type
          Value: Public
    Metadata:
      aws:cdk:path: AwsCdkVpcSampleStack/VPC/PublicSubnet2/Subnet
  VPCPublicSubnet2RouteTable6F1A15F1:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId:
        Ref: VPCB9E5F0B4
      Tags:
        - Key: Name
          Value: AwsCdkVpcSampleStack/VPC/PublicSubnet2
    Metadata:
      aws:cdk:path: AwsCdkVpcSampleStack/VPC/PublicSubnet2/RouteTable
  VPCPublicSubnet2RouteTableAssociation5A808732:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      RouteTableId:
        Ref: VPCPublicSubnet2RouteTable6F1A15F1
      SubnetId:
        Ref: VPCPublicSubnet2Subnet74179F39
    Metadata:
      aws:cdk:path: AwsCdkVpcSampleStack/VPC/PublicSubnet2/RouteTableAssociation
  VPCPublicSubnet2DefaultRouteB7481BBA:
    Type: AWS::EC2::Route
    Properties:
      RouteTableId:
        Ref: VPCPublicSubnet2RouteTable6F1A15F1
      DestinationCidrBlock: 0.0.0.0/0
      GatewayId:
        Ref: VPCIGWB7E252D3
    DependsOn:
      - VPCVPCGW99B986DC
    Metadata:
      aws:cdk:path: AwsCdkVpcSampleStack/VPC/PublicSubnet2/DefaultRoute
  VPCPublicSubnet2EIP4947BC00:
    Type: AWS::EC2::EIP
    Properties:
      Domain: vpc
    Metadata:
      aws:cdk:path: AwsCdkVpcSampleStack/VPC/PublicSubnet2/EIP
  VPCPublicSubnet2NATGateway3C070193:
    Type: AWS::EC2::NatGateway
    Properties:
      AllocationId:
        Fn::GetAtt:
          - VPCPublicSubnet2EIP4947BC00
          - AllocationId
      SubnetId:
        Ref: VPCPublicSubnet2Subnet74179F39
      Tags:
        - Key: Name
          Value: AwsCdkVpcSampleStack/VPC/PublicSubnet2
    Metadata:
      aws:cdk:path: AwsCdkVpcSampleStack/VPC/PublicSubnet2/NATGateway
  VPCPublicSubnet3Subnet631C5E25:
    Type: AWS::EC2::Subnet
    Properties:
      CidrBlock: 10.0.64.0/19
      VpcId:
        Ref: VPCB9E5F0B4
      AvailabilityZone: ap-northeast-1d
      MapPublicIpOnLaunch: true
      Tags:
        - Key: Name
          Value: AwsCdkVpcSampleStack/VPC/PublicSubnet3
        - Key: aws-cdk:subnet-name
          Value: Public
        - Key: aws-cdk:subnet-type
          Value: Public
    Metadata:
      aws:cdk:path: AwsCdkVpcSampleStack/VPC/PublicSubnet3/Subnet
  VPCPublicSubnet3RouteTable98AE0E14:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId:
        Ref: VPCB9E5F0B4
      Tags:
        - Key: Name
          Value: AwsCdkVpcSampleStack/VPC/PublicSubnet3
    Metadata:
      aws:cdk:path: AwsCdkVpcSampleStack/VPC/PublicSubnet3/RouteTable
  VPCPublicSubnet3RouteTableAssociation427FE0C6:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      RouteTableId:
        Ref: VPCPublicSubnet3RouteTable98AE0E14
      SubnetId:
        Ref: VPCPublicSubnet3Subnet631C5E25
    Metadata:
      aws:cdk:path: AwsCdkVpcSampleStack/VPC/PublicSubnet3/RouteTableAssociation
  VPCPublicSubnet3DefaultRouteA0D29D46:
    Type: AWS::EC2::Route
    Properties:
      RouteTableId:
        Ref: VPCPublicSubnet3RouteTable98AE0E14
      DestinationCidrBlock: 0.0.0.0/0
      GatewayId:
        Ref: VPCIGWB7E252D3
    DependsOn:
      - VPCVPCGW99B986DC
    Metadata:
      aws:cdk:path: AwsCdkVpcSampleStack/VPC/PublicSubnet3/DefaultRoute
  VPCPublicSubnet3EIPAD4BC883:
    Type: AWS::EC2::EIP
    Properties:
      Domain: vpc
    Metadata:
      aws:cdk:path: AwsCdkVpcSampleStack/VPC/PublicSubnet3/EIP
  VPCPublicSubnet3NATGatewayD3048F5C:
    Type: AWS::EC2::NatGateway
    Properties:
      AllocationId:
        Fn::GetAtt:
          - VPCPublicSubnet3EIPAD4BC883
          - AllocationId
      SubnetId:
        Ref: VPCPublicSubnet3Subnet631C5E25
      Tags:
        - Key: Name
          Value: AwsCdkVpcSampleStack/VPC/PublicSubnet3
    Metadata:
      aws:cdk:path: AwsCdkVpcSampleStack/VPC/PublicSubnet3/NATGateway
  VPCPrivateSubnet1Subnet8BCA10E0:
    Type: AWS::EC2::Subnet
    Properties:
      CidrBlock: 10.0.96.0/19
      VpcId:
        Ref: VPCB9E5F0B4
      AvailabilityZone: ap-northeast-1a
      MapPublicIpOnLaunch: false
      Tags:
        - Key: Name
          Value: AwsCdkVpcSampleStack/VPC/PrivateSubnet1
        - Key: aws-cdk:subnet-name
          Value: Private
        - Key: aws-cdk:subnet-type
          Value: Private
    Metadata:
      aws:cdk:path: AwsCdkVpcSampleStack/VPC/PrivateSubnet1/Subnet
  VPCPrivateSubnet1RouteTableBE8A6027:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId:
        Ref: VPCB9E5F0B4
      Tags:
        - Key: Name
          Value: AwsCdkVpcSampleStack/VPC/PrivateSubnet1
    Metadata:
      aws:cdk:path: AwsCdkVpcSampleStack/VPC/PrivateSubnet1/RouteTable
  VPCPrivateSubnet1RouteTableAssociation347902D1:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      RouteTableId:
        Ref: VPCPrivateSubnet1RouteTableBE8A6027
      SubnetId:
        Ref: VPCPrivateSubnet1Subnet8BCA10E0
    Metadata:
      aws:cdk:path: AwsCdkVpcSampleStack/VPC/PrivateSubnet1/RouteTableAssociation
  VPCPrivateSubnet1DefaultRouteAE1D6490:
    Type: AWS::EC2::Route
    Properties:
      RouteTableId:
        Ref: VPCPrivateSubnet1RouteTableBE8A6027
      DestinationCidrBlock: 0.0.0.0/0
      NatGatewayId:
        Ref: VPCPublicSubnet1NATGatewayE0556630
    Metadata:
      aws:cdk:path: AwsCdkVpcSampleStack/VPC/PrivateSubnet1/DefaultRoute
  VPCPrivateSubnet2SubnetCFCDAA7A:
    Type: AWS::EC2::Subnet
    Properties:
      CidrBlock: 10.0.128.0/19
      VpcId:
        Ref: VPCB9E5F0B4
      AvailabilityZone: ap-northeast-1c
      MapPublicIpOnLaunch: false
      Tags:
        - Key: Name
          Value: AwsCdkVpcSampleStack/VPC/PrivateSubnet2
        - Key: aws-cdk:subnet-name
          Value: Private
        - Key: aws-cdk:subnet-type
          Value: Private
    Metadata:
      aws:cdk:path: AwsCdkVpcSampleStack/VPC/PrivateSubnet2/Subnet
  VPCPrivateSubnet2RouteTable0A19E10E:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId:
        Ref: VPCB9E5F0B4
      Tags:
        - Key: Name
          Value: AwsCdkVpcSampleStack/VPC/PrivateSubnet2
    Metadata:
      aws:cdk:path: AwsCdkVpcSampleStack/VPC/PrivateSubnet2/RouteTable
  VPCPrivateSubnet2RouteTableAssociation0C73D413:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      RouteTableId:
        Ref: VPCPrivateSubnet2RouteTable0A19E10E
      SubnetId:
        Ref: VPCPrivateSubnet2SubnetCFCDAA7A
    Metadata:
      aws:cdk:path: AwsCdkVpcSampleStack/VPC/PrivateSubnet2/RouteTableAssociation
  VPCPrivateSubnet2DefaultRouteF4F5CFD2:
    Type: AWS::EC2::Route
    Properties:
      RouteTableId:
        Ref: VPCPrivateSubnet2RouteTable0A19E10E
      DestinationCidrBlock: 0.0.0.0/0
      NatGatewayId:
        Ref: VPCPublicSubnet2NATGateway3C070193
    Metadata:
      aws:cdk:path: AwsCdkVpcSampleStack/VPC/PrivateSubnet2/DefaultRoute
  VPCPrivateSubnet3Subnet3EDCD457:
    Type: AWS::EC2::Subnet
    Properties:
      CidrBlock: 10.0.160.0/19
      VpcId:
        Ref: VPCB9E5F0B4
      AvailabilityZone: ap-northeast-1d
      MapPublicIpOnLaunch: false
      Tags:
        - Key: Name
          Value: AwsCdkVpcSampleStack/VPC/PrivateSubnet3
        - Key: aws-cdk:subnet-name
          Value: Private
        - Key: aws-cdk:subnet-type
          Value: Private
    Metadata:
      aws:cdk:path: AwsCdkVpcSampleStack/VPC/PrivateSubnet3/Subnet
  VPCPrivateSubnet3RouteTable192186F8:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId:
        Ref: VPCB9E5F0B4
      Tags:
        - Key: Name
          Value: AwsCdkVpcSampleStack/VPC/PrivateSubnet3
    Metadata:
      aws:cdk:path: AwsCdkVpcSampleStack/VPC/PrivateSubnet3/RouteTable
  VPCPrivateSubnet3RouteTableAssociationC28D144E:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      RouteTableId:
        Ref: VPCPrivateSubnet3RouteTable192186F8
      SubnetId:
        Ref: VPCPrivateSubnet3Subnet3EDCD457
    Metadata:
      aws:cdk:path: AwsCdkVpcSampleStack/VPC/PrivateSubnet3/RouteTableAssociation
  VPCPrivateSubnet3DefaultRoute27F311AE:
    Type: AWS::EC2::Route
    Properties:
      RouteTableId:
        Ref: VPCPrivateSubnet3RouteTable192186F8
      DestinationCidrBlock: 0.0.0.0/0
      NatGatewayId:
        Ref: VPCPublicSubnet3NATGatewayD3048F5C
    Metadata:
      aws:cdk:path: AwsCdkVpcSampleStack/VPC/PrivateSubnet3/DefaultRoute
  VPCIGWB7E252D3:
    Type: AWS::EC2::InternetGateway
    Properties:
      Tags:
        - Key: Name
          Value: AwsCdkVpcSampleStack/VPC
    Metadata:
      aws:cdk:path: AwsCdkVpcSampleStack/VPC/IGW
  VPCVPCGW99B986DC:
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:
      VpcId:
        Ref: VPCB9E5F0B4
      InternetGatewayId:
        Ref: VPCIGWB7E252D3
    Metadata:
      aws:cdk:path: AwsCdkVpcSampleStack/VPC/VPCGW
  CDKMetadata:
    Type: AWS::CDK::Metadata
    Properties:
      Modules: aws-cdk=0.22.0,@aws-cdk/aws-ec2=0.22.0,@aws-cdk/cdk=0.22.0,@aws-cdk/cx-api=0.22.0,jsii-runtime=node.js/v10.2.1
```
諸々といい感じに定義されています。IGWから直接インターネットと通信できるPublic Subnetと、NATGW経由でEgressの通信ができるPrivate Subnetが作成されることになります。デフォルトのVPCのCIDRは10.0.0.0/16、各サブネットは/19と大きく切られています。

* スタックをデプロイします。

```sh:コマンド
$ cdk deploy
```
```:Output例
AwsCdkVpcSampleStack: deploying...
AwsCdkVpcSampleStack: creating CloudFormation changeset...
  0/35 | 17:12:26 | CREATE_IN_PROGRESS   | AWS::CloudFormation::Stack            | AwsCdkVpcSampleStack User Initiated
  0/35 | 17:12:31 | CREATE_IN_PROGRESS   | AWS::EC2::EIP                         | VPC/PublicSubnet2/EIP (VPCPublicSubnet2EIP4947BC00)
  0/35 | 17:12:31 | CREATE_IN_PROGRESS   | AWS::EC2::EIP                         | VPC/PublicSubnet3/EIP (VPCPublicSubnet3EIPAD4BC883)
  0/35 | 17:12:31 | CREATE_IN_PROGRESS   | AWS::CDK::Metadata                    | CDKMetadata
  0/35 | 17:12:32 | CREATE_IN_PROGRESS   | AWS::EC2::InternetGateway             | VPC/IGW (VPCIGWB7E252D3)
  0/35 | 17:12:32 | CREATE_IN_PROGRESS   | AWS::EC2::EIP                         | VPC/PublicSubnet1/EIP (VPCPublicSubnet1EIP6AD938E8)
  0/35 | 17:12:32 | CREATE_IN_PROGRESS   | AWS::EC2::VPC                         | VPC (VPCB9E5F0B4)
  0/35 | 17:12:32 | CREATE_IN_PROGRESS   | AWS::EC2::InternetGateway             | VPC/IGW (VPCIGWB7E252D3) Resource creation Initiated
  0/35 | 17:12:32 | CREATE_IN_PROGRESS   | AWS::EC2::EIP                         | VPC/PublicSubnet2/EIP (VPCPublicSubnet2EIP4947BC00) Resourcecreation Initiated
  0/35 | 17:12:32 | CREATE_IN_PROGRESS   | AWS::EC2::EIP                         | VPC/PublicSubnet1/EIP (VPCPublicSubnet1EIP6AD938E8) Resourcecreation Initiated
  0/35 | 17:12:32 | CREATE_IN_PROGRESS   | AWS::EC2::EIP                         | VPC/PublicSubnet3/EIP (VPCPublicSubnet3EIPAD4BC883) Resourcecreation Initiated
  0/35 | 17:12:32 | CREATE_IN_PROGRESS   | AWS::EC2::VPC                         | VPC (VPCB9E5F0B4) Resource creation Initiated
  0/35 | 17:12:35 | CREATE_IN_PROGRESS   | AWS::CDK::Metadata                    | CDKMetadata Resource creation Initiated
  1/35 | 17:12:35 | CREATE_COMPLETE      | AWS::CDK::Metadata                    | CDKMetadata
  2/35 | 17:12:48 | CREATE_COMPLETE      | AWS::EC2::EIP                         | VPC/PublicSubnet2/EIP (VPCPublicSubnet2EIP4947BC00)
  3/35 | 17:12:48 | CREATE_COMPLETE      | AWS::EC2::EIP                         | VPC/PublicSubnet3/EIP (VPCPublicSubnet3EIPAD4BC883)
  4/35 | 17:12:48 | CREATE_COMPLETE      | AWS::EC2::EIP                         | VPC/PublicSubnet1/EIP (VPCPublicSubnet1EIP6AD938E8)
  5/35 | 17:12:49 | CREATE_COMPLETE      | AWS::EC2::InternetGateway             | VPC/IGW (VPCIGWB7E252D3)
  6/35 | 17:12:50 | CREATE_COMPLETE      | AWS::EC2::VPC                         | VPC (VPCB9E5F0B4)
  6/35 | 17:12:53 | CREATE_IN_PROGRESS   | AWS::EC2::Subnet                      | VPC/PrivateSubnet2/Subnet (VPCPrivateSubnet2SubnetCFCDAA7A)
  6/35 | 17:12:53 | CREATE_IN_PROGRESS   | AWS::EC2::Subnet                      | VPC/PublicSubnet2/Subnet (VPCPublicSubnet2Subnet74179F39)
  6/35 | 17:12:53 | CREATE_IN_PROGRESS   | AWS::EC2::RouteTable                  | VPC/PublicSubnet2/RouteTable (VPCPublicSubnet2RouteTable6F1A15F1)
  6/35 | 17:12:53 | CREATE_IN_PROGRESS   | AWS::EC2::Subnet                      | VPC/PrivateSubnet3/Subnet (VPCPrivateSubnet3Subnet3EDCD457)
  6/35 | 17:12:53 | CREATE_IN_PROGRESS   | AWS::EC2::Subnet                      | VPC/PublicSubnet1/Subnet (VPCPublicSubnet1SubnetB4246D30)
  6/35 | 17:12:53 | CREATE_IN_PROGRESS   | AWS::EC2::RouteTable                  | VPC/PublicSubnet1/RouteTable (VPCPublicSubnet1RouteTableFEE4B781)
  6/35 | 17:12:53 | CREATE_IN_PROGRESS   | AWS::EC2::RouteTable                  | VPC/PrivateSubnet1/RouteTable (VPCPrivateSubnet1RouteTableBE8A6027)
  6/35 | 17:12:53 | CREATE_IN_PROGRESS   | AWS::EC2::RouteTable                  | VPC/PrivateSubnet3/RouteTable (VPCPrivateSubnet3RouteTable192186F8)
  6/35 | 17:12:53 | CREATE_IN_PROGRESS   | AWS::EC2::Subnet                      | VPC/PrivateSubnet1/Subnet (VPCPrivateSubnet1Subnet8BCA10E0)
  6/35 | 17:12:53 | CREATE_IN_PROGRESS   | AWS::EC2::RouteTable                  | VPC/PrivateSubnet2/RouteTable (VPCPrivateSubnet2RouteTable0A19E10E)
  6/35 | 17:12:53 | CREATE_IN_PROGRESS   | AWS::EC2::RouteTable                  | VPC/PublicSubnet3/RouteTable (VPCPublicSubnet3RouteTable98AE0E14)
  6/35 | 17:12:53 | CREATE_IN_PROGRESS   | AWS::EC2::RouteTable                  | VPC/PublicSubnet2/RouteTable (VPCPublicSubnet2RouteTable6F1A15F1) Resource creation Initiated
  6/35 | 17:12:53 | CREATE_IN_PROGRESS   | AWS::EC2::Subnet                      | VPC/PublicSubnet3/Subnet (VPCPublicSubnet3Subnet631C5E25)
  6/35 | 17:12:53 | CREATE_IN_PROGRESS   | AWS::EC2::VPCGatewayAttachment        | VPC/VPCGW (VPCVPCGW99B986DC)
  6/35 | 17:12:53 | CREATE_IN_PROGRESS   | AWS::EC2::RouteTable                  | VPC/PrivateSubnet1/RouteTable (VPCPrivateSubnet1RouteTableBE8A6027) Resource creation Initiated
  6/35 | 17:12:53 | CREATE_IN_PROGRESS   | AWS::EC2::RouteTable                  | VPC/PrivateSubnet3/RouteTable (VPCPrivateSubnet3RouteTable192186F8) Resource creation Initiated
  6/35 | 17:12:53 | CREATE_IN_PROGRESS   | AWS::EC2::Subnet                      | VPC/PrivateSubnet2/Subnet (VPCPrivateSubnet2SubnetCFCDAA7A) Resource creation Initiated
  6/35 | 17:12:53 | CREATE_IN_PROGRESS   | AWS::EC2::Subnet                      | VPC/PrivateSubnet3/Subnet (VPCPrivateSubnet3Subnet3EDCD457) Resource creation Initiated
  6/35 | 17:12:53 | CREATE_IN_PROGRESS   | AWS::EC2::RouteTable                  | VPC/PrivateSubnet2/RouteTable (VPCPrivateSubnet2RouteTable0A19E10E) Resource creation Initiated
  6/35 | 17:12:53 | CREATE_IN_PROGRESS   | AWS::EC2::Subnet                      | VPC/PublicSubnet2/Subnet (VPCPublicSubnet2Subnet74179F39) Resource creation Initiated
  6/35 | 17:12:53 | CREATE_IN_PROGRESS   | AWS::EC2::Subnet                      | VPC/PrivateSubnet1/Subnet (VPCPrivateSubnet1Subnet8BCA10E0) Resource creation Initiated
  6/35 | 17:12:53 | CREATE_IN_PROGRESS   | AWS::EC2::RouteTable                  | VPC/PublicSubnet3/RouteTable (VPCPublicSubnet3RouteTable98AE0E14) Resource creation Initiated
  6/35 | 17:12:54 | CREATE_IN_PROGRESS   | AWS::EC2::RouteTable                  | VPC/PublicSubnet1/RouteTable (VPCPublicSubnet1RouteTableFEE4B781) Resource creation Initiated
  6/35 | 17:12:54 | CREATE_IN_PROGRESS   | AWS::EC2::Subnet                      | VPC/PublicSubnet1/Subnet (VPCPublicSubnet1SubnetB4246D30) Resource creation Initiated
  6/35 | 17:12:54 | CREATE_IN_PROGRESS   | AWS::EC2::VPCGatewayAttachment        | VPC/VPCGW (VPCVPCGW99B986DC) Resource creation Initiated
  6/35 | 17:12:54 | CREATE_IN_PROGRESS   | AWS::EC2::Subnet                      | VPC/PublicSubnet3/Subnet (VPCPublicSubnet3Subnet631C5E25) Resource creation Initiated
  7/35 | 17:12:54 | CREATE_COMPLETE      | AWS::EC2::RouteTable                  | VPC/PublicSubnet2/RouteTable (VPCPublicSubnet2RouteTable6F1A15F1)
  8/35 | 17:12:54 | CREATE_COMPLETE      | AWS::EC2::RouteTable                  | VPC/PrivateSubnet3/RouteTable (VPCPrivateSubnet3RouteTable192186F8)
  9/35 | 17:12:54 | CREATE_COMPLETE      | AWS::EC2::RouteTable                  | VPC/PrivateSubnet2/RouteTable (VPCPrivateSubnet2RouteTable0A19E10E)
 10/35 | 17:12:54 | CREATE_COMPLETE      | AWS::EC2::RouteTable                  | VPC/PrivateSubnet1/RouteTable (VPCPrivateSubnet1RouteTableBE8A6027)
 11/35 | 17:12:55 | CREATE_COMPLETE      | AWS::EC2::RouteTable                  | VPC/PublicSubnet1/RouteTable (VPCPublicSubnet1RouteTableFEE4B781)
 12/35 | 17:12:55 | CREATE_COMPLETE      | AWS::EC2::RouteTable                  | VPC/PublicSubnet3/RouteTable (VPCPublicSubnet3RouteTable98AE0E14)
 13/35 | 17:13:09 | CREATE_COMPLETE      | AWS::EC2::VPCGatewayAttachment        | VPC/VPCGW (VPCVPCGW99B986DC)
 14/35 | 17:13:10 | CREATE_COMPLETE      | AWS::EC2::Subnet                      | VPC/PublicSubnet2/Subnet (VPCPublicSubnet2Subnet74179F39)
 15/35 | 17:13:10 | CREATE_COMPLETE      | AWS::EC2::Subnet                      | VPC/PrivateSubnet1/Subnet (VPCPrivateSubnet1Subnet8BCA10E0)
 16/35 | 17:13:10 | CREATE_COMPLETE      | AWS::EC2::Subnet                      | VPC/PrivateSubnet2/Subnet (VPCPrivateSubnet2SubnetCFCDAA7A)
 17/35 | 17:13:10 | CREATE_COMPLETE      | AWS::EC2::Subnet                      | VPC/PrivateSubnet3/Subnet (VPCPrivateSubnet3Subnet3EDCD457)
 18/35 | 17:13:10 | CREATE_COMPLETE      | AWS::EC2::Subnet                      | VPC/PublicSubnet1/Subnet (VPCPublicSubnet1SubnetB4246D30)
 19/35 | 17:13:10 | CREATE_COMPLETE      | AWS::EC2::Subnet                      | VPC/PublicSubnet3/Subnet (VPCPublicSubnet3Subnet631C5E25)
 19/35 | 17:13:12 | CREATE_IN_PROGRESS   | AWS::EC2::Route                       | VPC/PublicSubnet2/DefaultRoute (VPCPublicSubnet2DefaultRouteB7481BBA)
 19/35 | 17:13:12 | CREATE_IN_PROGRESS   | AWS::EC2::Route                       | VPC/PublicSubnet3/DefaultRoute (VPCPublicSubnet3DefaultRouteA0D29D46)
 19/35 | 17:13:13 | CREATE_IN_PROGRESS   | AWS::EC2::Route                       | VPC/PublicSubnet1/DefaultRoute (VPCPublicSubnet1DefaultRoute91CEF279)
 19/35 | 17:13:13 | CREATE_IN_PROGRESS   | AWS::EC2::SubnetRouteTableAssociation | VPC/PublicSubnet2/RouteTableAssociation (VPCPublicSubnet2RouteTableAssociation5A808732)
 19/35 | 17:13:13 | CREATE_IN_PROGRESS   | AWS::EC2::NatGateway                  | VPC/PublicSubnet2/NATGateway (VPCPublicSubnet2NATGateway3C070193)
 19/35 | 17:13:13 | CREATE_IN_PROGRESS   | AWS::EC2::Route                       | VPC/PublicSubnet2/DefaultRoute (VPCPublicSubnet2DefaultRouteB7481BBA) Resource creation Initiated
 19/35 | 17:13:13 | CREATE_IN_PROGRESS   | AWS::EC2::SubnetRouteTableAssociation | VPC/PrivateSubnet3/RouteTableAssociation (VPCPrivateSubnet3RouteTableAssociationC28D144E)
 19/35 | 17:13:13 | CREATE_IN_PROGRESS   | AWS::EC2::NatGateway                  | VPC/PublicSubnet1/NATGateway (VPCPublicSubnet1NATGatewayE0556630)
 19/35 | 17:13:13 | CREATE_IN_PROGRESS   | AWS::EC2::Route                       | VPC/PublicSubnet3/DefaultRoute (VPCPublicSubnet3DefaultRouteA0D29D46) Resource creation Initiated
 19/35 | 17:13:13 | CREATE_IN_PROGRESS   | AWS::EC2::SubnetRouteTableAssociation | VPC/PublicSubnet1/RouteTableAssociation (VPCPublicSubnet1RouteTableAssociation0B0896DC)
 19/35 | 17:13:13 | CREATE_IN_PROGRESS   | AWS::EC2::Route                       | VPC/PublicSubnet1/DefaultRoute (VPCPublicSubnet1DefaultRoute91CEF279) Resource creation Initiated
 19/35 | 17:13:14 | CREATE_IN_PROGRESS   | AWS::EC2::SubnetRouteTableAssociation | VPC/PrivateSubnet2/RouteTableAssociation (VPCPrivateSubnet2RouteTableAssociation0C73D413)
 19/35 | 17:13:14 | CREATE_IN_PROGRESS   | AWS::EC2::NatGateway                  | VPC/PublicSubnet2/NATGateway (VPCPublicSubnet2NATGateway3C070193) Resource creation Initiated
 19/35 | 17:13:14 | CREATE_IN_PROGRESS   | AWS::EC2::NatGateway                  | VPC/PublicSubnet1/NATGateway (VPCPublicSubnet1NATGatewayE0556630) Resource creation Initiated
 19/35 | 17:13:14 | CREATE_IN_PROGRESS   | AWS::EC2::NatGateway                  | VPC/PublicSubnet3/NATGateway (VPCPublicSubnet3NATGatewayD3048F5C)
 19/35 | 17:13:14 | CREATE_IN_PROGRESS   | AWS::EC2::SubnetRouteTableAssociation | VPC/PublicSubnet3/RouteTableAssociation (VPCPublicSubnet3RouteTableAssociation427FE0C6)
 19/35 | 17:13:14 | CREATE_IN_PROGRESS   | AWS::EC2::SubnetRouteTableAssociation | VPC/PublicSubnet2/RouteTableAssociation (VPCPublicSubnet2RouteTableAssociation5A808732) Resource creation Initiated
 19/35 | 17:13:14 | CREATE_IN_PROGRESS   | AWS::EC2::SubnetRouteTableAssociation | VPC/PrivateSubnet1/RouteTableAssociation (VPCPrivateSubnet1RouteTableAssociation347902D1)
 19/35 | 17:13:14 | CREATE_IN_PROGRESS   | AWS::EC2::SubnetRouteTableAssociation | VPC/PrivateSubnet3/RouteTableAssociation (VPCPrivateSubnet3RouteTableAssociationC28D144E) Resource creation Initiated
 19/35 | 17:13:14 | CREATE_IN_PROGRESS   | AWS::EC2::NatGateway                  | VPC/PublicSubnet3/NATGateway (VPCPublicSubnet3NATGatewayD3048F5C) Resource creation Initiated
 19/35 | 17:13:15 | CREATE_IN_PROGRESS   | AWS::EC2::SubnetRouteTableAssociation | VPC/PrivateSubnet2/RouteTableAssociation (VPCPrivateSubnet2RouteTableAssociation0C73D413) Resource creation Initiated
 19/35 | 17:13:15 | CREATE_IN_PROGRESS   | AWS::EC2::SubnetRouteTableAssociation | VPC/PublicSubnet1/RouteTableAssociation (VPCPublicSubnet1RouteTableAssociation0B0896DC) Resource creation Initiated
 19/35 | 17:13:15 | CREATE_IN_PROGRESS   | AWS::EC2::SubnetRouteTableAssociation | VPC/PublicSubnet3/RouteTableAssociation (VPCPublicSubnet3RouteTableAssociation427FE0C6) Resource creation Initiated
 19/35 | 17:13:15 | CREATE_IN_PROGRESS   | AWS::EC2::SubnetRouteTableAssociation | VPC/PrivateSubnet1/RouteTableAssociation (VPCPrivateSubnet1RouteTableAssociation347902D1) Resource creation Initiated
 20/35 | 17:13:29 | CREATE_COMPLETE      | AWS::EC2::Route                       | VPC/PublicSubnet2/DefaultRoute (VPCPublicSubnet2DefaultRouteB7481BBA)
 21/35 | 17:13:29 | CREATE_COMPLETE      | AWS::EC2::Route                       | VPC/PublicSubnet3/DefaultRoute (VPCPublicSubnet3DefaultRouteA0D29D46)
 22/35 | 17:13:29 | CREATE_COMPLETE      | AWS::EC2::Route                       | VPC/PublicSubnet1/DefaultRoute (VPCPublicSubnet1DefaultRoute91CEF279)
 23/35 | 17:13:30 | CREATE_COMPLETE      | AWS::EC2::SubnetRouteTableAssociation | VPC/PublicSubnet2/RouteTableAssociation (VPCPublicSubnet2RouteTableAssociation5A808732)
 24/35 | 17:13:30 | CREATE_COMPLETE      | AWS::EC2::SubnetRouteTableAssociation | VPC/PrivateSubnet3/RouteTableAssociation (VPCPrivateSubnet3RouteTableAssociationC28D144E)
 25/35 | 17:13:30 | CREATE_COMPLETE      | AWS::EC2::SubnetRouteTableAssociation | VPC/PrivateSubnet2/RouteTableAssociation (VPCPrivateSubnet2RouteTableAssociation0C73D413)
 26/35 | 17:13:30 | CREATE_COMPLETE      | AWS::EC2::SubnetRouteTableAssociation | VPC/PublicSubnet1/RouteTableAssociation (VPCPublicSubnet1RouteTableAssociation0B0896DC)
 27/35 | 17:13:31 | CREATE_COMPLETE      | AWS::EC2::SubnetRouteTableAssociation | VPC/PublicSubnet3/RouteTableAssociation (VPCPublicSubnet3RouteTableAssociation427FE0C6)
 28/35 | 17:13:31 | CREATE_COMPLETE      | AWS::EC2::SubnetRouteTableAssociation | VPC/PrivateSubnet1/RouteTableAssociation (VPCPrivateSubnet1RouteTableAssociation347902D1)
28/35 Currently in progress: AwsCdkVpcSampleStack, VPCPublicSubnet2NATGateway3C070193, VPCPublicSubnet1NATGatewayE0556630, VPCPublicSubnet3NATGatewayD3048F5C
 29/35 | 17:14:47 | CREATE_COMPLETE      | AWS::EC2::NatGateway                  | VPC/PublicSubnet3/NATGateway (VPCPublicSubnet3NATGatewayD3048F5C)
 30/35 | 17:14:47 | CREATE_COMPLETE      | AWS::EC2::NatGateway                  | VPC/PublicSubnet2/NATGateway (VPCPublicSubnet2NATGateway3C070193)
 30/35 | 17:14:51 | CREATE_IN_PROGRESS   | AWS::EC2::Route                       | VPC/PrivateSubnet3/DefaultRoute (VPCPrivateSubnet3DefaultRoute27F311AE)
 30/35 | 17:14:51 | CREATE_IN_PROGRESS   | AWS::EC2::Route                       | VPC/PrivateSubnet2/DefaultRoute (VPCPrivateSubnet2DefaultRouteF4F5CFD2)
 30/35 | 17:14:52 | CREATE_IN_PROGRESS   | AWS::EC2::Route                       | VPC/PrivateSubnet3/DefaultRoute (VPCPrivateSubnet3DefaultRoute27F311AE) Resource creation Initiated
 30/35 | 17:14:52 | CREATE_IN_PROGRESS   | AWS::EC2::Route                       | VPC/PrivateSubnet2/DefaultRoute (VPCPrivateSubnet2DefaultRouteF4F5CFD2) Resource creation Initiated
 31/35 | 17:15:03 | CREATE_COMPLETE      | AWS::EC2::NatGateway                  | VPC/PublicSubnet1/NATGateway (VPCPublicSubnet1NATGatewayE0556630)
 31/35 | 17:15:07 | CREATE_IN_PROGRESS   | AWS::EC2::Route                       | VPC/PrivateSubnet1/DefaultRoute (VPCPrivateSubnet1DefaultRouteAE1D6490)
 32/35 | 17:15:07 | CREATE_COMPLETE      | AWS::EC2::Route                       | VPC/PrivateSubnet3/DefaultRoute (VPCPrivateSubnet3DefaultRoute27F311AE)
 33/35 | 17:15:07 | CREATE_COMPLETE      | AWS::EC2::Route                       | VPC/PrivateSubnet2/DefaultRoute (VPCPrivateSubnet2DefaultRouteF4F5CFD2)
 33/35 | 17:15:07 | CREATE_IN_PROGRESS   | AWS::EC2::Route                       | VPC/PrivateSubnet1/DefaultRoute (VPCPrivateSubnet1DefaultRouteAE1D6490) Resource creation Initiated
 34/35 | 17:15:23 | CREATE_COMPLETE      | AWS::EC2::Route                       | VPC/PrivateSubnet1/DefaultRoute (VPCPrivateSubnet1DefaultRouteAE1D6490)
 35/35 | 17:15:25 | CREATE_COMPLETE      | AWS::CloudFormation::Stack            | AwsCdkVpcSampleStack

 ✅  AwsCdkVpcSampleStack

Stack ARN:
arn:aws:cloudformation:ap-northeast-1:xxxxxxxxxxxx:stack/AwsCdkVpcSampleStack/c8b80820-1641-11e9-a0e4-0aa20f14f06e
```
* 作成されたCFnスタックを確認します。

```sh:コマンド
$ aws cloudformation describe-stacks \
    --stack-name AwsCdkVpcSampleStack
```
```json:Output例
{
    "Stacks": [
        {
            "StackId": "arn:aws:cloudformation:ap-northeast-1:xxxxxxxx:stack/AwsCdkVpcSampleStack/c8b80820-1641-11e9-a0e4-0aa20f14f06e",
            "StackName": "AwsCdkVpcSampleStack",
            "ChangeSetId": "arn:aws:cloudformation:ap-northeast-1:xxxxxxxxxxxx:changeSet/CDK-32b9a889-3f7e-429b-8058-1190aa6be4f1/aa63d1ae-6aef-4a80-a397-7d9a8ff23361",
            "CreationTime": "2019-01-12T08:12:20.814Z",
            "LastUpdatedTime": "2019-01-12T08:12:26.347Z",
            "RollbackConfiguration": {},
            "StackStatus": "CREATE_COMPLETE",
            "DisableRollback": false,
            "NotificationARNs": [],
            "Capabilities": [
                "CAPABILITY_IAM",
                "CAPABILITY_NAMED_IAM"
            ],
            "Tags": [],
            "EnableTerminationProtection": false,
            "DriftInformation": {
                "StackDriftStatus": "NOT_CHECKED"
            }
        }
    ]
}
```

* VPC IDを確認します。

```sh:コマンド
$ aws cloudformation describe-stack-resources \
    --stack-name AwsCdkVpcSampleStack \
    --query StackResources[?ResourceType==\`AWS::EC2::VPC\`]
```
```json:Output例
[
    {
        "StackName": "AwsCdkVpcSampleStack",
        "StackId": "arn:aws:cloudformation:ap-northeast-1:xxxxxxxxxxxx:stack/AwsCdkVpcSampleStack/c8b80820-1641-11e9-a0e4-0aa20f14f06e",
        "LogicalResourceId": "VPCB9E5F0B4",
        "PhysicalResourceId": "vpc-0bf2dd4b8911a4c06",
        "ResourceType": "AWS::EC2::VPC",
        "Timestamp": "2019-01-12T08:12:50.036Z",
        "ResourceStatus": "CREATE_COMPLETE",
        "DriftInformation": {
            "StackResourceDriftStatus": "NOT_CHECKED"
        }
    }
]
```
* VPCを確認します。

```sh:コマンド
$ aws ec2 describe-vpcs --vpc-ids vpc-0bf2dd4b8911a4c06
```
```json:Output例
{
    "Vpcs": [
        {
            "CidrBlock": "10.0.0.0/16",
            "DhcpOptionsId": "dopt-a74006c0",
            "State": "available",
            "VpcId": "vpc-0bf2dd4b8911a4c06",
            "OwnerId": "xxxxxxxxxxxx",
            "InstanceTenancy": "default",
            "CidrBlockAssociationSet": [
                {
                    "AssociationId": "vpc-cidr-assoc-06e23c526e705716e",
                    "CidrBlock": "10.0.0.0/16",
                    "CidrBlockState": {
                        "State": "associated"
                    }
                }
            ],
            "IsDefault": false,
            "Tags": [
                {
                    "Key": "aws:cloudformation:stack-name",
                    "Value": "AwsCdkVpcSampleStack"
                },
                {
                    "Key": "Name",
                    "Value": "AwsCdkVpcSampleStack/VPC"
                },
                {
                    "Key": "aws:cloudformation:stack-id",
                    "Value": "arn:aws:cloudformation:ap-northeast-1:xxxxxxxxxxxx:stack/AwsCdkVpcSampleStack/c8b80820-1641-11e9-a0e4-0aa20f14f06e"
                },
                {
                    "Key": "aws:cloudformation:logical-id",
                    "Value": "VPCB9E5F0B4"
                }
            ]
        }
    ]
}
```

# VPC CIDR、Subnet Type、 Subnet CIDRを指定してVPCを作成する。
今度はVPCのCIDR、Subnet Type、 SubnetのCIDRを指定してVPCを作成します。新規に<code>aws-cdk-vpc-sample2</code>ディレクトリを作ってプロジェクトの初期化とec2モジュールのインストールを実施しておきます。

* <code>lib/aws-cdk-vpc-sample.ts</code>を編集します。

```typescript:lib/aws-cdk-vpc-sample.ts
import cdk = require('@aws-cdk/cdk');
import ec2 = require('@aws-cdk/aws-ec2');

export class AwsCdkVpcSample2Stack extends cdk.Stack {
  constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    new ec2.VpcNetwork(this, 'VPC', {
      cidr: '10.0.0.0/16',
      subnetConfiguration: [
        {
          cidrMask: 24,
          name: 'Ingress',
          subnetType: ec2.SubnetType.Public,
        },
        {
          cidrMask: 24,
          name: 'Application',
          subnetType: ec2.SubnetType.Private,
        },
        {
          cidrMask: 28,
          name: 'Database',
          subnetType: ec2.SubnetType.Isolated,
        }
      ],
    });
  }
}
```
雛形として用意されているSubnet Typeには以下があり、ルートテーブルが適切に設定されます。

|サブネット種類|通信ポリシー|
|:--|:--|
|Public|インターネットと両方向に通信可能|
|Private|インターネットへはNATGWを通してアウトバウンドのみ通信可能|
|Isolated|インターネットへは通信不可|

* <code>bin/aws-cdk-vpc-sample2.ts</code>を編集し、リージョンをStack作成時のプロパティとして指定してみます。

```typescript:bin/aws-cdk-vpc-sample2.ts
#!/usr/bin/env node
import cdk = require('@aws-cdk/cdk');
import { AwsCdkVpcSample2Stack } from '../lib/aws-cdk-vpc-sample2-stack';

const app = new cdk.App();
new AwsCdkVpcSample2Stack(app, 'AwsCdkVpcSample2Stack', { env: { region: 'ap-northeast-1' } });    //展開するリージョンを指定する。ここに展開するアカウントも指定可能。
app.run();
```

* ビルドします。

```sh:コマンド
$ npm run build
```
* <code>cdk diff</code>コマンドを実行すると作成されるリソースが表示されます。<br>AWSクレデンシャルが設定されていないとエラーになります。

```:コマンド
$ cdk diff
```
```:Output例
Resources
[+] AWS::EC2::VPC VPC VPCB9E5F0B4
[+] AWS::EC2::Subnet VPC/IngressSubnet1/Subnet VPCIngressSubnet1Subnet4257CD65
[+] AWS::EC2::RouteTable VPC/IngressSubnet1/RouteTable VPCIngressSubnet1RouteTable9BE753A6
[+] AWS::EC2::SubnetRouteTableAssociation VPC/IngressSubnet1/RouteTableAssociation VPCIngressSubnet1RouteTableAssociationCAFE4089
[+] AWS::EC2::Route VPC/IngressSubnet1/DefaultRoute VPCIngressSubnet1DefaultRouteFE025494
[+] AWS::EC2::EIP VPC/IngressSubnet1/EIP VPCIngressSubnet1EIP99406D22
[+] AWS::EC2::NatGateway VPC/IngressSubnet1/NATGateway VPCIngressSubnet1NATGatewayEA4AE80E
[+] AWS::EC2::Subnet VPC/IngressSubnet2/Subnet VPCIngressSubnet2SubnetE0EA735B
[+] AWS::EC2::RouteTable VPC/IngressSubnet2/RouteTable VPCIngressSubnet2RouteTableDFE1B4BC
[+] AWS::EC2::SubnetRouteTableAssociation VPC/IngressSubnet2/RouteTableAssociation VPCIngressSubnet2RouteTableAssociationB244DE25
[+] AWS::EC2::Route VPC/IngressSubnet2/DefaultRoute VPCIngressSubnet2DefaultRoute9FF8300E
[+] AWS::EC2::EIP VPC/IngressSubnet2/EIP VPCIngressSubnet2EIPCE44C233
[+] AWS::EC2::NatGateway VPC/IngressSubnet2/NATGateway VPCIngressSubnet2NATGateway68BB4190
[+] AWS::EC2::Subnet VPC/IngressSubnet3/Subnet VPCIngressSubnet3Subnet5B03B6AE
[+] AWS::EC2::RouteTable VPC/IngressSubnet3/RouteTable VPCIngressSubnet3RouteTableBA29E68D
[+] AWS::EC2::SubnetRouteTableAssociation VPC/IngressSubnet3/RouteTableAssociation VPCIngressSubnet3RouteTableAssociationF8544212
[+] AWS::EC2::Route VPC/IngressSubnet3/DefaultRoute VPCIngressSubnet3DefaultRouteD4DCD60F
[+] AWS::EC2::EIP VPC/IngressSubnet3/EIP VPCIngressSubnet3EIP7A19F11D
[+] AWS::EC2::NatGateway VPC/IngressSubnet3/NATGateway VPCIngressSubnet3NATGatewayF804BFD1
[+] AWS::EC2::Subnet VPC/ApplicationSubnet1/Subnet VPCApplicationSubnet1SubnetCE118F80
[+] AWS::EC2::RouteTable VPC/ApplicationSubnet1/RouteTable VPCApplicationSubnet1RouteTable5B6CE71A
[+] AWS::EC2::SubnetRouteTableAssociation VPC/ApplicationSubnet1/RouteTableAssociation VPCApplicationSubnet1RouteTableAssociation8DF0EAE5
[+] AWS::EC2::Route VPC/ApplicationSubnet1/DefaultRoute VPCApplicationSubnet1DefaultRouteA4E47D36
[+] AWS::EC2::Subnet VPC/ApplicationSubnet2/Subnet VPCApplicationSubnet2Subnet988E96B1
[+] AWS::EC2::RouteTable VPC/ApplicationSubnet2/RouteTable VPCApplicationSubnet2RouteTableFDC3EEE6
[+] AWS::EC2::SubnetRouteTableAssociation VPC/ApplicationSubnet2/RouteTableAssociation VPCApplicationSubnet2RouteTableAssociationD84040F3
[+] AWS::EC2::Route VPC/ApplicationSubnet2/DefaultRoute VPCApplicationSubnet2DefaultRouteC3680A52
[+] AWS::EC2::Subnet VPC/ApplicationSubnet3/Subnet VPCApplicationSubnet3Subnet152008D5
[+] AWS::EC2::RouteTable VPC/ApplicationSubnet3/RouteTable VPCApplicationSubnet3RouteTable29639657
[+] AWS::EC2::SubnetRouteTableAssociation VPC/ApplicationSubnet3/RouteTableAssociation VPCApplicationSubnet3RouteTableAssociationB4462F03
[+] AWS::EC2::Route VPC/ApplicationSubnet3/DefaultRoute VPCApplicationSubnet3DefaultRoute33D8EB24
[+] AWS::EC2::Subnet VPC/DatabaseSubnet1/Subnet VPCDatabaseSubnet1Subnet3E790B6F
[+] AWS::EC2::RouteTable VPC/DatabaseSubnet1/RouteTable VPCDatabaseSubnet1RouteTable50155611
[+] AWS::EC2::SubnetRouteTableAssociation VPC/DatabaseSubnet1/RouteTableAssociation VPCDatabaseSubnet1RouteTableAssociation56EE26FE
[+] AWS::EC2::Subnet VPC/DatabaseSubnet2/Subnet VPCDatabaseSubnet2Subnet93B13DD5
[+] AWS::EC2::RouteTable VPC/DatabaseSubnet2/RouteTable VPCDatabaseSubnet2RouteTable5A3ECF56
[+] AWS::EC2::SubnetRouteTableAssociation VPC/DatabaseSubnet2/RouteTableAssociation VPCDatabaseSubnet2RouteTableAssociation2350B25C
[+] AWS::EC2::Subnet VPC/DatabaseSubnet3/Subnet VPCDatabaseSubnet3SubnetBC9F7BFD
[+] AWS::EC2::RouteTable VPC/DatabaseSubnet3/RouteTable VPCDatabaseSubnet3RouteTableF4BFD0C7
[+] AWS::EC2::SubnetRouteTableAssociation VPC/DatabaseSubnet3/RouteTableAssociation VPCDatabaseSubnet3RouteTableAssociationC74EC212
[+] AWS::EC2::InternetGateway VPC/IGW VPCIGWB7E252D3
[+] AWS::EC2::VPCGatewayAttachment VPC/VPCGW VPCVPCGW99B986DC
```

* CDKによって作成されるCloudFormationスタックのテンプレート(Resources)を確認します。

```sh:コマンド
$ cdk synth AwsCdkVpcSample2Stack
```
```yaml:Output例
Resources:
  VPCB9E5F0B4:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
      EnableDnsHostnames: true
      EnableDnsSupport: true
      InstanceTenancy: default
      Tags:
        - Key: Name
          Value: AwsCdkVpcSample2Stack/VPC
    Metadata:
      aws:cdk:path: AwsCdkVpcSample2Stack/VPC/Resource
  VPCIngressSubnet1Subnet4257CD65:
    Type: AWS::EC2::Subnet
    Properties:
      CidrBlock: 10.0.0.0/24
      VpcId:
        Ref: VPCB9E5F0B4
      AvailabilityZone: ap-northeast-1a
      MapPublicIpOnLaunch: true
      Tags:
        - Key: Name
          Value: AwsCdkVpcSample2Stack/VPC/IngressSubnet1
        - Key: aws-cdk:subnet-name
          Value: Ingress
        - Key: aws-cdk:subnet-type
          Value: Public
    Metadata:
      aws:cdk:path: AwsCdkVpcSample2Stack/VPC/IngressSubnet1/Subnet
  VPCIngressSubnet1RouteTable9BE753A6:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId:
        Ref: VPCB9E5F0B4
      Tags:
        - Key: Name
          Value: AwsCdkVpcSample2Stack/VPC/IngressSubnet1
    Metadata:
      aws:cdk:path: AwsCdkVpcSample2Stack/VPC/IngressSubnet1/RouteTable
  VPCIngressSubnet1RouteTableAssociationCAFE4089:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      RouteTableId:
        Ref: VPCIngressSubnet1RouteTable9BE753A6
      SubnetId:
        Ref: VPCIngressSubnet1Subnet4257CD65
    Metadata:
      aws:cdk:path: AwsCdkVpcSample2Stack/VPC/IngressSubnet1/RouteTableAssociation
  VPCIngressSubnet1DefaultRouteFE025494:
    Type: AWS::EC2::Route
    Properties:
      RouteTableId:
        Ref: VPCIngressSubnet1RouteTable9BE753A6
      DestinationCidrBlock: 0.0.0.0/0
      GatewayId:
        Ref: VPCIGWB7E252D3
    DependsOn:
      - VPCVPCGW99B986DC
    Metadata:
      aws:cdk:path: AwsCdkVpcSample2Stack/VPC/IngressSubnet1/DefaultRoute
  VPCIngressSubnet1EIP99406D22:
    Type: AWS::EC2::EIP
    Properties:
      Domain: vpc
    Metadata:
      aws:cdk:path: AwsCdkVpcSample2Stack/VPC/IngressSubnet1/EIP
  VPCIngressSubnet1NATGatewayEA4AE80E:
    Type: AWS::EC2::NatGateway
    Properties:
      AllocationId:
        Fn::GetAtt:
          - VPCIngressSubnet1EIP99406D22
          - AllocationId
      SubnetId:
        Ref: VPCIngressSubnet1Subnet4257CD65
      Tags:
        - Key: Name
          Value: AwsCdkVpcSample2Stack/VPC/IngressSubnet1
    Metadata:
      aws:cdk:path: AwsCdkVpcSample2Stack/VPC/IngressSubnet1/NATGateway
  VPCIngressSubnet2SubnetE0EA735B:
    Type: AWS::EC2::Subnet
    Properties:
      CidrBlock: 10.0.1.0/24
      VpcId:
        Ref: VPCB9E5F0B4
      AvailabilityZone: ap-northeast-1c
      MapPublicIpOnLaunch: true
      Tags:
        - Key: Name
          Value: AwsCdkVpcSample2Stack/VPC/IngressSubnet2
        - Key: aws-cdk:subnet-name
          Value: Ingress
        - Key: aws-cdk:subnet-type
          Value: Public
    Metadata:
      aws:cdk:path: AwsCdkVpcSample2Stack/VPC/IngressSubnet2/Subnet
  VPCIngressSubnet2RouteTableDFE1B4BC:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId:
        Ref: VPCB9E5F0B4
      Tags:
        - Key: Name
          Value: AwsCdkVpcSample2Stack/VPC/IngressSubnet2
    Metadata:
      aws:cdk:path: AwsCdkVpcSample2Stack/VPC/IngressSubnet2/RouteTable
  VPCIngressSubnet2RouteTableAssociationB244DE25:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      RouteTableId:
        Ref: VPCIngressSubnet2RouteTableDFE1B4BC
      SubnetId:
        Ref: VPCIngressSubnet2SubnetE0EA735B
    Metadata:
      aws:cdk:path: AwsCdkVpcSample2Stack/VPC/IngressSubnet2/RouteTableAssociation
  VPCIngressSubnet2DefaultRoute9FF8300E:
    Type: AWS::EC2::Route
    Properties:
      RouteTableId:
        Ref: VPCIngressSubnet2RouteTableDFE1B4BC
      DestinationCidrBlock: 0.0.0.0/0
      GatewayId:
        Ref: VPCIGWB7E252D3
    DependsOn:
      - VPCVPCGW99B986DC
    Metadata:
      aws:cdk:path: AwsCdkVpcSample2Stack/VPC/IngressSubnet2/DefaultRoute
  VPCIngressSubnet2EIPCE44C233:
    Type: AWS::EC2::EIP
    Properties:
      Domain: vpc
    Metadata:
      aws:cdk:path: AwsCdkVpcSample2Stack/VPC/IngressSubnet2/EIP
  VPCIngressSubnet2NATGateway68BB4190:
    Type: AWS::EC2::NatGateway
    Properties:
      AllocationId:
        Fn::GetAtt:
          - VPCIngressSubnet2EIPCE44C233
          - AllocationId
      SubnetId:
        Ref: VPCIngressSubnet2SubnetE0EA735B
      Tags:
        - Key: Name
          Value: AwsCdkVpcSample2Stack/VPC/IngressSubnet2
    Metadata:
      aws:cdk:path: AwsCdkVpcSample2Stack/VPC/IngressSubnet2/NATGateway
  VPCIngressSubnet3Subnet5B03B6AE:
    Type: AWS::EC2::Subnet
    Properties:
      CidrBlock: 10.0.2.0/24
      VpcId:
        Ref: VPCB9E5F0B4
      AvailabilityZone: ap-northeast-1d
      MapPublicIpOnLaunch: true
      Tags:
        - Key: Name
          Value: AwsCdkVpcSample2Stack/VPC/IngressSubnet3
        - Key: aws-cdk:subnet-name
          Value: Ingress
        - Key: aws-cdk:subnet-type
          Value: Public
    Metadata:
      aws:cdk:path: AwsCdkVpcSample2Stack/VPC/IngressSubnet3/Subnet
  VPCIngressSubnet3RouteTableBA29E68D:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId:
        Ref: VPCB9E5F0B4
      Tags:
        - Key: Name
          Value: AwsCdkVpcSample2Stack/VPC/IngressSubnet3
    Metadata:
      aws:cdk:path: AwsCdkVpcSample2Stack/VPC/IngressSubnet3/RouteTable
  VPCIngressSubnet3RouteTableAssociationF8544212:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      RouteTableId:
        Ref: VPCIngressSubnet3RouteTableBA29E68D
      SubnetId:
        Ref: VPCIngressSubnet3Subnet5B03B6AE
    Metadata:
      aws:cdk:path: AwsCdkVpcSample2Stack/VPC/IngressSubnet3/RouteTableAssociation
  VPCIngressSubnet3DefaultRouteD4DCD60F:
    Type: AWS::EC2::Route
    Properties:
      RouteTableId:
        Ref: VPCIngressSubnet3RouteTableBA29E68D
      DestinationCidrBlock: 0.0.0.0/0
      GatewayId:
        Ref: VPCIGWB7E252D3
    DependsOn:
      - VPCVPCGW99B986DC
    Metadata:
      aws:cdk:path: AwsCdkVpcSample2Stack/VPC/IngressSubnet3/DefaultRoute
  VPCIngressSubnet3EIP7A19F11D:
    Type: AWS::EC2::EIP
    Properties:
      Domain: vpc
    Metadata:
      aws:cdk:path: AwsCdkVpcSample2Stack/VPC/IngressSubnet3/EIP
  VPCIngressSubnet3NATGatewayF804BFD1:
    Type: AWS::EC2::NatGateway
    Properties:
      AllocationId:
        Fn::GetAtt:
          - VPCIngressSubnet3EIP7A19F11D
          - AllocationId
      SubnetId:
        Ref: VPCIngressSubnet3Subnet5B03B6AE
      Tags:
        - Key: Name
          Value: AwsCdkVpcSample2Stack/VPC/IngressSubnet3
    Metadata:
      aws:cdk:path: AwsCdkVpcSample2Stack/VPC/IngressSubnet3/NATGateway
  VPCApplicationSubnet1SubnetCE118F80:
    Type: AWS::EC2::Subnet
    Properties:
      CidrBlock: 10.0.3.0/24
      VpcId:
        Ref: VPCB9E5F0B4
      AvailabilityZone: ap-northeast-1a
      MapPublicIpOnLaunch: false
      Tags:
        - Key: Name
          Value: AwsCdkVpcSample2Stack/VPC/ApplicationSubnet1
        - Key: aws-cdk:subnet-name
          Value: Application
        - Key: aws-cdk:subnet-type
          Value: Private
    Metadata:
      aws:cdk:path: AwsCdkVpcSample2Stack/VPC/ApplicationSubnet1/Subnet
  VPCApplicationSubnet1RouteTable5B6CE71A:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId:
        Ref: VPCB9E5F0B4
      Tags:
        - Key: Name
          Value: AwsCdkVpcSample2Stack/VPC/ApplicationSubnet1
    Metadata:
      aws:cdk:path: AwsCdkVpcSample2Stack/VPC/ApplicationSubnet1/RouteTable
  VPCApplicationSubnet1RouteTableAssociation8DF0EAE5:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      RouteTableId:
        Ref: VPCApplicationSubnet1RouteTable5B6CE71A
      SubnetId:
        Ref: VPCApplicationSubnet1SubnetCE118F80
    Metadata:
      aws:cdk:path: AwsCdkVpcSample2Stack/VPC/ApplicationSubnet1/RouteTableAssociation
  VPCApplicationSubnet1DefaultRouteA4E47D36:
    Type: AWS::EC2::Route
    Properties:
      RouteTableId:
        Ref: VPCApplicationSubnet1RouteTable5B6CE71A
      DestinationCidrBlock: 0.0.0.0/0
      NatGatewayId:
        Ref: VPCIngressSubnet1NATGatewayEA4AE80E
    Metadata:
      aws:cdk:path: AwsCdkVpcSample2Stack/VPC/ApplicationSubnet1/DefaultRoute
  VPCApplicationSubnet2Subnet988E96B1:
    Type: AWS::EC2::Subnet
    Properties:
      CidrBlock: 10.0.4.0/24
      VpcId:
        Ref: VPCB9E5F0B4
      AvailabilityZone: ap-northeast-1c
      MapPublicIpOnLaunch: false
      Tags:
        - Key: Name
          Value: AwsCdkVpcSample2Stack/VPC/ApplicationSubnet2
        - Key: aws-cdk:subnet-name
          Value: Application
        - Key: aws-cdk:subnet-type
          Value: Private
    Metadata:
      aws:cdk:path: AwsCdkVpcSample2Stack/VPC/ApplicationSubnet2/Subnet
  VPCApplicationSubnet2RouteTableFDC3EEE6:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId:
        Ref: VPCB9E5F0B4
      Tags:
        - Key: Name
          Value: AwsCdkVpcSample2Stack/VPC/ApplicationSubnet2
    Metadata:
      aws:cdk:path: AwsCdkVpcSample2Stack/VPC/ApplicationSubnet2/RouteTable
  VPCApplicationSubnet2RouteTableAssociationD84040F3:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      RouteTableId:
        Ref: VPCApplicationSubnet2RouteTableFDC3EEE6
      SubnetId:
        Ref: VPCApplicationSubnet2Subnet988E96B1
    Metadata:
      aws:cdk:path: AwsCdkVpcSample2Stack/VPC/ApplicationSubnet2/RouteTableAssociation
  VPCApplicationSubnet2DefaultRouteC3680A52:
    Type: AWS::EC2::Route
    Properties:
      RouteTableId:
        Ref: VPCApplicationSubnet2RouteTableFDC3EEE6
      DestinationCidrBlock: 0.0.0.0/0
      NatGatewayId:
        Ref: VPCIngressSubnet2NATGateway68BB4190
    Metadata:
      aws:cdk:path: AwsCdkVpcSample2Stack/VPC/ApplicationSubnet2/DefaultRoute
  VPCApplicationSubnet3Subnet152008D5:
    Type: AWS::EC2::Subnet
    Properties:
      CidrBlock: 10.0.5.0/24
      VpcId:
        Ref: VPCB9E5F0B4
      AvailabilityZone: ap-northeast-1d
      MapPublicIpOnLaunch: false
      Tags:
        - Key: Name
          Value: AwsCdkVpcSample2Stack/VPC/ApplicationSubnet3
        - Key: aws-cdk:subnet-name
          Value: Application
        - Key: aws-cdk:subnet-type
          Value: Private
    Metadata:
      aws:cdk:path: AwsCdkVpcSample2Stack/VPC/ApplicationSubnet3/Subnet
  VPCApplicationSubnet3RouteTable29639657:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId:
        Ref: VPCB9E5F0B4
      Tags:
        - Key: Name
          Value: AwsCdkVpcSample2Stack/VPC/ApplicationSubnet3
    Metadata:
      aws:cdk:path: AwsCdkVpcSample2Stack/VPC/ApplicationSubnet3/RouteTable
  VPCApplicationSubnet3RouteTableAssociationB4462F03:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      RouteTableId:
        Ref: VPCApplicationSubnet3RouteTable29639657
      SubnetId:
        Ref: VPCApplicationSubnet3Subnet152008D5
    Metadata:
      aws:cdk:path: AwsCdkVpcSample2Stack/VPC/ApplicationSubnet3/RouteTableAssociation
  VPCApplicationSubnet3DefaultRoute33D8EB24:
    Type: AWS::EC2::Route
    Properties:
      RouteTableId:
        Ref: VPCApplicationSubnet3RouteTable29639657
      DestinationCidrBlock: 0.0.0.0/0
      NatGatewayId:
        Ref: VPCIngressSubnet3NATGatewayF804BFD1
    Metadata:
      aws:cdk:path: AwsCdkVpcSample2Stack/VPC/ApplicationSubnet3/DefaultRoute
  VPCDatabaseSubnet1Subnet3E790B6F:
    Type: AWS::EC2::Subnet
    Properties:
      CidrBlock: 10.0.6.0/28
      VpcId:
        Ref: VPCB9E5F0B4
      AvailabilityZone: ap-northeast-1a
      MapPublicIpOnLaunch: false
      Tags:
        - Key: Name
          Value: AwsCdkVpcSample2Stack/VPC/DatabaseSubnet1
        - Key: aws-cdk:subnet-type
          Value: Isolated
        - Key: aws-cdk:subnet-name
          Value: Database
    Metadata:
      aws:cdk:path: AwsCdkVpcSample2Stack/VPC/DatabaseSubnet1/Subnet
  VPCDatabaseSubnet1RouteTable50155611:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId:
        Ref: VPCB9E5F0B4
      Tags:
        - Key: Name
          Value: AwsCdkVpcSample2Stack/VPC/DatabaseSubnet1
    Metadata:
      aws:cdk:path: AwsCdkVpcSample2Stack/VPC/DatabaseSubnet1/RouteTable
  VPCDatabaseSubnet1RouteTableAssociation56EE26FE:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      RouteTableId:
        Ref: VPCDatabaseSubnet1RouteTable50155611
      SubnetId:
        Ref: VPCDatabaseSubnet1Subnet3E790B6F
    Metadata:
      aws:cdk:path: AwsCdkVpcSample2Stack/VPC/DatabaseSubnet1/RouteTableAssociation
  VPCDatabaseSubnet2Subnet93B13DD5:
    Type: AWS::EC2::Subnet
    Properties:
      CidrBlock: 10.0.6.16/28
      VpcId:
        Ref: VPCB9E5F0B4
      AvailabilityZone: ap-northeast-1c
      MapPublicIpOnLaunch: false
      Tags:
        - Key: Name
          Value: AwsCdkVpcSample2Stack/VPC/DatabaseSubnet2
        - Key: aws-cdk:subnet-type
          Value: Isolated
        - Key: aws-cdk:subnet-name
          Value: Database
    Metadata:
      aws:cdk:path: AwsCdkVpcSample2Stack/VPC/DatabaseSubnet2/Subnet
  VPCDatabaseSubnet2RouteTable5A3ECF56:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId:
        Ref: VPCB9E5F0B4
      Tags:
        - Key: Name
          Value: AwsCdkVpcSample2Stack/VPC/DatabaseSubnet2
    Metadata:
      aws:cdk:path: AwsCdkVpcSample2Stack/VPC/DatabaseSubnet2/RouteTable
  VPCDatabaseSubnet2RouteTableAssociation2350B25C:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      RouteTableId:
        Ref: VPCDatabaseSubnet2RouteTable5A3ECF56
      SubnetId:
        Ref: VPCDatabaseSubnet2Subnet93B13DD5
    Metadata:
      aws:cdk:path: AwsCdkVpcSample2Stack/VPC/DatabaseSubnet2/RouteTableAssociation
  VPCDatabaseSubnet3SubnetBC9F7BFD:
    Type: AWS::EC2::Subnet
    Properties:
      CidrBlock: 10.0.6.32/28
      VpcId:
        Ref: VPCB9E5F0B4
      AvailabilityZone: ap-northeast-1d
      MapPublicIpOnLaunch: false
      Tags:
        - Key: Name
          Value: AwsCdkVpcSample2Stack/VPC/DatabaseSubnet3
        - Key: aws-cdk:subnet-type
          Value: Isolated
        - Key: aws-cdk:subnet-name
          Value: Database
    Metadata:
      aws:cdk:path: AwsCdkVpcSample2Stack/VPC/DatabaseSubnet3/Subnet
  VPCDatabaseSubnet3RouteTableF4BFD0C7:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId:
        Ref: VPCB9E5F0B4
      Tags:
        - Key: Name
          Value: AwsCdkVpcSample2Stack/VPC/DatabaseSubnet3
    Metadata:
      aws:cdk:path: AwsCdkVpcSample2Stack/VPC/DatabaseSubnet3/RouteTable
  VPCDatabaseSubnet3RouteTableAssociationC74EC212:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      RouteTableId:
        Ref: VPCDatabaseSubnet3RouteTableF4BFD0C7
      SubnetId:
        Ref: VPCDatabaseSubnet3SubnetBC9F7BFD
    Metadata:
      aws:cdk:path: AwsCdkVpcSample2Stack/VPC/DatabaseSubnet3/RouteTableAssociation
  VPCIGWB7E252D3:
    Type: AWS::EC2::InternetGateway
    Properties:
      Tags:
        - Key: Name
          Value: AwsCdkVpcSample2Stack/VPC
    Metadata:
      aws:cdk:path: AwsCdkVpcSample2Stack/VPC/IGW
  VPCVPCGW99B986DC:
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:
      VpcId:
        Ref: VPCB9E5F0B4
      InternetGatewayId:
        Ref: VPCIGWB7E252D3
    Metadata:
      aws:cdk:path: AwsCdkVpcSample2Stack/VPC/VPCGW
  CDKMetadata:
    Type: AWS::CDK::Metadata
    Properties:
      Modules: aws-cdk=0.22.0,@aws-cdk/aws-ec2=0.22.0,@aws-cdk/cdk=0.22.0,@aws-cdk/cx-api=0.22.0,jsii-runtime=node.js/v10.2.1
```

* スタックをデプロイします。

```sh:コマンド
$ cdk deploy
```
```:Output例
AwsCdkVpcSample2Stack: deploying...
AwsCdkVpcSample2Stack: creating CloudFormation changeset...
  0/44 | 18:23:21 | CREATE_IN_PROGRESS   | AWS::CloudFormation::Stack            | AwsCdkVpcSample2Stack User Initiated
  0/44 | 18:23:26 | CREATE_IN_PROGRESS   | AWS::CDK::Metadata                    | CDKMetadata
  0/44 | 18:23:27 | CREATE_IN_PROGRESS   | AWS::EC2::EIP                         | VPC/IngressSubnet3/EIP (VPCIngressSubnet3EIP7A19F11D)
  0/44 | 18:23:27 | CREATE_IN_PROGRESS   | AWS::EC2::EIP                         | VPC/IngressSubnet2/EIP (VPCIngressSubnet2EIPCE44C233)
  0/44 | 18:23:27 | CREATE_IN_PROGRESS   | AWS::EC2::InternetGateway             | VPC/IGW (VPCIGWB7E252D3)
  0/44 | 18:23:27 | CREATE_IN_PROGRESS   | AWS::EC2::VPC                         | VPC (VPCB9E5F0B4)
  0/44 | 18:23:27 | CREATE_IN_PROGRESS   | AWS::EC2::EIP                         | VPC/IngressSubnet1/EIP (VPCIngressSubnet1EIP99406D22)
  0/44 | 18:23:27 | CREATE_IN_PROGRESS   | AWS::EC2::EIP                         | VPC/IngressSubnet3/EIP (VPCIngressSubnet3EIP7A19F11D) Resource creation Initiated
  0/44 | 18:23:27 | CREATE_IN_PROGRESS   | AWS::EC2::InternetGateway             | VPC/IGW (VPCIGWB7E252D3) Resource creation Initiated
  0/44 | 18:23:27 | CREATE_IN_PROGRESS   | AWS::EC2::EIP                         | VPC/IngressSubnet2/EIP (VPCIngressSubnet2EIPCE44C233) Resource creation Initiated
  0/44 | 18:23:27 | CREATE_IN_PROGRESS   | AWS::EC2::EIP                         | VPC/IngressSubnet1/EIP (VPCIngressSubnet1EIP99406D22) Resource creation Initiated
  0/44 | 18:23:27 | CREATE_IN_PROGRESS   | AWS::EC2::VPC                         | VPC (VPCB9E5F0B4) Resource creation Initiated
  0/44 | 18:23:29 | CREATE_IN_PROGRESS   | AWS::CDK::Metadata                    | CDKMetadata Resource creation Initiated
  1/44 | 18:23:29 | CREATE_COMPLETE      | AWS::CDK::Metadata                    | CDKMetadata
  2/44 | 18:23:43 | CREATE_COMPLETE      | AWS::EC2::EIP                         | VPC/IngressSubnet3/EIP (VPCIngressSubnet3EIP7A19F11D)
  3/44 | 18:23:43 | CREATE_COMPLETE      | AWS::EC2::EIP                         | VPC/IngressSubnet1/EIP (VPCIngressSubnet1EIP99406D22)
  4/44 | 18:23:43 | CREATE_COMPLETE      | AWS::EC2::EIP                         | VPC/IngressSubnet2/EIP (VPCIngressSubnet2EIPCE44C233)
  5/44 | 18:23:43 | CREATE_COMPLETE      | AWS::EC2::InternetGateway             | VPC/IGW (VPCIGWB7E252D3)
  6/44 | 18:23:44 | CREATE_COMPLETE      | AWS::EC2::VPC                         | VPC (VPCB9E5F0B4)
  6/44 | 18:23:47 | CREATE_IN_PROGRESS   | AWS::EC2::Subnet                      | VPC/ApplicationSubnet1/Subnet (VPCApplicationSubnet1SubnetCE118F80)
  6/44 | 18:23:48 | CREATE_IN_PROGRESS   | AWS::EC2::Subnet                      | VPC/DatabaseSubnet2/Subnet (VPCDatabaseSubnet2Subnet93B13DD5)
  6/44 | 18:23:48 | CREATE_IN_PROGRESS   | AWS::EC2::RouteTable                  | VPC/IngressSubnet1/RouteTable (VPCIngressSubnet1RouteTable9BE753A6)
  6/44 | 18:23:48 | CREATE_IN_PROGRESS   | AWS::EC2::RouteTable                  | VPC/IngressSubnet3/RouteTable (VPCIngressSubnet3RouteTableBA29E68D)
  6/44 | 18:23:48 | CREATE_IN_PROGRESS   | AWS::EC2::Subnet                      | VPC/ApplicationSubnet3/Subnet (VPCApplicationSubnet3Subnet152008D5)
  6/44 | 18:23:48 | CREATE_IN_PROGRESS   | AWS::EC2::Subnet                      | VPC/DatabaseSubnet1/Subnet (VPCDatabaseSubnet1Subnet3E790B6F)
  6/44 | 18:23:48 | CREATE_IN_PROGRESS   | AWS::EC2::RouteTable                  | VPC/ApplicationSubnet1/RouteTable (VPCApplicationSubnet1RouteTable5B6CE71A)
  6/44 | 18:23:48 | CREATE_IN_PROGRESS   | AWS::EC2::Subnet                      | VPC/IngressSubnet1/Subnet (VPCIngressSubnet1Subnet4257CD65)
  6/44 | 18:23:48 | CREATE_IN_PROGRESS   | AWS::EC2::Subnet                      | VPC/IngressSubnet3/Subnet (VPCIngressSubnet3Subnet5B03B6AE)
  6/44 | 18:23:48 | CREATE_IN_PROGRESS   | AWS::EC2::Subnet                      | VPC/ApplicationSubnet2/Subnet (VPCApplicationSubnet2Subnet988E96B1)
  6/44 | 18:23:48 | CREATE_IN_PROGRESS   | AWS::EC2::RouteTable                  | VPC/ApplicationSubnet2/RouteTable (VPCApplicationSubnet2RouteTableFDC3EEE6)
  6/44 | 18:23:48 | CREATE_IN_PROGRESS   | AWS::EC2::RouteTable                  | VPC/DatabaseSubnet2/RouteTable (VPCDatabaseSubnet2RouteTable5A3ECF56)
  6/44 | 18:23:48 | CREATE_IN_PROGRESS   | AWS::EC2::VPCGatewayAttachment        | VPC/VPCGW (VPCVPCGW99B986DC)
  6/44 | 18:23:48 | CREATE_IN_PROGRESS   | AWS::EC2::Subnet                      | VPC/DatabaseSubnet3/Subnet (VPCDatabaseSubnet3SubnetBC9F7BFD)
  6/44 | 18:23:48 | CREATE_IN_PROGRESS   | AWS::EC2::RouteTable                  | VPC/IngressSubnet2/RouteTable (VPCIngressSubnet2RouteTableDFE1B4BC)
  6/44 | 18:23:48 | CREATE_IN_PROGRESS   | AWS::EC2::RouteTable                  | VPC/ApplicationSubnet3/RouteTable (VPCApplicationSubnet3RouteTable29639657)
  6/44 | 18:23:48 | CREATE_IN_PROGRESS   | AWS::EC2::RouteTable                  | VPC/DatabaseSubnet1/RouteTable (VPCDatabaseSubnet1RouteTable50155611)
  6/44 | 18:23:48 | CREATE_IN_PROGRESS   | AWS::EC2::Subnet                      | VPC/IngressSubnet2/Subnet (VPCIngressSubnet2SubnetE0EA735B)
  6/44 | 18:23:48 | CREATE_IN_PROGRESS   | AWS::EC2::RouteTable                  | VPC/IngressSubnet1/RouteTable (VPCIngressSubnet1RouteTable9BE753A6) Resource creation Initiated
  6/44 | 18:23:48 | CREATE_IN_PROGRESS   | AWS::EC2::Subnet                      | VPC/ApplicationSubnet1/Subnet (VPCApplicationSubnet1SubnetCE118F80) Resource creation Initiated
  6/44 | 18:23:48 | CREATE_IN_PROGRESS   | AWS::EC2::RouteTable                  | VPC/IngressSubnet3/RouteTable (VPCIngressSubnet3RouteTableBA29E68D) Resource creation Initiated
  6/44 | 18:23:48 | CREATE_IN_PROGRESS   | AWS::EC2::Subnet                      | VPC/DatabaseSubnet2/Subnet (VPCDatabaseSubnet2Subnet93B13DD5) Resource creation Initiated
  6/44 | 18:23:48 | CREATE_IN_PROGRESS   | AWS::EC2::RouteTable                  | VPC/DatabaseSubnet3/RouteTable (VPCDatabaseSubnet3RouteTableF4BFD0C7)
  6/44 | 18:23:48 | CREATE_IN_PROGRESS   | AWS::EC2::RouteTable                  | VPC/ApplicationSubnet1/RouteTable (VPCApplicationSubnet1RouteTable5B6CE71A) Resource creation Initiated
  6/44 | 18:23:48 | CREATE_IN_PROGRESS   | AWS::EC2::Subnet                      | VPC/DatabaseSubnet1/Subnet (VPCDatabaseSubnet1Subnet3E790B6F) Resource creation Initiated
  6/44 | 18:23:48 | CREATE_IN_PROGRESS   | AWS::EC2::RouteTable                  | VPC/DatabaseSubnet2/RouteTable (VPCDatabaseSubnet2RouteTable5A3ECF56) Resource creation Initiated
  6/44 | 18:23:48 | CREATE_IN_PROGRESS   | AWS::EC2::Subnet                      | VPC/ApplicationSubnet3/Subnet (VPCApplicationSubnet3Subnet152008D5) Resource creation Initiated
  6/44 | 18:23:48 | CREATE_IN_PROGRESS   | AWS::EC2::Subnet                      | VPC/IngressSubnet1/Subnet (VPCIngressSubnet1Subnet4257CD65) Resource creation Initiated
  6/44 | 18:23:49 | CREATE_IN_PROGRESS   | AWS::EC2::RouteTable                  | VPC/IngressSubnet2/RouteTable (VPCIngressSubnet2RouteTableDFE1B4BC) Resource creation Initiated
  6/44 | 18:23:49 | CREATE_IN_PROGRESS   | AWS::EC2::Subnet                      | VPC/IngressSubnet3/Subnet (VPCIngressSubnet3Subnet5B03B6AE) Resource creation Initiated
  6/44 | 18:23:49 | CREATE_IN_PROGRESS   | AWS::EC2::RouteTable                  | VPC/DatabaseSubnet1/RouteTable (VPCDatabaseSubnet1RouteTable50155611) Resource creation Initiated
  6/44 | 18:23:49 | CREATE_IN_PROGRESS   | AWS::EC2::Subnet                      | VPC/DatabaseSubnet3/Subnet (VPCDatabaseSubnet3SubnetBC9F7BFD) Resource creation Initiated
  6/44 | 18:23:49 | CREATE_IN_PROGRESS   | AWS::EC2::RouteTable                  | VPC/ApplicationSubnet2/RouteTable (VPCApplicationSubnet2RouteTableFDC3EEE6) Resource creation Initiated
  6/44 | 18:23:49 | CREATE_IN_PROGRESS   | AWS::EC2::RouteTable                  | VPC/ApplicationSubnet3/RouteTable (VPCApplicationSubnet3RouteTable29639657) Resource creation Initiated
  6/44 | 18:23:49 | CREATE_IN_PROGRESS   | AWS::EC2::Subnet                      | VPC/IngressSubnet2/Subnet (VPCIngressSubnet2SubnetE0EA735B) Resource creation Initiated
  6/44 | 18:23:49 | CREATE_IN_PROGRESS   | AWS::EC2::RouteTable                  | VPC/DatabaseSubnet3/RouteTable (VPCDatabaseSubnet3RouteTableF4BFD0C7) Resource creation Initiated
  6/44 | 18:23:49 | CREATE_IN_PROGRESS   | AWS::EC2::VPCGatewayAttachment        | VPC/VPCGW (VPCVPCGW99B986DC) Resource creation Initiated
  6/44 | 18:23:49 | CREATE_IN_PROGRESS   | AWS::EC2::Subnet                      | VPC/ApplicationSubnet2/Subnet (VPCApplicationSubnet2Subnet988E96B1) Resource creation Initiated
  7/44 | 18:23:49 | CREATE_COMPLETE      | AWS::EC2::RouteTable                  | VPC/IngressSubnet1/RouteTable (VPCIngressSubnet1RouteTable9BE753A6)
  8/44 | 18:23:49 | CREATE_COMPLETE      | AWS::EC2::RouteTable                  | VPC/ApplicationSubnet1/RouteTable (VPCApplicationSubnet1RouteTable5B6CE71A)
  9/44 | 18:23:49 | CREATE_COMPLETE      | AWS::EC2::RouteTable                  | VPC/IngressSubnet3/RouteTable (VPCIngressSubnet3RouteTableBA29E68D)
 10/44 | 18:23:50 | CREATE_COMPLETE      | AWS::EC2::RouteTable                  | VPC/DatabaseSubnet2/RouteTable (VPCDatabaseSubnet2RouteTable5A3ECF56)
 11/44 | 18:23:50 | CREATE_COMPLETE      | AWS::EC2::RouteTable                  | VPC/ApplicationSubnet2/RouteTable (VPCApplicationSubnet2RouteTableFDC3EEE6)
 12/44 | 18:23:50 | CREATE_COMPLETE      | AWS::EC2::RouteTable                  | VPC/DatabaseSubnet1/RouteTable (VPCDatabaseSubnet1RouteTable50155611)
 13/44 | 18:23:50 | CREATE_COMPLETE      | AWS::EC2::RouteTable                  | VPC/ApplicationSubnet3/RouteTable (VPCApplicationSubnet3RouteTable29639657)
 14/44 | 18:23:50 | CREATE_COMPLETE      | AWS::EC2::RouteTable                  | VPC/IngressSubnet2/RouteTable (VPCIngressSubnet2RouteTableDFE1B4BC)
 15/44 | 18:23:50 | CREATE_COMPLETE      | AWS::EC2::RouteTable                  | VPC/DatabaseSubnet3/RouteTable (VPCDatabaseSubnet3RouteTableF4BFD0C7)
 16/44 | 18:24:04 | CREATE_COMPLETE      | AWS::EC2::VPCGatewayAttachment        | VPC/VPCGW (VPCVPCGW99B986DC)
 17/44 | 18:24:04 | CREATE_COMPLETE      | AWS::EC2::Subnet                      | VPC/DatabaseSubnet2/Subnet (VPCDatabaseSubnet2Subnet93B13DD5)
 18/44 | 18:24:05 | CREATE_COMPLETE      | AWS::EC2::Subnet                      | VPC/DatabaseSubnet1/Subnet (VPCDatabaseSubnet1Subnet3E790B6F)
 19/44 | 18:24:05 | CREATE_COMPLETE      | AWS::EC2::Subnet                      | VPC/ApplicationSubnet1/Subnet (VPCApplicationSubnet1SubnetCE118F80)
 20/44 | 18:24:05 | CREATE_COMPLETE      | AWS::EC2::Subnet                      | VPC/ApplicationSubnet3/Subnet (VPCApplicationSubnet3Subnet152008D5)
 21/44 | 18:24:05 | CREATE_COMPLETE      | AWS::EC2::Subnet                      | VPC/IngressSubnet1/Subnet (VPCIngressSubnet1Subnet4257CD65)
 22/44 | 18:24:05 | CREATE_COMPLETE      | AWS::EC2::Subnet                      | VPC/DatabaseSubnet3/Subnet (VPCDatabaseSubnet3SubnetBC9F7BFD)
 23/44 | 18:24:05 | CREATE_COMPLETE      | AWS::EC2::Subnet                      | VPC/IngressSubnet3/Subnet (VPCIngressSubnet3Subnet5B03B6AE)
 24/44 | 18:24:05 | CREATE_COMPLETE      | AWS::EC2::Subnet                      | VPC/ApplicationSubnet2/Subnet (VPCApplicationSubnet2Subnet988E96B1)
 25/44 | 18:24:05 | CREATE_COMPLETE      | AWS::EC2::Subnet                      | VPC/IngressSubnet2/Subnet (VPCIngressSubnet2SubnetE0EA735B)
 25/44 | 18:24:07 | CREATE_IN_PROGRESS   | AWS::EC2::Route                       | VPC/IngressSubnet3/DefaultRoute (VPCIngressSubnet3DefaultRouteD4DCD60F)
 25/44 | 18:24:07 | CREATE_IN_PROGRESS   | AWS::EC2::Route                       | VPC/IngressSubnet1/DefaultRoute (VPCIngressSubnet1DefaultRouteFE025494)
 25/44 | 18:24:07 | CREATE_IN_PROGRESS   | AWS::EC2::SubnetRouteTableAssociation | VPC/ApplicationSubnet3/RouteTableAssociation (VPCApplicationSubnet3RouteTableAssociationB4462F03)
 25/44 | 18:24:07 | CREATE_IN_PROGRESS   | AWS::EC2::Route                       | VPC/IngressSubnet2/DefaultRoute (VPCIngressSubnet2DefaultRoute9FF8300E)
 25/44 | 18:24:08 | CREATE_IN_PROGRESS   | AWS::EC2::Route                       | VPC/IngressSubnet3/DefaultRoute (VPCIngressSubnet3DefaultRouteD4DCD60F) Resource creation Initiated
 25/44 | 18:24:08 | CREATE_IN_PROGRESS   | AWS::EC2::SubnetRouteTableAssociation | VPC/IngressSubnet1/RouteTableAssociation (VPCIngressSubnet1RouteTableAssociationCAFE4089)
 25/44 | 18:24:08 | CREATE_IN_PROGRESS   | AWS::EC2::SubnetRouteTableAssociation | VPC/ApplicationSubnet1/RouteTableAssociation (VPCApplicationSubnet1RouteTableAssociation8DF0EAE5)
 25/44 | 18:24:08 | CREATE_IN_PROGRESS   | AWS::EC2::SubnetRouteTableAssociation | VPC/DatabaseSubnet1/RouteTableAssociation (VPCDatabaseSubnet1RouteTableAssociation56EE26FE)
 25/44 | 18:24:08 | CREATE_IN_PROGRESS   | AWS::EC2::SubnetRouteTableAssociation | VPC/IngressSubnet3/RouteTableAssociation (VPCIngressSubnet3RouteTableAssociationF8544212)
 25/44 | 18:24:08 | CREATE_IN_PROGRESS   | AWS::EC2::SubnetRouteTableAssociation | VPC/DatabaseSubnet2/RouteTableAssociation (VPCDatabaseSubnet2RouteTableAssociation2350B25C)
 25/44 | 18:24:08 | CREATE_IN_PROGRESS   | AWS::EC2::Route                       | VPC/IngressSubnet1/DefaultRoute (VPCIngressSubnet1DefaultRouteFE025494) Resource creation Initiated
 25/44 | 18:24:08 | CREATE_IN_PROGRESS   | AWS::EC2::SubnetRouteTableAssociation | VPC/DatabaseSubnet3/RouteTableAssociation (VPCDatabaseSubnet3RouteTableAssociationC74EC212)
 25/44 | 18:24:08 | CREATE_IN_PROGRESS   | AWS::EC2::Route                       | VPC/IngressSubnet2/DefaultRoute (VPCIngressSubnet2DefaultRoute9FF8300E) Resource creation Initiated
 25/44 | 18:24:08 | CREATE_IN_PROGRESS   | AWS::EC2::NatGateway                  | VPC/IngressSubnet1/NATGateway (VPCIngressSubnet1NATGatewayEA4AE80E)
 25/44 | 18:24:08 | CREATE_IN_PROGRESS   | AWS::EC2::SubnetRouteTableAssociation | VPC/ApplicationSubnet2/RouteTableAssociation (VPCApplicationSubnet2RouteTableAssociationD84040F3)
 25/44 | 18:24:08 | CREATE_IN_PROGRESS   | AWS::EC2::SubnetRouteTableAssociation | VPC/IngressSubnet2/RouteTableAssociation (VPCIngressSubnet2RouteTableAssociationB244DE25)
 25/44 | 18:24:08 | CREATE_IN_PROGRESS   | AWS::EC2::NatGateway                  | VPC/IngressSubnet3/NATGateway (VPCIngressSubnet3NATGatewayF804BFD1)
 25/44 | 18:24:09 | CREATE_IN_PROGRESS   | AWS::EC2::NatGateway                  | VPC/IngressSubnet2/NATGateway (VPCIngressSubnet2NATGateway68BB4190)
 25/44 | 18:24:09 | CREATE_IN_PROGRESS   | AWS::EC2::SubnetRouteTableAssociation | VPC/ApplicationSubnet3/RouteTableAssociation (VPCApplicationSubnet3RouteTableAssociationB4462F03) Resource creation Initiated
 25/44 | 18:24:09 | CREATE_IN_PROGRESS   | AWS::EC2::NatGateway                  | VPC/IngressSubnet1/NATGateway (VPCIngressSubnet1NATGatewayEA4AE80E) Resource creation Initiated
 25/44 | 18:24:09 | CREATE_IN_PROGRESS   | AWS::EC2::NatGateway                  | VPC/IngressSubnet3/NATGateway (VPCIngressSubnet3NATGatewayF804BFD1) Resource creation Initiated
 25/44 | 18:24:09 | CREATE_IN_PROGRESS   | AWS::EC2::SubnetRouteTableAssociation | VPC/ApplicationSubnet1/RouteTableAssociation (VPCApplicationSubnet1RouteTableAssociation8DF0EAE5) Resource creation Initiated
 25/44 | 18:24:09 | CREATE_IN_PROGRESS   | AWS::EC2::SubnetRouteTableAssociation | VPC/IngressSubnet3/RouteTableAssociation (VPCIngressSubnet3RouteTableAssociationF8544212) Resource creation Initiated
 25/44 | 18:24:09 | CREATE_IN_PROGRESS   | AWS::EC2::SubnetRouteTableAssociation | VPC/IngressSubnet1/RouteTableAssociation (VPCIngressSubnet1RouteTableAssociationCAFE4089) Resource creation Initiated
 25/44 | 18:24:09 | CREATE_IN_PROGRESS   | AWS::EC2::SubnetRouteTableAssociation | VPC/DatabaseSubnet1/RouteTableAssociation (VPCDatabaseSubnet1RouteTableAssociation56EE26FE) Resource creation Initiated
 25/44 | 18:24:09 | CREATE_IN_PROGRESS   | AWS::EC2::SubnetRouteTableAssociation | VPC/DatabaseSubnet2/RouteTableAssociation (VPCDatabaseSubnet2RouteTableAssociation2350B25C) Resource creation Initiated
 25/44 | 18:24:09 | CREATE_IN_PROGRESS   | AWS::EC2::NatGateway                  | VPC/IngressSubnet2/NATGateway (VPCIngressSubnet2NATGateway68BB4190) Resource creation Initiated
 25/44 | 18:24:09 | CREATE_IN_PROGRESS   | AWS::EC2::SubnetRouteTableAssociation | VPC/DatabaseSubnet3/RouteTableAssociation (VPCDatabaseSubnet3RouteTableAssociationC74EC212) Resource creation Initiated
 25/44 | 18:24:09 | CREATE_IN_PROGRESS   | AWS::EC2::SubnetRouteTableAssociation | VPC/ApplicationSubnet2/RouteTableAssociation (VPCApplicationSubnet2RouteTableAssociationD84040F3) Resource creation Initiated
 25/44 | 18:24:10 | CREATE_IN_PROGRESS   | AWS::EC2::SubnetRouteTableAssociation | VPC/IngressSubnet2/RouteTableAssociation (VPCIngressSubnet2RouteTableAssociationB244DE25) Resource creation Initiated
 26/44 | 18:24:23 | CREATE_COMPLETE      | AWS::EC2::Route                       | VPC/IngressSubnet3/DefaultRoute (VPCIngressSubnet3DefaultRouteD4DCD60F)
 27/44 | 18:24:24 | CREATE_COMPLETE      | AWS::EC2::Route                       | VPC/IngressSubnet1/DefaultRoute (VPCIngressSubnet1DefaultRouteFE025494)
 28/44 | 18:24:24 | CREATE_COMPLETE      | AWS::EC2::Route                       | VPC/IngressSubnet2/DefaultRoute (VPCIngressSubnet2DefaultRoute9FF8300E)
 29/44 | 18:24:24 | CREATE_COMPLETE      | AWS::EC2::SubnetRouteTableAssociation | VPC/ApplicationSubnet3/RouteTableAssociation (VPCApplicationSubnet3RouteTableAssociationB4462F03)
 30/44 | 18:24:24 | CREATE_COMPLETE      | AWS::EC2::SubnetRouteTableAssociation | VPC/ApplicationSubnet1/RouteTableAssociation (VPCApplicationSubnet1RouteTableAssociation8DF0EAE5)
 31/44 | 18:24:25 | CREATE_COMPLETE      | AWS::EC2::SubnetRouteTableAssociation | VPC/IngressSubnet1/RouteTableAssociation (VPCIngressSubnet1RouteTableAssociationCAFE4089)
 32/44 | 18:24:25 | CREATE_COMPLETE      | AWS::EC2::SubnetRouteTableAssociation | VPC/DatabaseSubnet1/RouteTableAssociation (VPCDatabaseSubnet1RouteTableAssociation56EE26FE)
 33/44 | 18:24:25 | CREATE_COMPLETE      | AWS::EC2::SubnetRouteTableAssociation | VPC/DatabaseSubnet2/RouteTableAssociation (VPCDatabaseSubnet2RouteTableAssociation2350B25C)
 34/44 | 18:24:25 | CREATE_COMPLETE      | AWS::EC2::SubnetRouteTableAssociation | VPC/IngressSubnet3/RouteTableAssociation (VPCIngressSubnet3RouteTableAssociationF8544212)
 35/44 | 18:24:25 | CREATE_COMPLETE      | AWS::EC2::SubnetRouteTableAssociation | VPC/DatabaseSubnet3/RouteTableAssociation (VPCDatabaseSubnet3RouteTableAssociationC74EC212)
 36/44 | 18:24:25 | CREATE_COMPLETE      | AWS::EC2::SubnetRouteTableAssociation | VPC/IngressSubnet2/RouteTableAssociation (VPCIngressSubnet2RouteTableAssociationB244DE25)
 37/44 | 18:24:25 | CREATE_COMPLETE      | AWS::EC2::SubnetRouteTableAssociation | VPC/ApplicationSubnet2/RouteTableAssociation (VPCApplicationSubnet2RouteTableAssociationD84040F3)
37/44 Currently in progress: AwsCdkVpcSample2Stack, VPCIngressSubnet1NATGatewayEA4AE80E, VPCIngressSubnet3NATGatewayF804BFD1, VPCIngressSubnet2NATGateway68BB4190
 38/44 | 18:25:27 | CREATE_COMPLETE      | AWS::EC2::NatGateway                  | VPC/IngressSubnet2/NATGateway (VPCIngressSubnet2NATGateway68BB4190)
 38/44 | 18:25:30 | CREATE_IN_PROGRESS   | AWS::EC2::Route                       | VPC/ApplicationSubnet2/DefaultRoute (VPCApplicationSubnet2DefaultRouteC3680A52)
 38/44 | 18:25:31 | CREATE_IN_PROGRESS   | AWS::EC2::Route                       | VPC/ApplicationSubnet2/DefaultRoute (VPCApplicationSubnet2DefaultRouteC3680A52) Resource creation Initiated
 39/44 | 18:25:46 | CREATE_COMPLETE      | AWS::EC2::Route                       | VPC/ApplicationSubnet2/DefaultRoute (VPCApplicationSubnet2DefaultRouteC3680A52)
 40/44 | 18:25:58 | CREATE_COMPLETE      | AWS::EC2::NatGateway                  | VPC/IngressSubnet1/NATGateway (VPCIngressSubnet1NATGatewayEA4AE80E)
 40/44 | 18:26:01 | CREATE_IN_PROGRESS   | AWS::EC2::Route                       | VPC/ApplicationSubnet1/DefaultRoute (VPCApplicationSubnet1DefaultRouteA4E47D36)
 40/44 | 18:26:02 | CREATE_IN_PROGRESS   | AWS::EC2::Route                       | VPC/ApplicationSubnet1/DefaultRoute (VPCApplicationSubnet1DefaultRouteA4E47D36) Resource creation Initiated
 41/44 | 18:26:14 | CREATE_COMPLETE      | AWS::EC2::NatGateway                  | VPC/IngressSubnet3/NATGateway (VPCIngressSubnet3NATGatewayF804BFD1)
 41/44 | 18:26:17 | CREATE_IN_PROGRESS   | AWS::EC2::Route                       | VPC/ApplicationSubnet3/DefaultRoute (VPCApplicationSubnet3DefaultRoute33D8EB24)
 42/44 | 18:26:18 | CREATE_COMPLETE      | AWS::EC2::Route                       | VPC/ApplicationSubnet1/DefaultRoute (VPCApplicationSubnet1DefaultRouteA4E47D36)
 42/44 | 18:26:18 | CREATE_IN_PROGRESS   | AWS::EC2::Route                       | VPC/ApplicationSubnet3/DefaultRoute (VPCApplicationSubnet3DefaultRoute33D8EB24) Resource creation Initiated
 43/44 | 18:26:34 | CREATE_COMPLETE      | AWS::EC2::Route                       | VPC/ApplicationSubnet3/DefaultRoute (VPCApplicationSubnet3DefaultRoute33D8EB24)
 44/44 | 18:26:36 | CREATE_COMPLETE      | AWS::CloudFormation::Stack            | AwsCdkVpcSample2Stack

 ✅  AwsCdkVpcSample2Stack

Stack ARN:
arn:aws:cloudformation:ap-northeast-1:xxxxxxxxxxxx:stack/AwsCdkVpcSample2Stack/b0fd2850-164b-11e9-b181-0a8788cf6370
```

* 作成されたCFnスタックを確認します。

```sh:コマンド
$ aws cloudformation describe-stacks \
    --stack-name AwsCdkVpcSample2Stack
```
```json:Output例
{
    "Stacks": [
        {
            "StackId": "arn:aws:cloudformation:ap-northeast-1:xxxxxxxxxxxx:stack/AwsCdkVpcSample2Stack/b0fd2850-164b-11e9-b181-0a8788cf6370",
            "StackName": "AwsCdkVpcSample2Stack",
            "ChangeSetId": "arn:aws:cloudformation:ap-northeast-1:xxxxxxxxxxxx:changeSet/CDK-de63a38c-a4ee-4d73-bd58-6cbb18575ace/4fd4d238-9249-4be4-9ecb-90523dff8df5",
            "CreationTime": "2019-01-12T09:23:15.969Z",
            "LastUpdatedTime": "2019-01-12T09:23:21.476Z",
            "RollbackConfiguration": {},
            "StackStatus": "CREATE_COMPLETE",
            "DisableRollback": false,
            "NotificationARNs": [],
            "Capabilities": [
                "CAPABILITY_IAM",
                "CAPABILITY_NAMED_IAM"
            ],
            "Tags": [],
            "EnableTerminationProtection": false,
            "DriftInformation": {
                "StackDriftStatus": "NOT_CHECKED"
            }
        }
    ]
}
```

* VPC IDを確認します。

```sh:コマンド
$ aws cloudformation describe-stack-resources \
    --stack-name AwsCdkVpcSample2Stack \
    --query StackResources[?ResourceType==\`AWS::EC2::VPC\`]

```
```json:Output例
[
    {
        "StackName": "AwsCdkVpcSample2Stack",
        "StackId": "arn:aws:cloudformation:ap-northeast-1:xxxxxxxxxxxx:stack/AwsCdkVpcSample2Stack/b0fd2850-164b-11e9-b181-0a8788cf6370",
        "LogicalResourceId": "VPCB9E5F0B4",
        "PhysicalResourceId": "vpc-07d7263312dbe87b6",
        "ResourceType": "AWS::EC2::VPC",
        "Timestamp": "2019-01-12T09:23:44.808Z",
        "ResourceStatus": "CREATE_COMPLETE",
        "DriftInformation": {
            "StackResourceDriftStatus": "NOT_CHECKED"
        }
    }
]
```
* VPCを確認します。

```sh:コマンド
$ aws ec2 describe-vpcs --vpc-ids vpc-07d7263312dbe87b6
```
```json:Output例
{
    "Vpcs": [
        {
            "CidrBlock": "10.0.0.0/16",
            "DhcpOptionsId": "dopt-a74006c0",
            "State": "available",
            "VpcId": "vpc-07d7263312dbe87b6",
            "OwnerId": "xxxxxxxxxxxx",
            "InstanceTenancy": "default",
            "CidrBlockAssociationSet": [
                {
                    "AssociationId": "vpc-cidr-assoc-0e77ce173e6641870",
                    "CidrBlock": "10.0.0.0/16",
                    "CidrBlockState": {
                        "State": "associated"
                    }
                }
            ],
            "IsDefault": false,
            "Tags": [
                {
                    "Key": "Name",
                    "Value": "AwsCdkVpcSample2Stack/VPC"
                },
                {
                    "Key": "aws:cloudformation:stack-name",
                    "Value": "AwsCdkVpcSample2Stack"
                },
                {
                    "Key": "aws:cloudformation:stack-id",
                    "Value": "arn:aws:cloudformation:ap-northeast-1:xxxxxxxxxxxx:stack/AwsCdkVpcSample2Stack/b0fd2850-164b-11e9-b181-0a8788cf6370"
                },
                {
                    "Key": "aws:cloudformation:logical-id",
                    "Value": "VPCB9E5F0B4"
                }
            ]
        }
    ]
```

# まとめ
CDKを利用することにより、サブネットやルートテーブルの煩雑なCloudFormationテンプテートを記載しなくてもVPCを作成することができました。現実世界では空のVPCから独自の構成を作ることもあるためその場合はどういったコードになるのか試してみたいところです。またスタックに関する情報をExportして他スタックから参照させることもできるためそちらも要検証です。