0
1

神様、僕は気づいてしまった CDKの素晴らしさに...

Posted at

:beginner: 1.対象購読者

  • cloudformationは使ったことあるけどCDKは使ったことない人
  • CDKってなんか敷居高いからちょっと…と思っている方

:sun_with_face: 2.きっかけ

とあるセミナーで『cloudfomationはオワコン!!今からはCDKの時代!!』という話を聞きました。
「そんな馬鹿な:interrobang:私はcloudfomationが神だと信じているCDKなんて絶対に認めない:japanese_goblin:
と思いつつも…まぁ軽く使ってから批判はすべきかなと思いCDKをちょっとだけやってみることにしました。

:writing_hand: 3.やったこと

・VPCの作成
・パブリックサブネットの作成

:wrench: 4.準備編

前提
最新のnodeがインストール/asw configureが設定されている状態

cdkのインストール

 npm install -g aws-cdk

ムムム...:cold_sweat:cloudformationはエディタさえあれば何も要らんかったのにな...
さてはCDK面倒くさい系じゃないのか?まぁ文句言わずに最後までやってみるか…
正常にインストールされたか見てみよう:eyes:

 cdk --version
 2.147.2 (build f4b0897)

ふむ。よさそうだ。

:wrench: 5.プロジェクト作成

ん?プロジェクト…だと!? cloudformationではそんなものはなかったぞ?:kissing:
アプリケーション開発じゃあるまいしそんな大げさな…:worried:
と思いながらも手順通りにやってみる…

フォルダを作ってフォルダ移動

mkdir cdk_sample
cd cdk_sample

プロジェクト作成

cdk init app --language python

language というオプションで言語を指定するらしい。
cloudformationでいうところのjson形式かyml形式かみたいなものと勝手に理解する…

image.png
ほうほう...たらたら流れ出したぞ...All done と出てるから成功したらしい。

image.png
お、プロジェクトができてる出来てる!・・・で、どころ触ればいいんだろうか?

:muscle: 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
…ムムム:unamused:英語のリファレンスは体が拒否反応を起こしてしまうのだが…
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の個数を設定して…

ん?

んんっ!?

んんんっ!??:astonished:

ここに数量入れるだけでnatgateway作ってくれるのか?えぐっ!えぐいぞ!:japanese_ogre:
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ってなんだ:eye:
リファレンスを見たところ…
ec2.SubnetType.PUBLICec2.SubnetType.PRIVATE_WITH_EGRESS
のいづれかを指定することで、任意のサブネットができるらしい!!:dancer::dancer::dancer:
cloudformationではパブリックサブネットを作るには

1.IGWを作成して
2.VPCにアタッチして
3.ルートテーブルを作って
4.IGWへルーティング

という作業が必要なのだが、
この1行でそこまでしてくれるのか!?!?神掛かっている!!!:angel_tone2:

:white_check_mark: 6.チェック機能

いざ!実行!…っとその前にチェック機能が備わっているらしいので試してみる

 cdk diff

image.png

フムフム…便利だな。cfnでいうところの変更セット的なものだな...

:airplane: 7.いざ!実行!!

cdk deploy

Do you wish to deploy these changes (y/n)?

変更していいですかって?OK牧場:cow:の 「y」 を入力して Enter!
うぉ~~!なんかできたっぽい!
マネージメントコンソールで見たら見事に実際の環境できてるーーーー:clap::clap:

image.png
そして内部ではやはりcloudformationが動いていたようだ...ちなみにテンプレートの行数は700行!!これがCDKだと30行で書けるのか!!くぅ~しびれるぜぃ:confounded::zap:

:ramen: 8.〆

cloudformationで数十行~100行超の量を1行で済ませてしまうCDK!!!
悪魔的:imp:な神効率:angel_tone1:今までcloudformationでやっていたことがあほらしく感じる程の効率。

ただ、cloudformation知らずにCDKから入ってしまうと、CDKいい感じやってくれすぎるので内部で何が起きてるか:black_medium_square:ブラックボックス:black_medium_square:になりすぎて問題発生時に対処できないというデメリットは発生しそうな気もする…

やってみた感想はcloudformationのある程度の知識がある上で、
CDKを扱えるようになると無双状態かなと思いました!CDK王に俺はなる:muscle:

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1