2021/07/16

AWSのCDKとは?Pythonで記述してリソース管理を快適にしよう

 
  

AWS CDKとは?


AWS CDK(Cloud Development Kit)とは、プログラミング感覚でAWSのリソースを定義・管理できるツールとなります。以下にて、もう少し詳しく見ていきましょう。

AWSにおけるリソース管理

AWSに限らず、クラウド開発におけるリソース管理は、非常に重要なタスクとなります。

AWSで開発を進めていくと、当然リソースの数は増えていきますが、開発環境、テスト環境、ステージング環境と、工程が進むに従って当然これらのリソースを同じように構成・管理しなくてはなりません。

開発途中で構成の変更が生じた場合、ある環境だけ変更の適用が漏れていれば大変なことになります。

そこで、AWSにはCloudFormationというサービスがあり、AWSリソースに関するテンプレートを設定ファイルに記述することで、上記のヒューマンエラーを防ぎつつ各環境のリソースを一括管理できるようになります。

ただ、このCloudFormationは設定ファイルであるがゆえに、どうしても記述が冗長になりがちで、しかもIDEのように補完機能が使えないというデメリットがあります。

そこでご紹介したいのが、今回取り上げるAWS CDKです。

AWS CDKを使うメリット

AWS CDKを使う一番のメリットは、AWS CloudFormationに比べて記述量が少なくて済み、リソース管理に割く時間を大幅に短縮できることです。

AWS CDKは、今回取り上げるPythonの他、TypeScript、JavaScript、Java、C#の各言語に対応しており、これらの中から好きな言語を選んでコードを記述することで、CloudFormationテンプレートに変換、デプロイされるという仕組みになっています。

そして、ループ処理のようなプログラミングロジックを記述したり、デフォルトを省略したりすることで記述量を削減できるほか、IDEの補完機能を使うことでコーディングの時間短縮にもなるのです。

AWS CDKの構成

AWS CDKの構成を簡単にご説明しますので、軽くイメージを掴んでいきましょう。

まず、AWS CDKアプリにおいて、一つ以上のCloudFormationのスタック(リソースの集合体)を定義します。そして、スタックの中でコンストラクタを使ってEC2インスタンスなどのAWSの各種リソースを定義していくことになります。

AWS CDKの導入


AWS CDKのメリットを理解して頂いたところで、ここからはその導入手順についてお伝えしていきます。今回はAI開発言語として人気のある、Pythonを使った例についてご紹介します。

Node.jsのインストール

まず前提条件として、AWS CDK自体はTypeScriptで書かれているため、PythonへのマッピングのためにNode.jsのインストールが必要となります。

こちらからNode.jsのインストーラをダウンロードして、ウィザードに従ってインストールしてください。

コマンドラインより「node -v」及び「npm -v」というコマンドを実行し、それぞれバージョン情報が表示されればインストール完了です。因みに、npm(Node Package Manager)というのは、JavaScript系のパッケージ管理ツールです。

AWS CDKのインストール

先ほどインストールしたnpmコマンドを使って、AWS CDKをグローバルにインストールします。

以下のコマンドを実行してください。

npm install -g aws-cdk

正しくインストールされていることを確認するため、バージョン情報を表示します。

cdk --version

初期設定

テストプロジェクト用のディレクトリを作成します。今回は、「test-cdk」という名前で設定します。

mkdir test-cdk
cd test-cdk

言語をPythonに設定してCDKプロジェクトを作成します。なお、この際にgitの初期化に関する警告が表示されることがありますが、ここでは特に問題ないので気にしなくても大丈夫です。

cdk init --language python

ディレクトリ内に作成されたPython仮想環境をアクティベートします。

source .env/bin/activate

プラットフォームがWindowsの場合は、上記の代わりに以下のコマンドを実行します。

env\Scripts\activate.bat

必要なPythonモジュールをインストールします。

python -m pip install -r requirements.txt

AWS CDKを使った環境構築


AWS CDKを使う準備ができたので、ここからは実際にPythonのコードを記述して環境構築してみましょう。今回は、S3バケットとEC2インスタンス(附随してVPCとセキュリティグループも含めて)を作成してみます。

パッケージのインストール

Pythonのパッケージ管理システムpipを使って、CDKを利用する上で必要となるcoreパッケージと、S3及びEC2のライブラリパッケージをインストールします。

pip install aws-cdk.core aws-cdk.aws-s3 aws_cdk.aws_ec2

リージョンの指定及びimport文の追加

