はじめに
普段の業務で何気なく利用しているAWS CDK。
おさらいの意味も込めて、実行環境の構築からVPC, 各種AWSリソースの構築などの導入となる部分を振り返る。
プログラム言語はPythonとする。
環境
OS:Ubuntu 24.04 LTS
Node.js:24.20.0
AWS CDK CLI:2.1139.0
Python:3.12.3
AWS CLI:2.36.40
1. 実行環境の構築
1-1. Node.jsのインストール
AWS Cloud Development Kit (AWS CDK) は Node.js 上で動作します。
curl -fsSL https://deb.nodesource.com/setup_24.x | sudo bash -
sudo apt-get install -y nodejs
node --version # バージョンが表示されればOK
1-2. AWS CDK CLIのインストール
sudo npm install -g aws-cdk
cdk --version # バージョンが表示されればOK
1-3. Pythonのインストール
sudo apt-get install -y python3 python3-pip python3-venv python-is-python3
python --version # バージョンが表示されればOK
1-4. AWS CLIのインストール
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
aws --version # バージョンが表示されればOK
2. CDKプロジェクトの準備
2-1. プロジェクトの作成
mkdir my-project
cd my-project
cdk init app --language python
2-2. Pythonの仮想環境をアクティブ化
source .venv/bin/activate
which python # .venv/bin/pythonが参照されていればOK
2-3. 必要なPythonライブラリのインストール
pip install -r requirements.txt
2-4. AWS認証情報を設定
今回はアクセスキーが不要なaws loginで一時認証情報を取得する。
AWS Regionはap-northeast-1(東京)を選択する。
aws login
2-5. CDK環境をブートストラップ
cdk bootstrap
3. AWSリソースの作成
3-1. CDKスタックファイルの更新
VPC, S3バケット, Lambda関数を定義する。
S3バケットへのアクセス権限もLambda関数に設定してみる。
from aws_cdk import (
Stack,
RemovalPolicy,
aws_ec2 as ec2,
aws_lambda as _lambda,
aws_s3 as s3
)
from constructs import Construct
class MyProjectStack(Stack):
def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
super().__init__(scope, construct_id, **kwargs)
# VPC
ec2.Vpc(
self,
"MyVpc",
vpc_name="my-vpc",
max_azs=2,
nat_gateways=0,
)
# S3バケット
bucket = s3.Bucket(
self,
"MyBucket",
bucket_name="my-bucket-26751582141589660576", # 全リージョンでユニークである必要がある
removal_policy=RemovalPolicy.DESTROY,
auto_delete_objects=True,
)
# Lambda関数
fn = _lambda.Function(
self,
"MyFunction",
function_name="my-function",
runtime=_lambda.Runtime.PYTHON_3_12,
handler="index.lambda_handler",
code=_lambda.Code.from_inline(
"def lambda_handler(event, context):\n"
" return {'statusCode': 200, 'body': 'Hello'}"
),
)
# S3バケットへの読み書きをLambda関数に許可
bucket.grant_read_write(fn)
3-2. CloudFormationテンプレートを生成
cdk synth
3-3. CDKスタックをデプロイ
cdk deploy
各種AWSリソースが作成される。
3-4. CDKスタックを削除
確認が終わったら作成したCDKスタックを削除する。
cdk destroy MyProjectStack
まとめ
Node.jsが必要だったり、実行環境を構築するまでに当時苦労したことを思い出せました。
AWS CDKはfor文やif文などプログラム言語の制御構文が使えたり、抽象的なリソース定義ができるところが便利です。
最適なフォルダ構成など実践的なテクニックについても知識を深めていきたいですね。
参考リンク








