AWS Cloud Development Kit (AWS CDK)に関して、勉強したことを残していきます。
今回は「そもそもCDKとは?」ということで、公式のドキュメントやWorkshopを元に、CDKの概要をまとめます。
以下参考リンク。
CDKとは?
公式ドキュメントには以下の記載があります。
AWS Cloud Development Kit (AWS CDK) は、コードでクラウドインフラストラクチャを定義し、AWS CloudFormation を通じてプロビジョニングするための、オープンソースのソフトウェア開発フレームワークです。
記載の通り、CDKはInfrastructure as Code(IaC)ツールの一つであり、AWSのリソースをPythonやTypeScriptなどのプログラミング言語で定義できます。
これまでコンソール上で手動設定していたインフラをコードで管理することで、構成管理の負荷軽減やリソースの再利用性向上といったメリットを得られます。
AWSのIaCツールにはCloudFormationもありますが、CloudFormationではJSONやYAML形式のテンプレートを用いてリソースを定義します。
一方、CDKは馴染みのあるプログラミング言語で記述できるため、CloudFormationテンプレートよりも直感的に書きやすく、IDEによる補完や型チェックといった恩恵も受けられます。(CDKも裏側ではCloudFormationテンプレートへの変換を行ってからリソースを作成しています)
使うには何が要る?
AWS CDKを使う場合、ざっくり以下のものが必要です。
- AWSアカウント, ユーザー
- AWS CLI
- Node.js
- AWS CDK Toolkit
他にも実際にリソースを定義するためのプログラミング言語や、IDEなども必要になります。
各種インストールの詳細はドキュメントやWorkshopを参照ください。
どう使う?
CDKの基本的な手順は以下の通り。
1. CDK用のディレクトリ作成
リソースを定義するためのプロジェクトディレクトリを作成します。
cdk initを使えば、プロジェクトのテンプレートタイプと使用するプログラミング言語を指定するだけでテンプレートのディレクトリが作成できます。
cdk init sample-app --language python
sample-appの部分はappでもよいみたいです。(公式ドキュメント)
2. リソースをコードで定義
作りたいリソースをプログラミング言語で書きます。
LambdaのコードやS3に入れたいデータも、ディレクトリ内に格納してコードで定義すれば、デプロイ時に反映できるようです。
3. CloudFormationテンプレートに変換
cdk synthで、2で定義したリソースをCloudFormationテンプレートに変換します。
実行すればディレクトリ内にcdk.outのディレクトリができ、その中にCloudFormationテンプレートが格納されるので、意図したリソースになっているかの確認もできます。(確認不要なら省略OK)
4. bootstrapによるCDK用リソース作成
deployする前に、対象のAWSアカウント・リージョンに対して最初の一度だけ実行します。
CDKがdeployに使用するS3バケットやIAMロールを作成します。
cdk bootstrapを一度実行すれば、それ以降は作成されたリソースを使ってdeployを行うので、再度実行する必要はありません。
5. リソース作成
最後に、AWSへリソースをdeployします。
cdk deployを実行すると、CloudFormationテンプレートがアップロードされ、変更内容(差分)が表示。問題なければリソースが作成・更新されます。
その他
他には以下のようなコマンドもあります。
-
cdk diff: 現在の環境との差分確認 -
cdk destroy: 作成したリソース削除
CDK関係で出てくる用語としては以下のようなものがあります。
- App: プロジェクトで構築するCDKアプリ全体のこと
- Stack: デプロイするリソースの単位
- Construct: リソースの部品
まとめ
CDKに関する概要をまとめました。
- CDKはAWSリソースをコードで管理するIaCツール
- 使い慣れたプログラミング言語でAWSリソースを定義できる
- プログラミング言語でリソースを定義するため再利用性・保守性も高い
- 内部ではプログラミング言語からCloudFormationテンプレートに変換し、リソースを作成
-
cdk bootstrapは一度実行するだけ (アカウントやリージョンごと)
普段使うプログラミング言語でリソースを作り、不要になったらcdk destroyで壊すことができるので、AWSの各種サービスを勉強/検証するのにも良さそうです。
実際にどんなコードでどんなリソースが作れるか、作る際の注意点や躓いた部分を他の記事でまとめていきたいと思います。