61
54

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS CDK に初めて触ろうとしている人に向けて、必要な概念をざっくり解説 & おすすめドキュメントまとめ

Last updated at Posted at 2024-11-19

0. 記事を書いたきっかけ

アプリ開発者からAWSを勉強して、AWS CDKを書き始めて8ヶ月ほど経ちました。
それまでに得た知見をもとに社内でCDK勉強会を開催したところ、分かりやすかったという反応をいただけて嬉しかったので外部公開用に記事としてまとめました。
8か月ほど前のRuby on Railsエンジニアの自分に向けてわかりやすく解説しようとする記事になります。
似たような立場のCDKの初学者の方の参考になりましたら幸いです。

1. CDKとは

IaCを実現するツールです
IaCとはInfrastructure as Condeの略で、要するに「インフラのリソースをコードで管理しようぜ」ってことです。

よく比較されるIaCツールを並べてみました。

image.png

CDKは、Terraformや、CloudFormationのようにAWS リソースをコードで表現することができます。
Terraformが独自言語のHCL、CloudFormationがYAMLやJSONなどでインフラリソースを表現するのに対して、CDKでは使い慣れたプログラミング言語でリソースを表現することができます。

image.png

大まかな挙動としては下の図のような流れでデプロイを実施しています
image.png

  1. 開発者は今回の場合だとTypeScriptを用いて、必要なインフラリソースを実装します
  2. ターミナルでcdk deployコマンドを実行します
  3. CDKがローカル内でテンプレートを生成して、CloudFormationに反映させます
  4. CloudFormationがAPIを呼び出して実際のリソースをデプロイします

ですので、端的にいうと

「CDKとはプログラミング言語で、CloudFormationテンプレートを生成できるツール」

とも言えます。
image.png

2. CDKの使用前に知っておいたほうが良い概念

これは最初にわかっておきたかったな〜って概念は以下の4つになります。
image.png

(1).使用するプログラミング言語について

一番メジャーなのはTypeScriptです。

公式のワークショップがとてつもなく素晴らしい理由の一つとして、「TypeScriptの基礎からスタートしている」という点が挙げられます。

公式のハンズオンとかワークショップとかってとっつきにくいな〜と思う方もいらっしゃると思うのですが、このワークショップは本当におすすめなので、ぜひ一度試していただきたいです

(2). オブジェクト指向について

インフラ出身者にとっては壁になることが多いようです。私は元々アプリ側だったのでむしろ親しみやすかったです。

CDKはCloudFormationのようなThe仕様書って感じではなく、アプリ開発に近い感覚でインフラを組んでいくので、その経験が浅い方はオブジェクト指向の概念についてなんとなく理解していた方が扱いやすいと思います。

(3). CloudFormationの概念

テンプレートとは

CloudFormationテンプレートとは、AWS上に構築するインフラストラクチャを説明するJsonまたはYAML言語でフォーマットされたテキストファイルのことを言います。マネジメントコンソールで言うと、下の部分です。

image.png

スタックとは

CloudFormationスタックとは、上記のテンプレートによってプロビジョニングされるリソースの集合体を指します。

image.png

このイメージを持っていただけると、さまざまなドキュメントなどが読みやすくなると思います。

image.png

(4). CDKコンストラクトの概念

先ほどまではCloudFormationの話でしたが、ここからはCDKの話です
image.png

コンストラクトとは、
CDKの基本的な構築単位です!ブロックのような感じ。
1つのコンストラクトに1つまたは複数のリソースを表現します。
アプリ開発で言うと「クラス」の概念が近いと思います

image.png

image.png

ここで注意してほしいのは、TypeScriptのクラスのconstructorとは別物の概念ですので注意してください!
TypeScriptのconstructorは、クラスのインスタンスが作成されるときに自動的に呼び出される特別なメソッドですが混在しないように気をつけてください。私はCDKきっかけでTypeScriptを書き始めた人だったのでここで結構混乱してました笑

CDKコンストラクトについてディレクトリ構造の例もみておくと、概要が掴みやすいかなと思います。(構造についてはあくまで一例です)

image.png

画像では、aurora-cluster.tsファイルにて、AuroraClusterというコンストラクトを定義して、Auroraやそれに使用するセキュリティグループなどを定義しています。
ecr.tsや、fargate.tsといったファイルにも同様にコンストラクトを定義していて、最終的にそれらのコンストラクトをcdk-templates-stack.tsというスタックのファイルでimportしてスタックを構築しています。

image.png


ここから少しややこしくなるかもですが、
CDKでは、コンストラクトの書き方について抽象度を変えながら実装することができます。
これをレイヤーという表現をします。

image.png

image.png

私の観測範囲ではありますが、CDKで開発されるほとんどのリソースはL2で定義されています。
私の場合は、
L3でパターンごとごっそり定義して良さそうなら、L3の書き方を採用して、
それ以外はL2でリソースごとにいい感じに実装して、
L2でカバーできない分をL1で書く
という形の実装をしています。

image.png

image.png

image.png


以上のように、
ほぼほぼコンストラクトの説明になりましたが、

  • 使用するプログラミング言語
  • オブジェクト指向
  • CloudFormationの概念をざっくり
  • CDKコンストラクトの概念をざっくり

これらの概念を理解しておくと、CDKのスタートラインとして十分なのかなと思います。

3. CDK開発で付き合うことの多いドキュメント類まとめ

APIリファレンス

image.png

なかなかとっつき辛いですが、ほぼ全ての回答がこのドキュメントに書かれています。

こちらの記事がわかりやすかったので、参考にしながらちょっとずつ慣れていくと良いと思います。

BLEA

ざっくり言うと、公式が出してくれているCDKのサンプル集です。

image.png

さまざまなユースケースごとがサンプルとして載っており、ディレクトリ構造やスタック設計や、そもそもの記述方法などとても参考になります

Kenji KonoさんのSpeakerDeck

日本人にとってのCDK神コンテンツです。
BLEAの開発チームの方で、よくCDK界隈で登壇をされています。

とにかくわかりやすいです。最新情報もすぐにキャッチしてくれてわかりやすくしてくれるので頻繁に読みに行ってます。

image.png

その他

重複する部分もありますが、こちらの記事は良質なリンク集なのでシェアさせていただきます

4. 公式ワークショップをやってみましょう

ここまで読んでいただければある程度ワークショップがとっつきやすくなっているのではないかと思います。(元からかなりわかりやすい)

ワークショップに対するクラメソさんの記事も一度読んでみるとより、その良さが伝わるのかなと思います。

プログラミングの経験がなくても本当に1から教えてくれるワークショップなので是非チャレンジしてみください

5. まとめ

CDKはIaCツールの一つで、「プログラミング言語で、CloudFormationテンプレートを生成できるツール」と言える

使用するプログラミング言語
オブジェクト指向
CloudFormationの概念をざっくり
CDKコンストラクトの概念をざっくり
の概念を理解しておくと良い

ワークショップが良いのでぜひチャレンジしてください


以上となります。まだ経験として1年もない初学者の書いた記事なので誤りなどがありましたらコメントで教えていただきますと大変助かります!

追記:社内勉強会資料についてSpeakerDeckに追加しました

61
54
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
61
54

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?