0
0

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とは何かを公式ドキュメントから読み解く

0
Posted at

現在、現場でAWS CDKを使用していますが、CDKに深く携わっているわけではありません。

そこで今回は、AWS CDKの公式ドキュメントを実際に読み解きながら、「CDKとは何なのか?」を自分なりに整理していこうと思います。

AWS CDKの公式ドキュメントを読んでみたものの、

「結局、CDKって何をしているの?」
「コンストラクトって何?」
「CloudFormationとはどういう関係?」
new s3.Bucket()って何が起きているの?」

と、最初は分かりにくい部分も多いと思います。

この記事では、そういった部分を一つずつ確認しながら、AWS CDKを初めて学ぶ人にもイメージしやすいように解説していきます。


AWS CDKとは

AWS Cloud Development Kit(AWS CDK)は、プログラミング言語を使ってAWSのクラウドインフラを定義し、AWS CloudFormationを通じて実際のAWSリソースを構築・更新するためのオープンソースのフレームワークです。

簡単に言うと、以下を指します。

AWSのインフラを、プログラミングコードで定義できるようにするための仕組み

通常、AWSのインフラを構築する場合は、AWSマネジメントコンソールから設定したり、CloudFormationのテンプレートを記述したりします。

AWS CDKでは、TypeScript、JavaScript、Pythonなどのプログラミング言語を使って、AWSのインフラをコードとして記述できます。

例えば、CDKでは次のような流れでAWSのリソースを構築します。

TypeScript
    ↓
AWS CDK
    ↓
CloudFormationテンプレート
    ↓
AWS CloudFormation
    ↓
AWSリソースを作成・更新

つまり、私たちはTypeScriptなどでAWSの構成を記述し、それをAWS CDKがCloudFormationで扱える形に変換して、最終的にAWSへデプロイします。


AWS CDKを構成する2つの主要な要素

AWS CDKにはさまざまな機能がありますが、公式ドキュメントでは大きく次の2つが紹介されています。

  1. AWS CDKコンストラクトライブラリ
  2. AWS CDK Toolkit

まずは、CDKを理解するうえで特に重要なコンストラクトライブラリから見ていきます。


AWS CDKコンストラクトライブラリ

AWS CDKコンストラクトライブラリとは、簡単に言えば、

AWSのリソースや構成を定義するために、あらかじめ用意されている再利用可能なコードの集まり

です。

ここで重要になるのが、「コンストラクト」という言葉です。

コンストラクトとは、AWSリソースやAWSの構成をコードとして表現した、再利用可能な部品だと考えると分かりやすいです。

例えば、S3バケットを作りたい場合を考えてみます。

CDKでは、次のようなコードを書くことができます。

import * as cdk from 'aws-cdk-lib';
import * as s3 from 'aws-cdk-lib/aws-s3';

export class MyStack extends cdk.Stack {
  constructor(scope: cdk.App, id: string) {
    super(scope, id);

    const bucket = new s3.Bucket(this, 'MyBucket');
  }
}

この中で特に注目したいのが、次の部分です。

new s3.Bucket(this, 'MyBucket');

これは、

「S3バケットを作成するためのコンストラクトを使う」

という処理です。


s3.Bucketはどこから来ているのか?

ここで、

new s3.Bucket(this, 'MyBucket');

と書けるのが不思議に感じるかもしれません。

自分でBucketというクラスを作ったわけではありません。

その前に、次のコードを書いています。

import * as s3 from 'aws-cdk-lib/aws-s3';

これは、

AWS CDKが提供しているS3用のライブラリを読み込み、s3という名前で利用する

という意味です。

そのため、

import * as s3 from 'aws-cdk-lib/aws-s3';

とすることで、

new s3.Bucket(this, 'MyBucket');

のように、CDKが提供しているS3用のコンストラクトを利用できるようになります。


importnew s3.Bucket()の関係

ここはCDKを理解するうえで重要なので、整理してみます。

まず、

import * as s3 from 'aws-cdk-lib/aws-s3';

によって、AWS CDKのS3用ライブラリを読み込みます。

そして、そのライブラリの中に用意されているBucketというコンストラクトを、

new s3.Bucket(this, 'MyBucket');

