実践!AWS CDK #2 VPC

題字・息子たち
2021.05.17

はじめに

今回こそは VPC "だけ" を作成する!

前回の記事はこちら。

AWS 構成図

これを作ります。

1

VPC があるだけ。これ単体では何もできない構成ですが、いっぺんにやると混乱してしまうので一歩ずつ着実に構築していきましょう。

将来的には以下のような構成にしていく予定です。

2

20 回くらいかかるかもね。

設計

作成する VPC のプロパティはこうしましょう。

リソース名 CIDR ブロック
devio-stg-vpc 10.0.0.0/16

リソース名は弊社の命名規則 システム名-環境名-AWS リソース名 を採用しました。CIDR ブロックはよく VPC の例として挙げられる 10.0.0.0/16 を採用します。その他の値は指定せずにデフォルト値を使用します。

実装

前回の状態はこちらです。

lib/devio-stack.ts

import * as cdk from '@aws-cdk/core';
import { Vpc } from '@aws-cdk/aws-ec2';

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

    new Vpc(this, 'Vpc');
  }
}

宣言通り、L2 の Vpc クラス では細かい設定がしづらいので、L1 の CfnVPC クラス を利用していきます。

After はこちら。
変更箇所をハイライトしています。

lib/devio-stack.ts

import * as cdk from '@aws-cdk/core';
import { CfnVPC } from '@aws-cdk/aws-ec2';

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

    new CfnVPC(this, 'Vpc', {
      cidrBlock: '10.0.0.0/16',
      tags: [{ key: 'Name', value: 'devio-stg-vpc' }]
    });
  }
}

初回なので少し詳しく解説します。

CfnVPC のイニシャライザー引数は以下の通りです。

  • 第一引数
    • scope: cdk.Construct 型
    • このリソース(VPC)を定義する Construct を指定する
    • ここではこのクラスのインスタンス(this
  • 第二引数
    • id: string 型
    • リソースの論理 ID
    • CFn コンソールにも表示される(下記イメージ参照)
  • 第三引数

cidrBlock は CFn 同様に必須パラメーターとなっています。前回使用した Vpc ではこのパラメーター(正確には cidr)は任意パラメーターとなっているので、こういう部分でも L1 と L2 で違いがあるようです。
tags でリソース名(Name)を指定しています。deviostg などの可変部分は動的に変更したいですが、とりあえず今はこのままで。

他のリソースを表す CfnXXX クラスのイニシャライザーも上記と同じ構成になっています。一度覚えてしまえばわかりやすいですね。

3

テンプレートの作成

それでは cdk synth コマンドを使用してテンプレートを確認してみましょう。

$ cdk synth

Resources:
  Vpc:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
      Tags:
        - Key: Name
          Value: devio-stg-vpc
~ 省略 ~

意図通りの結果になりました。(ハイライト部分)
前回とは違い、意図していないリソースは出力されていないことが確認できます。

デプロイ

デプロイは cdk deploy コマンドで。

$ cdk deploy

DevioStack: deploying...
DevioStack: creating CloudFormation changeset...

~ 省略 ~

DevioStack

Stack ARN:
arn:aws:cloudformation:ap-northeast-1:xxxxxxxx

デプロイも成功です。

確認

マネジメントコンソール上でも VPC が作成されていることを確認できました。

4

クリーンアップ

確認ができたら cdk destroy コマンドでリソース(スタック)を削除しておきましょう。

$ cdk destroy

Are you sure you want to delete: DevioStack (y/n)? y
DevioStack: destroying...

~ 省略 ~

DevioStack: destroyed

CloudFormation 版

cdk synth の結果でも表示されていますが、今回の CDK での実装を CFn で書くと以下のようになります。

Vpc:
  Type: AWS::EC2::VPC
  Properties:
    CidrBlock: 10.0.0.0/16
    Tags:
      - Key: Name
        Value: devio-stg-vpc

CDK だと(import 文を除けば)4 行、CFn(YAML)だと 7 行 です。短くなっていますね!(可読性は置いといて、YAML のインデントルールに縛られず Tags などを 1 行で書けるのが大きい)

GitHub

今回のソースコードは コチラ です。

おわりに

今回で CfnXXX クラスを利用したリソースの作成方法を学びました。このやり方であらゆるリソースが自由自在に操作できるようになるでしょう。どんどん進んで行きたいところですが、少し立ち止まります。

次回のお題は「テスト」です。

リンク