ENGINEER BLOG ENGINEER BLOG
  • 公開日
  • 最終更新日

【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 リソースを表す。

awscdk-01.pngAWS 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を繰り返し実行していきます。

  1. プロジェクト作成:cdk init を実行、または手動でプロジェクト用フォルダやファイルを作成
  2. リソース定義:cdk アプリケーションをコーディング
  3. 合成およびテスト:cdk synth を実行して AWS CloudFormation テンプレートを生成し、内容を確認およびテスト
  4. デプロイ:cdk diff で既存環境との差分を確認し、cdk deploy でリソースを AWS へデプロイ

おわりに

BlackBelt などでわかりやすくまとめられていたものの、改めて自分でも整理してみることによって、AWS CDK への理解度が高まったような気がしています! 次回は本記事でのまとめをもとに、実際にリソースを作成してみたいと思います。

参考情報

BlackBelt

AWS Builder Center

GitHub

この記事は私が書きました

S.Endo

記事一覧

コーヒーを飲みながら仕事をしています

S.Endo

この記事を共有する

クラウドのご相談

CONTACT

クラウド導入や運用でお悩みの方は、お気軽にご相談ください。
専門家がサポートします。

サービス資料ダウンロード

DOWNLOAD

ビジネスをクラウドで加速させる準備はできていますか?
今すぐサービス資料をダウンロードして、詳細をご確認ください。