として利用しています。

イメージすると、次のようになります。

AWS CDKのコンストラクトライブラリ
            │
            │ import
            ↓
      自分のCDKコード
            │
            │ new s3.Bucket(...)
            ↓
       S3バケットを定義
            ↓
     CloudFormationテンプレート
            ↓
      AWS CloudFormation
            ↓
       AWS上にS3を作成

つまり、

「AWS CDKが提供している部品をimportして、自分のCDKコードの中で利用する」

という関係です。


なぜコンストラクトを使うのか?

では、なぜわざわざコンストラクトという仕組みを使うのでしょうか?

一番大きな理由は、AWSリソースを簡単に定義できるからです。

例えばS3をCloudFormationで構築しようとすると、テンプレートの中にAWSリソースの定義を記述する必要があります。

一方、CDKでは、

const bucket = new s3.Bucket(this, 'MyBucket');

のように、非常にシンプルなコードでS3バケットを定義できます。

さらに、コンストラクトは再利用できます。

例えばS3バケットを複数作りたい場合、

const bucket1 = new s3.Bucket(this, 'Bucket1');
const bucket2 = new s3.Bucket(this, 'Bucket2');
const bucket3 = new s3.Bucket(this, 'Bucket3');

のように、同じBucketコンストラクトを何度も利用できます。

つまり、

s3.Bucket
    ↓
S3を作るための部品
    ↓
何度でも利用できる

ということです。


「再利用可能なコード」とは?

公式ドキュメントにある、

「再利用可能なコードの集まり」

という表現が少し分かりにくいかもしれません。

ここまでの内容を踏まえると、

よく使うAWSリソースや構成をコードとして部品化し、その部品を別のCDKコードでも繰り返し利用できる

という意味だと考えると分かりやすいです。

例えば、

new s3.Bucket(...)

というコンストラクトを利用すれば、S3バケットを作るための処理を毎回一から記述する必要がありません。

さらにCDKでは、複数のAWSリソースを組み合わせて、自分でオリジナルのコンストラクトを作ることもできます。

例えば、

S3
 +
CloudFront
 +
Origin Access Control

という構成を一つのコンストラクトとしてまとめれば、その構成自体を別のプロジェクトで再利用することもできます。

このように、CDKではAWSリソース単体だけではなく、複数のAWSリソースを組み合わせた構成も「部品」として扱えるのが特徴です。

では次に重要となるCDKToolKitについても見ていきます

AWS CDK Toolkit

AWS CDKには、インフラを定義するためのコンストラクトライブラリだけではなく、作成したCDKアプリケーションを操作するためのAWS CDK Toolkitがあります。

AWS公式ドキュメントでは、AWS CDK Toolkitについて次のように説明されています。

CDKアプリの管理や操作に使用できるツール

少し分かりにくいので、簡単に言い換えると、

AWS CDK Toolkitは、CDKで書いたコードを「合成」したり「AWSへデプロイ」したりするための道具

と考えると分かりやすいです。


コンストラクトライブラリとの違い

ここまで説明してきたコンストラクトライブラリは、AWSリソースを定義するための部品です。

例えば、

import * as s3 from 'aws-cdk-lib/aws-s3';

const bucket = new s3.Bucket(this, 'MyBucket');

と書くことで、

「S3バケットを作りたい」

というインフラの定義をコードとして記述できます。

しかし、このコードを書いただけではAWS上にS3バケットは作成されません。

そこで登場するのがAWS CDK Toolkitです。

コンストラクトライブラリ
        ↓
「何を作るか」を定義
        ↓
   自分のCDKコード
        ↓
     CDK Toolkit
        ↓
「そのコードをどう実行するか」
        ↓
CloudFormation
        ↓
AWSリソース

つまり、

  • コンストラクトライブラリ → AWSリソースを定義するための部品
  • CDK Toolkit → CDKアプリを操作するための道具

という違いがあります。


CDK Toolkitで何ができるのか?

CDK Toolkitの代表的な使い方が、CDK CLIです。

ターミナルから、

cdk synth

や、

cdk deploy

などのコマンドを実行できます。


cdk synth

まず、cdk synthについて見てみます。

