1.対象購読者
- cloudformationは使ったことあるけどCDKは使ったことない人
- CDKってなんか敷居高いからちょっと…と思っている方
2.きっかけ
とあるセミナーで『cloudfomationはオワコン!!今からはCDKの時代!!』という話を聞きました。
「そんな馬鹿な私はcloudfomationが神だと信じているCDKなんて絶対に認めない」
と思いつつも…まぁ軽く使ってから批判はすべきかなと思いCDKをちょっとだけやってみることにしました。
3.やったこと
・VPCの作成
・パブリックサブネットの作成
4.準備編
前提
最新のnodeがインストール/asw configureが設定されている状態
cdkのインストール
npm install -g aws-cdk
ムムム...cloudformationはエディタさえあれば何も要らんかったのにな...
さてはCDK面倒くさい系じゃないのか?まぁ文句言わずに最後までやってみるか…
正常にインストールされたか見てみよう
cdk --version
2.147.2 (build f4b0897)
ふむ。よさそうだ。
5.プロジェクト作成
ん?プロジェクト…だと!? cloudformationではそんなものはなかったぞ?
アプリケーション開発じゃあるまいしそんな大げさな…
と思いながらも手順通りにやってみる…
フォルダを作ってフォルダ移動
mkdir cdk_sample
cd cdk_sample
プロジェクト作成
cdk init app --language python
language というオプションで言語を指定するらしい。
cloudformationでいうところのjson形式かyml形式かみたいなものと勝手に理解する…
ほうほう...たらたら流れ出したぞ...All done と出てるから成功したらしい。
お、プロジェクトができてる出来てる!・・・で、どころ触ればいいんだろうか?
5.CDK触ってみる!
cdk_sample_stack.py というファイルができてるのでこれを触っていくらしい。
(ファイル名はフォルダ名+_stack.pyで作られているようだ...)
どこかのqiita記事から参考にしたコードを張り付けてみる。ペタッとな...
from aws_cdk import (
# Duration,
Stack,
aws_ec2 as ec2,
)
from constructs import Construct
class CdkExampleStack(Stack):
def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
super().__init__(scope, construct_id, **kwargs)
# Create VPC
vpc = ec2.Vpc(
self,
id="vpc",
cidr="10.2.0.0/16",
nat_gateways=0, # NatGatewayを作成しない指定
# Create Private Subnet
subnet_configuration=[
ec2.SubnetConfiguration(
name="subnet",
subnet_type=ec2.SubnetType.PUBLIC,
cidr_mask=24
)
]
)
ん~よくわからん…リファレンスを見てみよう!!!
https://docs.aws.amazon.com/cdk/api/v2/python/aws_cdk.aws_ec2/Vpc.html
…ムムム英語のリファレンスは体が拒否反応を起こしてしまうのだが…
google翻訳機能を駆使しつつ頑張って読み解こう...
aws_ec2 as ec2,
まずはimportで使用するサービスを定義する感じか…
cloudformationでいうところのType的なものか…
id="vpc"
VPCをcreateする部分vpcnameをidに指定して…
cidr="10.2.0.0/16",
cidrでipの範囲を指定して...
nat_gateways=0,
natgatewayの個数を設定して…
ん?
んんっ!?
んんんっ!??
ここに数量入れるだけでnatgateway作ってくれるのか?えぐっ!えぐいぞ!
cloudformationならnatgateway作成するだけで数十行は書かないといけないのに1行!?
# Create Private Subnet
subnet_configuration=[
ec2.SubnetConfiguration(
name="subnet",
subnet_type=ec2.SubnetType.PUBLIC,
cidr_mask=24
)
]
次はサブネットを配列で宣言するのか…
nameとcidrブロックと,subnet_typeと…ん?subnet_typeってなんだ?
リファレンスを見たところ…
ec2.SubnetType.PUBLICとec2.SubnetType.PRIVATE_WITH_EGRESS
のいづれかを指定することで、任意のサブネットができるらしい!!
cloudformationではパブリックサブネットを作るには
1.IGWを作成して
2.VPCにアタッチして
3.ルートテーブルを作って
4.IGWへルーティング
という作業が必要なのだが、
この1行でそこまでしてくれるのか!?!?神掛かっている!!!
6.チェック機能
いざ!実行!…っとその前にチェック機能が備わっているらしいので試してみる
cdk diff
フムフム…便利だな。cfnでいうところの変更セット的なものだな...
7.いざ!実行!!
cdk deploy
Do you wish to deploy these changes (y/n)?
変更していいですかって?OK牧場の 「y」 を入力して Enter!
うぉ~~!なんかできたっぽい!
マネージメントコンソールで見たら見事に実際の環境できてるーーーー
そして内部ではやはりcloudformationが動いていたようだ...ちなみにテンプレートの行数は700行!!これがCDKだと30行で書けるのか!!くぅ~しびれるぜぃ
8.〆
cloudformationで数十行~100行超の量を1行で済ませてしまうCDK!!!
悪魔的な神効率今までcloudformationでやっていたことがあほらしく感じる程の効率。
ただ、cloudformation知らずにCDKから入ってしまうと、CDKいい感じやってくれすぎるので内部で何が起きてるかブラックボックスになりすぎて問題発生時に対処できないというデメリットは発生しそうな気もする…
やってみた感想はcloudformationのある程度の知識がある上で、
CDKを扱えるようになると無双状態かなと思いました!CDK王に俺はなる