AWS CDKの門戸を叩いてみた

目指せAWS CDK黒帯
2022.07.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

押忍!!!!AWS事業本部@福岡オフィスのべこみん(@beco_minn)です。

皆さんは門戸、叩いてますか?

私は今回どこかの門戸を叩きたくなったのでAWS CDKの門戸を叩いてみました。本ブログはその時にやったこと、思ったことをつらつら書いていきます。

対象読者

本ブログは「これからAWS CDKを始めたい人」、「特に始め方が分からずに足踏みしている人」に読んで欲しいブログです。少しでもやってみたいという気持ちがある方は今すぐ一緒にAWS CDKの門戸を叩いて、AWS CDK一派に入門しましょう。

なお、以下のことは本ブログには書いてないのでご注意ください。

  • AWS CDKの具体的な書き方
  • サンプルソースコード

上記については実際に私が参考にしたサイト等を紹介する形を取っています。

それでは、Let's 入門!

そもそもAWS CDKとは

このブログをご覧になっている方は既にご存知かもしれませんが、簡単に説明します。

AWS CDKとは、簡単に言ってしまうとプログラミング言語を使ってAWSのリソースを構築出来るツールです。

AWS CDKの実態はAWS CloudFormation(以下、CFn)なので、デプロイ時にはCFnテンプレートが作成されます。

AWS CDKを使うことで、ざっと挙げるだけでも以下のようなメリットがあります。

  • インフラとアプリのコードを同じプロジェクト内で管理できる
  • リソース定義時にループ処理、条件分岐処理が使える
  • 高級なConstructを使えば短いコード量でリソースが定義出来る

実際にやったこと

  • 『実践!AWS CDK』を読む
  • 公式のAPIリファレンスと睨めっこ
  • 公式サンプルコードを参考にする

『実践!AWS CDK』を読む

言わずと知れた田中圭介さんが書かれているCDK入門シリーズブログ。AWS CDKの基本が体系的に学べるので非常におすすめです。

実践!AWS CDK #1 導入」は、手を動かしながらAWS CDKのインストールからリソースの削除までを行えるチュートリアルになっています。まずはやってみましょう。

実践!AWS CDK #2 VPC」以降では、ALB、EC2、RDSを使ったメジャーな3層構造をAWS CDKで構築していく流れになっています。

(参照: 実践!AWS CDK #2 VPC)

また、#1の末項にも書いてありますが、本シリーズでは主に L1 Construct (CFnと同じ粒度)でAWS CDKが書かれています。

Constructには他に L2 ConstructL3 Construct があります。(L3 はあまり使われていない印象。)

数字が大きくなるにつれ、「記述の抽象度が上がりソースコードの量が少なくなる」というメリットはありますが、APIによってはデフォルトでユーザーの意図していないリソースが構築されることもあります。

L2 を使うことでAWS CDKの恩恵をより受けられる」とは思いますが、最初はあまり気にせずに好きな方を使いましょう。細かい設定をしたいなら L1 、 とりあえず動くものを作ってみたいというなら L2 ぐらいの気持ちで良いと思います。私は細かい設定でVPC作成する際に L2 に拘りすぎて苦労しました。。。(デフォルトで出来てしまう不要なリソースの削除方法などを調べまくった)

公式のAPIリファレンスと睨めっこ

どんなサービスを触る時にもやることですね。個人的にAWS CDKのAPIリファレンスは読みやすくて好きです。

APIリファレンス内でも分かれていますが、AWS CDKにはv1とv2があります。v2は2021/12に一般提供が開始されたため、これから始められる皆さんはv2を使いましょう。

ちなみにv1からv2への変更点は下記公式ドキュメントにまとめられています。

公式サンプルコードを参考にする

AWS CDKには公式のサンプルコード集がGitHub上にまとめられています。書き方など是非参考にしてみてください。ちなみにStack(実際にリソースを定義しているもの)のコードは lib ディレクトリの配下にあります。

実際にやってみて思ったこと

ここからはあくまでも私個人の感想です。認識の誤りについてはまさかりを貰えると嬉しいです。

  • 最初にVPC周りのリソースを L2 で作り始めたから L2 くんのことを好きになれなかったけど、それ以外のリソースだと L2 くん大好き。
    • 特にLambdaなんかのサーバレス周りは L2 で書いていて何の違和感も苦労も無いです。
  • v2で書こう。
    • コード上部でimportしているパッケージが「aws-cdk-lib」になっていればv2
    • v2がGAした(version 2.0.0になった)のは2021/12なので、ネット上に転がっているAWS CDKのサンプルコードはほぼv1のものと思っていい。ただし、import部分と呼び出し部分以外はほぼ変わらないので書き方自体は参考になる。
  • IVpcやIBucketなどのI◯◯型には注意しよう。
    • 例えば新規でVPCを作成した場合のresponseの型は VPC なのですが、既存のVPCを fromLookup() や fromVpcAttributes() で取得した場合の型は IVPC となります。
    • 関数の引数にこれらの型を入れる必要がある場合、I◯◯型は許容していないケースがあるため注意しましょう。
    • このIが具体的に何を指しているのか分かりませんが、私は「Imported」のIという風に覚えています。
    • 追記(2022/07/07 18:29) ↑のIは implements しているものを継承している場合に付いてるようなので、「Implements」のIではないか、という補足をいただきました!
  • アプリのコードとインフラのコードを一緒に管理出来るのが最高。サーバレス開発でこそCDKは真価を発揮するのでは。

最後に

このブログをきっかけにCDKに入門してくださる方がいれば非常に嬉しいです!

私もたくさんコードを書いて、もっともっとCDK力を身につけます。

以上、べこみんでした。