備忘録まとめ記事：AWS Cloud Development Kit (AWS CDK) の全体像を簡単に整理してみた

## はじめに

AWS Cloud Development Kit (AWS CDK) は、コードでクラウドインフラストラクチャを定義し、AWS CloudFormation を通じてリソースをプロビジョニングするオープンソースの開発フレームワークです。

まずは以下の神記事を参考にし、理解を深めることをおすすめします。

https://qiita.com/hosomatu/items/e14d4de0888fe91ebd9a

***本記事では、自分用の備忘録として、AWS CDK の基本的な構造、機能、メリットなどを簡単にまとめていきます。***

## AWS CDK に関する私の見解（2024/12/28時点）

AWS CDK の名前は知っていましたが、「***好きなプログラミング言語で CloudFormation テンプレートを生成できるツール***」というざっくりした理解しかありませんでした。

![img_awsgeek-aws-cdk_01.6c7f97729a059cb6953d84bd19852e1bb7f89f6d.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/a08f4983-9e19-fff1-e012-2ee116683f4f.png)
引用画像：https://aws.amazon.com/jp/builders-flash/202309/awsgeek-aws-cdk/

一方で、「***それなら CloudFormation を直接使った方が良いのではないか？***」という疑問もありました。

:::note warn
***この違和感は、CloudFormation を最終的なゴールと考えた場合、AWS CDK はその効率化ツールに過ぎないという認識から来ていたのかもしれません。***
:::

### アプリ開発出身の視点

この点について、アプリケーション開発出身とインフラ出身では感じ方が異なるのではないかと考えています。

:::note info
- **メリット:** 
普段使い慣れたプログラミング言語でインフラをコード化できるため、導入のハードルが低い。

- **理解:** 
インフラ管理をアプリ開発と同様に扱えるため、自然で便利に感じられる。
:::

### インフラ出身の視点

一方で、私のようなインフラ出身の立場から見ると、「***最終的に CloudFormation テンプレートに変換されるのであれば、最初から CloudFormation を使えば良いのでは？***」という疑問を抱いてしまいます。

### しかし、それが学ばない理由にはならない！

このような違和感はあるものの、「***実際に試してみれば案外面白いかもしれない***」と思いました。

![スクリーンショット 2024-12-28 0.01.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/ed1969d4-8bc5-40fd-0ffa-e2444f781e0e.png)
引用画像：https://www.irasutoya.com/2016/04/blog-post_766.html

:::note warn
***また、技術の幅を広げるため、この年末年始は AWS CDK の習得に集中することを決意しました。***
:::

## そもそもAWS CDK とは？

AWS Cloud Development Kit (AWS CDK) は、コードでクラウドインフラストラクチャを定義し、AWS CloudFormation を通じてプロビジョニングするためのオープンソースのソフトウェア開発フレームワークです。

![AppStacks.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/a6607e0f-ea9b-f247-f1ff-c9ffa6f0c93c.png)
引用画像：https://docs.aws.amazon.com/ja_jp/cdk/v2/guide/home.html

AWS CDK は以下の2つの主要なコンポーネントで構成されています。

:::note warn
- **AWS CDK コンストラクトライブラリ**
再利用可能なコードのコレクションで、クラウドインフラストラクチャを効率的に開発するためのモジュールです。AWS サービスの定義や統合の複雑さを軽減します。

- **AWS CDK CLI (コマンドラインインターフェイス)**
プロジェクトの作成、管理、デプロイをサポートするツールで、CLI を使用することで、簡単に Infrastructure as Code (IaC) を適用できます。
:::

詳細については、公式ドキュメントをご参照ください。

https://docs.aws.amazon.com/ja_jp/cdk/v2/guide/home.html

## インフラをコード化するメリット

インフラをコード化する（Infrastructure as Code, IaC）ことには多くのメリットがあります。その中でも、以下の3つのポイントが特に重要です。

### 再現性と一貫性の確保
コードを使って環境を構築することで、どこでも同じ設定を再現可能です。

:::note
**これにより、人為的なミスや設定のばらつきを防ぎ、安定した運用を実現します。**
:::

### 効率化と自動化の促進
自動化により手作業が減り、インフラ構築にかかる時間を大幅に短縮できます。

:::note
**さらに、バージョン管理ツールを利用してコードを共有すれば、チーム間での作業も効率的に進められます。**
:::

### 迅速な対応と柔軟性の向上
コードでインフラを管理することで、障害復旧やリソースのスケーリングが迅速に行えます。

:::note
**クラウドへの移行やリソースの増減にも柔軟に対応でき、ビジネス要件に応じたインフラ管理が可能です。**
:::

## AWS CDK を採用するメリット

普段は CloudFormation や Terraform を主に利用していますが、AWS CDK についても本格的に学び直すことを決意し、今回キャッチアップすることにしました。

### 馴染みのあるプログラミング言語の利用
条件分岐、ループ、構成などのロジックをプログラミング言語で記述でき、インフラとアプリケーションロジックを同じ言語で統一できます。

### AWS CloudFormation との統合
CDK で作成したコードは AWS CloudFormation テンプレートに変換され、デプロイやリソース管理が容易です。

***AWS CloudFormationについては、過去の記事を参考にしてみてください！***

https://qiita.com/free-honda/items/fd0bc9fa7ed840ac812e

https://qiita.com/free-honda/items/4d9c66ebbc12dbfe1d4e

### コンストラクトの再利用
高レベルのコンストラクトを利用することで、少ないコードで効率的にインフラを設計できます。組織全体で共有可能なカスタムコンストラクトを作成することも可能です。

https://dev.classmethod.jp/articles/dop401-get-better-at-building-aws-cdk-constructs-report/

## 実際に使える言語をまとめてみた

AWS CDK は以下のプログラミング言語をサポートしており、柔軟な開発が可能な点が大きな魅力です！

:::note warn
- **TypeScript / JavaScript**
- **Python**
- **Java**
- **C# / .Net**
- **Go**
:::

これらの言語を活用して、コンストラクト（再利用可能なクラウドコンポーネント）を定義し、それをスタックやアプリに構成することで、クラウドインフラストラクチャを一元管理できます。

***私はまず、馴染みのある Python を使ってキャッチアップしていく予定です！***

## まとめ

私自身、AWSのさらなる勉強を進める中で、自分の知らないサービスや理解が足りていない分野に積極的に挑戦していきたいと考えています。

:::note info
***今回は、自分の理解を深めることを目的に基礎的な内容をまとめましたが、今後はハンズオン形式でより実践的な知識を身につけたいと思っています。***
:::

***基本的な内容ではありますが、技術的な助けになれば幸いです！***

## 参考記事

https://qiita.com/Brutus/items/6c8d9bfaab7af53d154a

https://www.cloudsolution.tokai-com.co.jp/white-paper/2023/0720-403.html

https://zenn.dev/issy/articles/zenn-cdk-overview