AWSエンジニアのためのブログメディア

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をグローバルにインストールします。
以下のコマンドを実行してください。
1
|
npm install -g aws-cdk
|
正しくインストールされていることを確認するため、バージョン情報を表示します。
1
|
cdk --version
|
初期設定
テストプロジェクト用のディレクトリを作成します。今回は、「test-cdk」という名前で設定します。
1
2
|
mkdir test-cdk
cd test-cdk
|
言語をPythonに設定してCDKプロジェクトを作成します。なお、この際にgitの初期化に関する警告が表示されることがありますが、ここでは特に問題ないので気にしなくても大丈夫です。
1
|
cdk init --language python
|
ディレクトリ内に作成されたPython仮想環境をアクティベートします。
1
|
source .env/bin/activate
|
プラットフォームがWindowsの場合は、上記の代わりに以下のコマンドを実行します。
1
|
env\Scripts\activate.bat
|
必要なPythonモジュールをインストールします。
1
|
python -m pip install -r requirements.txt
|
AWS CDKを使った環境構築
AWS CDKを使う準備ができたので、ここからは実際にPythonのコードを記述して環境構築してみましょう。今回は、S3バケットとEC2インスタンス(附随してVPCとセキュリティグループも含めて)を作成してみます。
パッケージのインストール
Pythonのパッケージ管理システムpipを使って、CDKを利用する上で必要となるcoreパッケージと、S3及びEC2のライブラリパッケージをインストールします。
1
|
pip install aws-cdk.core aws-cdk.aws-s3 aws_cdk.aws_ec2
|
リージョンの指定及びimport文の追加
S3バケットとEC2インスタンス作成のコードを記述します。その前に、プロジェクトディレクトリ内の「app.py」を編集してデプロイ先のリージョンを指定しておくと良いでしょう。
1
|
TestCdkStack(app, "test-cdk", env=core.Environment(region="ap-northeast-1"))
|
プロジェクト名ディレクトリ配下の「プロジェクト名スタックファイル(今回の場合は「test_cdk/test_cdk_stack.py」)」を編集します。
1
2
3
4
5
|
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~」以下にコードを記述します。
1
2
3
|
bucket = s3.Bucket(self,
"MyFirstBucket",
versioned=True,)
|
VPC、セキュリティグループの作成
上記に続けてVPC、セキュリティグループを作成します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
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インスタンスを作成します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
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テンプレートを生成します(これを「合成」と呼びます)。
1
|
cdk synth
|
次に、スタックをデプロイします。但し、AWS CDKを環境に初めてデプロイするときは、「ブートストラップスタック」をインストールする必要があるので、以下のコマンドを実行します。
1
|
cdk bootstrap
|
スタックをデプロイするには、以下のコマンドを実行します。なお、スタックが一つしかない場合はパラメータでのスタックの指定は不要です。
1
|
cdk deploy {スタック名}
|
なお、通常のプログラムはコードを作成・修正した場合はビルドが必要ですが、AWS CDKはビルドが自動化されているので、必要ありません。
AWS CDKを使ってみよう
今回は、AWS CDKを使って、Pythonのコード記述でAWSの環境を構築する手順をご紹介しました。
AWS CDKを使うことで、AWSのリソース管理を簡潔にコード記述でき、環境ごとに共通のリソース構成を適用できます。
是非、ご自身の慣れ親しんだ言語でAWS CDKを使ってみてください。
Search キーワード検索
Popular 人気の記事
-
AWSの平均年収12選|AWSの人気が高い理由3選なども紹介
2021年01月05日 -
AWS EBSとは?8つの特徴とEBSボリュームについても解説
2020年10月14日 -
AWS Cloud9の利用料金はかかるの?利用手順6つやメリット解説
2020年11月16日 -
AWSへの転職が難しいといわれる5つの理由|求められる経験やスキルを紹介!
2021年03月31日 -
AWS アクセスキーとは?AWS アクセスキーの作り方や使い方を紹介!
2021年01月22日
reccomended おすすめ記事
-
【AWS入門編】AWSとは|サービス概要や特徴・おすすめ参考書4つ
2020年10月14日 -
AWSエンジニアにおすすめの開発手法DevOps。今後の求人は増える?
2020年10月14日 -
AWSを使ってWebサイトを構築しよう!おすすめサービス6つと選び方
2020年10月14日 -
AWSエンジニアの将来性は?年収と必要なスキル6つをご紹介!
2020年10月14日 -
【初心者向け】AWSの代表的なサービス10選|AWSを活用する利便性5選
2020年10月07日
Categories 連載一覧
Tags タグ一覧
Jobs 新着案件
-
各種対応/東京都千代田区/【WEB面談可/インフラ業界経験者/AWSソリューションアーキテクト/AWS経験者活躍中】
月給60万~60万円東京都千代田区(虎ノ門駅) -
構築、運用支援/東京都文京区/【WEB面談可/インフラ業界経験者/AWSソリューションアーキテクト/AWS経験者活躍中】
月給60万~60万円東京都文京区(飯田橋駅) -
映像配信サービス設計、検証/東京都品川区/【WEB面談可/インフラ業界経験者/AWSソリューションアーキテクト/AWS経験者活躍中】
月給70万~70万円東京都品川区(品川シーサイド駅) -
ツール開発/神奈川県横浜市/【WEB面談可】/在宅ワーク
月給33万~33万円神奈川県横浜市(横浜駅) -
基盤構築/東京都千代田区/【WEB面談可/インフラ業界経験者/AWSソリューションアーキテクト/AWS経験者活躍中】/在宅ワーク
月給60万~60万円東京都千代田区(岩本町駅)