この記事の目次
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エンジニアへのキャリアチェンジを支援するサイト「キャリアチェンジアカデミー」を運営。これまで4500人以上のITエンジニアを未経験から育成・排出してきました。
・AWS、salesforce、LPICの合計認定資格取得件数:2100以上(2023年6月時点)
・AWS Japan Certification Award 2020 ライジングスター of the Year 受賞
最新の投稿
- 2023年11月21日キャリア・転職ITエンジニアへのキャリアチェンジに多い理由は?
- 2023年11月20日キャリア・転職フリーターからの就職でおすすめの職業は?
- 2023年11月20日キャリア・転職経理へのキャリアチェンジ転職・志望動機は?
- 2023年11月20日キャリア・転職法務からのキャリアチェンジおすすめの業界は?