- 公開日
- 最終更新日
【AWS CDK】AWS CDK の基本を整理してみる
この記事を共有する
目次
はじめに
こんにちは、パーソル&サーバーワークスのEndoです。 初めて AWS Cloud Development Kit (以下、AWS CDK) を使って AWS リソースを構築することになったので、AWS CDK についての情報を整理しながら本記事にまとめたいと思います。
前提
本記事では AWS CDK のすべてについて、網羅的な記載はしておりません。筆者が学習するうえで必要な情報をまとめているものとなりますので、あらかじめご了承ください。
AWS CDK の概要
AWS CDK とは、Python や TypeScript などのプログラミング言語で定義できる Infrastructure as Code 用オープンソースのソフトウェア開発フレームワークです。AWS へは AWS CloudFormation を通じて、リソースをプロビジョニングします。
なお、AWS CloudFormation ではリソースパラメータを詳細に定義する必要がありますが、AWS CDK ではコンストラクトによってリソースを抽象化および再利⽤することができます。 次項でコンストラクト含めた構成要素について確認していきます。
構成要素
前述のコンストラクトやそのほかの主要な構成要素について、本項で触れておきたいと思います。
- アプリケーション (App): 最上位の構成要素で、複数のスタックを管理し、適切な順序でデプロイやアップデートを行う。
- スタック (Stack):デプロイメントの最小単位となり、複数のコンストラクトを使用して定義した AWS リソースを集約したもの。
- コンストラクト (Construct):構成の基本単位であり、ユーザーによって定義が可能な AWS リソースを表す。
※ AWS Cloud Development Kit (CDK) Basic #1 概要 より引用
※ 上記のほかにも構成要素があります。詳細はBlackBelt記事を参照ください。
アプリケーション
プロジェクトの全体を示すツリーの根の部分です。 複数のAWSアカウント、リージョンをまたいでスタックを⼀元管理でき、依存関係からデプロイ順序を⾃動で管理します。
スタック
AWS CloudFormation スタックに対応する部分です。スタックごとに AWSアカウント、リージョンを指定できます。
コンストラクト
AWS CDK における基本的な構成要素で、リソースを定義します。
コンストラクトには 3 つのレベルがあり、各レベルで抽象化の段階が変わります。一部 S3バケットを例に違いを見ていきます。
- レベル 1 (L1) コンストラクト:AWS CloudFormation リソースにそのままマッピングされる最下位のコンストラクトで、抽象化は行われない。
const bucket = new s3.CfnBucket(this, "{constructId}", {
bucketName: "{bucketname}"
});
- レベル 2 (L2) コンストラクト:L1 をベースに、インテントベースの API を通して抽象化する。
import * as s3 from 'aws-cdk-lib/aws-s3';
new s3.Bucket(this, 'constructId', {
versioned: true
});
- レベル 3 (L3) コンストラクト:複数の L2 を組み合わせた特定用途向けのレベルとなり、パターンとも呼ばれる。class LambdaRestApiなどがある。
プロジェクト
プロジェクトとは、CDK コードを含むファイルとフォルダのことを指します。 今回は TypeScript を例にプロジェクト構成について確認していきます。
共通して使用するファイル
プロジェクトの構成はプログラミング言語ごとに異なりますが、どの言語でも共通して使用するフォルダ・ファイルがあります。
そのうちの cdk.json では、さまざまなキーを指定し、アプリケーションの実行に必要なコマンドを記載します。
TypeScript のプロジェクト構成
TypeScriptを使用する場合のプロジェクト構成例です。
下記以外のファイルやフォルダについてはこちらをご参照ください。
cdk-ts-project
├── bin
│ └── cdk-ts-project.ts # CDK アプリを定義
├── cdk.json # アプリの実行方法に関する指示を AWS CDK CLI に提供
├── lib
│ └── cdk-ts-project-stack.ts # CDK スタックを定義
├── node_modules # Node.js プロジェクト内の共通フォルダ
├── package-lock.json # package.jsonと連携する依存関係のバージョン管理用ファイル
├── package.json # 依存ライブラリなど、CDK プロジェクトに関する情報用ファイル
開発フロー
AWS CDK では、以下の手順で開発を進めていきます。プログラムを改修する際は、以下 2~4を繰り返し実行していきます。
- プロジェクト作成:cdk init を実行、または手動でプロジェクト用フォルダやファイルを作成
- リソース定義:cdk アプリケーションをコーディング
- 合成およびテスト:cdk synth を実行して AWS CloudFormation テンプレートを生成し、内容を確認およびテスト
- デプロイ:cdk diff で既存環境との差分を確認し、cdk deploy でリソースを AWS へデプロイ
おわりに
BlackBelt などでわかりやすくまとめられていたものの、改めて自分でも整理してみることによって、AWS CDK への理解度が高まったような気がしています! 次回は本記事でのまとめをもとに、実際にリソースを作成してみたいと思います。
参考情報
BlackBelt
- AWS Cloud Development Kit (CDK) Basic #1 概要
- AWS Cloud Development Kit (CDK) Basic #2 基本的なコンポーネントと機能
- AWS Cloud Development Kit (CDK) Basic #3 開発を効率化する機能
AWS Builder Center
GitHub
この記事は私が書きました
S.Endo
記事一覧コーヒーを飲みながら仕事をしています