実践!AWS CDK #2 VPC
はじめに
今回こそは VPC "だけ" を作成する!
前回の記事はこちら。
AWS 構成図
これを作ります。
VPC があるだけ。これ単体では何もできない構成ですが、いっぺんにやると混乱してしまうので一歩ずつ着実に構築していきましょう。
将来的には以下のような構成にしていく予定です。
20 回くらいかかるかもね。
設計
作成する VPC のプロパティはこうしましょう。
リソース名 | CIDR ブロック |
---|---|
devio-stg-vpc | 10.0.0.0/16 |
リソース名は弊社の命名規則 システム名
-環境名
-AWS リソース名
を採用しました。CIDR ブロックはよく VPC の例として挙げられる 10.0.0.0/16
を採用します。その他の値は指定せずにデフォルト値を使用します。
実装
前回の状態はこちらです。
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 はこちら。
変更箇所をハイライトしています。
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 コンソールにも表示される(下記イメージ参照)
- 第三引数
props
: CfnVPCProps 型- VPC リソースのプロパティ
- CFn のプロパティ と 1:1 で対応
cidrBlock
は CFn 同様に必須パラメーターとなっています。前回使用した Vpc ではこのパラメーター(正確には cidr
)は任意パラメーターとなっているので、こういう部分でも L1 と L2 で違いがあるようです。
tags
でリソース名(Name
)を指定しています。devio や stg などの可変部分は動的に変更したいですが、とりあえず今はこのままで。
他のリソースを表す CfnXXX
クラスのイニシャライザーも上記と同じ構成になっています。一度覚えてしまえばわかりやすいですね。
テンプレートの作成
それでは 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 が作成されていることを確認できました。
クリーンアップ
確認ができたら 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
クラスを利用したリソースの作成方法を学びました。このやり方であらゆるリソースが自由自在に操作できるようになるでしょう。どんどん進んで行きたいところですが、少し立ち止まります。
次回のお題は「テスト
」です。