S3バケットとEC2インスタンス作成のコードを記述します。その前に、プロジェクトディレクトリ内の「app.py」を編集してデプロイ先のリージョンを指定しておくと良いでしょう。

TestCdkStack(app, "test-cdk", env=core.Environment(region="ap-northeast-1"))

プロジェクト名ディレクトリ配下の「プロジェクト名スタックファイル(今回の場合は「test_cdk/test_cdk_stack.py」)」を編集します。

from aws_cdk import (
    aws_s3 as s3,
    aws_ec2 as ec2,
    core as cdk
)

S3バケットの作成

test_cdk/test_cdk_stack.pyのコメントテキスト「# The code that~」以下にコードを記述します。

bucket = s3.Bucket(self, 
    "MyFirstBucket", 
    versioned=True,)

VPC、セキュリティグループの作成

上記に続けてVPC、セキュリティグループを作成します。

cidr = '10.0.0.0/21'
vpc = aws_ec2.Vpc(
    self,
    id='test-vpc',
    cidr=cidr,
    nat_gateways=1,
    subnet_configuration=[
        aws_ec2.SubnetConfiguration(
            cidr_mask=24,
            name='public',
            subnet_type=aws_ec2.SubnetType.PUBLIC,
        ),
        aws_ec2.SubnetConfiguration(
            cidr_mask=24,
            name='private',
            subnet_type=aws_ec2.SubnetType.PRIVATE,
        ),
    ],
)

security_group = aws_ec2.SecurityGroup(
    self,
    id='test-security-group',
    vpc=vpc,
    security_group_name='test-security-group'
)

security_group.add_ingress_rule(
    peer=aws_ec2.Peer.ipv4(cidr),
    connection=aws_ec2.Port.tcp(22),
)

EC2インスタンスの作成

更に続けてEC2インスタンスを作成します。

image_id = aws_ec2.AmazonLinuxImage(generation=aws_ec2.AmazonLinuxGeneration.AMAZON_LINUX_2).get_image(self).image_id

aws_ec2.CfnInstance(
    self,
    id='testec2',
    availability_zone="ap-northeast-1a",
    image_id=image_id,
    instance_type="t3.micro",
    key_name='testkey',
    security_group_ids=[security_group.security_group_id],
    subnet_id=vpc.private_subnets[0].subnet_id,
    tags=[{
        "key": "Name",
        "value": "testec2"
    }]
)

AWSCloudFormationテンプレートの合成とスタックのデプロイ

コードが記述できたので、AWS CDKで定義されたスタックごとに、AWS CloudFormationテンプレートを生成します(これを「合成」と呼びます)。

cdk synth

次に、スタックをデプロイします。但し、AWS CDKを環境に初めてデプロイするときは、「ブートストラップスタック」をインストールする必要があるので、以下のコマンドを実行します。

cdk bootstrap

スタックをデプロイするには、以下のコマンドを実行します。なお、スタックが一つしかない場合はパラメータでのスタックの指定は不要です。

cdk deploy {スタック名}

なお、通常のプログラムはコードを作成・修正した場合はビルドが必要ですが、AWS CDKはビルドが自動化されているので、必要ありません。

AWS CDKを使ってみよう


今回は、AWS CDKを使って、Pythonのコード記述でAWSの環境を構築する手順をご紹介しました。

AWS CDKを使うことで、AWSのリソース管理を簡潔にコード記述でき、環境ごとに共通のリソース構成を適用できます。

是非、ご自身の慣れ親しんだ言語でAWS CDKを使ってみてください。

ITエンジニアへのキャリアチェンジならキャリアチェンジアカデミー

この記事の監修者・著者

株式会社オープンアップITエンジニア
株式会社オープンアップITエンジニア
未経験からITエンジニアへのキャリアチェンジを支援するサイト「キャリアチェンジアカデミー」を運営。これまで4500人以上のITエンジニアを未経験から育成・排出してきました。
・AWS、salesforce、LPICの合計認定資格取得件数:2100以上(2023年6月時点)
・AWS Japan Certification Award 2020 ライジングスター of the Year 受賞

おすすめの動画

  • 【未経験からIT業界へ転職するなら】相談窓口とスキルの獲得はここで解決!IT転職が一気に有利に!【キャリアチェンジアカデミー】

  • 【費用一切不要】未経験からIT業界へ転職するならまずはここへ相談!【キャリアチェンジアカデミー】

  • 【何のエンジニアになれるのか?】未経験からITエンジニアを目指すとこんな道がある【キャリアチェンジアカデミー】