synthは、synthesize(合成)の略です。

CDKコードをCloudFormationテンプレートに変換するために使用します。

例えば、

const bucket = new s3.Bucket(this, 'MyBucket');

というCDKコードを書いた場合、

cdk synth

を実行すると、CDKがコードを処理して、CloudFormationが利用できるテンプレートを生成します。

イメージとしては、

TypeScript
    ↓
new s3.Bucket(...)
    ↓
  cdk synth
    ↓
CloudFormationテンプレート

という流れです。


cdk deploy

では、実際にAWSへリソースを作成する場合はどうするのでしょうか。

そこで使用するのが、

cdk deploy

です。

cdk deployを実行すると、CDKアプリをCloudFormationを通してAWSへデプロイできます。

イメージすると、

TypeScript
    ↓
AWS CDK
    ↓
cdk synth
    ↓
CloudFormationテンプレート
    ↓
cdk deploy
    ↓
AWS CloudFormation
    ↓
AWSリソース

となります。


CDK Toolkitを設定していないとどうなる?

ここは初心者の方には少し分かりにくいところです。

CDK Toolkitがなくても、CDKのコードそのものを書くことはできます。

例えば、

import * as s3 from 'aws-cdk-lib/aws-s3';

const bucket = new s3.Bucket(this, 'MyBucket');

というコードを書くこと自体は可能です。

しかし、CDK CLIが利用できない状態では、

cdk synth

や、

cdk deploy

といったCDKコマンドを実行できません。

そのため、

CDKコードを書く
      ↓
new s3.Bucket(...)
      ↓
「S3を作りたい」という定義はできる
      ↓
      ❌ CDK CLIがない
      ↓
cdk synth / cdk deploy が使えない

という状態になります。

つまり、CDK ToolkitはCDKで作成したアプリケーションを実際に操作するための重要なツールです。


CDK CLIとCDK Toolkit Library

AWS CDK Toolkitには、主に次の2つがあります。

  • CDK CLI
  • CDK Toolkit Library

CDK CLI

CDK CLIは、ターミナルからCDKを操作するためのコマンドラインツールです。

例えば、

cdk synth
cdk deploy
cdk diff
cdk destroy

などのコマンドを使用します。

普段CDKを使っている場合は、このCDK CLIを使う場面が多いと思います。


CDK Toolkit Library

一方、CDK Toolkit Libraryは、CDK Toolkitの機能をプログラムから利用するためのライブラリです。

CDK CLIの場合は、

cdk synth

のように人間がコマンドを入力します。

CDK Toolkit Libraryの場合は、プログラムからCDKの合成やデプロイなどの処理を実行できます。

そのため、初心者の段階では、

CDK CLI = ターミナルからCDKを操作する

CDK Toolkit Library = プログラムからCDKを操作する

と覚えておけば十分です。


コンストラクトライブラリとCDK Toolkitを整理する

ここまでの内容を整理すると、次のようになります。

┌─────────────────────────────┐
│ AWS CDK コンストラクトライブラリ │
│                             │
│ s3.Bucket                   │
│ lambda.Function             │
│ ec2.Instance                │
│ vpc.Vpc                     │
│            ↓                │
│ AWSリソースを定義するための部品 │
└──────────────┬──────────────┘
               │
               │ import
               ↓
┌─────────────────────────────┐
│       自分のCDKコード        │
│                             │
│ new s3.Bucket(...)          │
│ new lambda.Function(...)    │
└──────────────┬──────────────┘
               │
               │ cdk synth
               ↓
┌─────────────────────────────┐
│   CloudFormationテンプレート │
└──────────────┬──────────────┘
               │
               │ cdk deploy
               ↓
┌─────────────────────────────┐
│      AWS CloudFormation      │
└──────────────┬──────────────┘
               ↓
          AWSリソース

このように考えると、

コンストラクトライブラリは「AWSを作るための部品」

CDK Toolkitは「その部品を使って作ったCDKアプリを操作するための道具」

と整理できます。

最初は公式ドキュメントに出てくる「コンストラクトライブラリ」「Toolkit」「CLI」という言葉が別々に見えてしまいますが、実際にはこのような役割分担になっています。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?