AWS CDKで始めるIaC入門(Python編)
インフラもコードで管理! AWS Cloud Development Kit (CDK) をPythonで記述し、GitHub Actionsで自動デプロイする実践的なIaCワークフローをゼロから構築します。この記事で、手動構築から完全に卒業しましょう。
🧩 IaCとは?なぜ必要なのか
IaC(Infrastructure as Code) は、AWSコンソールでの手動構築ではなく、インフラをコードで定義・管理する考え方です。このアプローチにより、コードをGitで管理し、自動化・再現性を実現します。
メリット
- ✅ 再現性が高い:誰が実行しても同じ環境がデプロイされます。
- ✅ 履歴管理:Gitでインフラの変更履歴を追跡できます。
- ✅ 自動デプロイ:CI/CDパイプラインによるデプロイ・破棄が可能です。
- ✅ 環境切り替え:開発、ステージング、本番環境の切り替えが容易です。
🧱 AWS CDKとは
AWS CDKは、AWS CloudFormationをプログラミング言語で生成する AWS公式のフレームワークです。PythonやTypeScriptなどの使い慣れた言語で、柔軟かつ抽象度の高いインフラ定義が可能です。
| 比較項目 | CloudFormation | AWS CDK |
|---|---|---|
| 記述形式 | YAML / JSON | Python, TypeScript, etc. |
| 柔軟性 | 低い | 高い(関数や変数、ループが使える) |
| 学習コスト | 中 | 低い(コード感覚で書ける) |
⚙️ GitHubでの準備
① リポジトリ構成
GitHub上で以下の構成を用意します。
aws-cdk-iac-demo/
├── .github/
│ └── workflows/
│ └── deploy.yml # GitHub Actionsの設定ファイル
├── app.py # CDKアプリケーションのエントリポイント
├── requirements.txt # Pythonの依存関係
└── aws_cdk_iac_demo/
└── aws_cdk_iac_demo_stack.py # インフラ定義の本体
🪜 CDKプロジェクトを作成
ローカルで開発する場合は、次の手順で初期化します。
-
プロジェクトの初期化
mkdir aws-cdk-iac-demo cd aws-cdk-iac-demo # PythonプロジェクトとしてCDKを初期化 cdk init app --language python -
仮想環境の準備と依存パッケージのインストール
python3 -m venv .venv source .venv/bin/activate pip install -r requirements.txt
🖋️ PythonでEC2をデプロイする
aws_cdk_iac_demo/aws_cdk_iac_demo_stack.py を以下のように編集し、VPCとEC2インスタンスを定義します。
from aws_cdk import (
Stack,
aws_ec2 as ec2,
)
from constructs import Construct
class AwsCdkIacDemoStack(Stack):
def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
super().__init__(scope, construct_id, **kwargs)
# 1. VPCを作成 (2つのAvailability Zoneを使用)
vpc = ec2.Vpc(self, "MyVpc", max_azs=2)
# 2. EC2インスタンスを作成 (Amazon Linux 2, t2.micro)
ec2.Instance(
self, "MyInstance",
instance_type=ec2.InstanceType("t2.micro"),
machine_image=ec2.MachineImage.latest_amazon_linux2(),
vpc=vpc
)
🚀 GitHub Actionsで自動デプロイ
① IAMユーザーの準備とシークレット登録
GitHub ActionsがAWSへデプロイできるように、IAMユーザーを作成し、以下の手順で認証情報を登録します。
- IAMユーザーに必要な権限(学習用途なら
AdministratorAccess)を付与し、アクセスキーを発行します。 - GitHubリポジトリの Settings → Secrets and variables → Actions に以下を登録します:
| 名前 | 値 | 目的 |
|---|---|---|
AWS_ACCESS_KEY_ID |
IAMユーザーのアクセスキー | AWS認証用 |
AWS_SECRET_ACCESS_KEY |
シークレットキー | AWS認証用 |
AWS_REGION |
例:ap-northeast-1
|
デプロイ先のリージョン |
② GitHub Actions の設定ファイルを作成
.github/workflows/deploy.yml を追加します。
name: Deploy AWS CDK Stack
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 20
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: Install AWS CDK and dependencies
run: |
# グローバルにCDK CLI (Node.js)をインストール
npm install -g aws-cdk
# 仮想環境を有効化し、Pythonの依存関係をインストール
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
- name: Bootstrap CDK
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_DEFAULT_REGION: ${{ secrets.AWS_REGION }}
run: cdk bootstrap
- name: Deploy Stack
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_DEFAULT_REGION: ${{ secrets.AWS_REGION }}
run: cdk deploy --require-approval never
🧩 デプロイ結果を確認する
GitHubでmainブランチにコードをPushすると、Actionsが自動で実行され、CloudFormationスタックがデプロイされます。
完了後、AWSコンソールの以下を確認してみましょう。
-
CloudFormation:
AwsCdkIacDemoStackが存在する - VPC:CDKで定義した新しいVPCが作成されている
-
EC2:
t2.microインスタンスが作成されている
🧹 クリーンアップ
不要になったら、以下のコマンドで作成したスタックとリソースをすべて削除できます。
# 仮想環境を終了
deactivate
# プロジェクトディレクトリで実行
cdk destroy
📈 ベストプラクティス
基本的なデプロイが成功したら、次は安全で持続可能なIaC運用のために、以下のベストプラクティスを意識しましょう。
| 項目 | 内容 |
|---|---|
| バージョン管理 | GitHubでコード・IaC両方を一元管理し、レビューを必須化する。 |
| テスト環境 |
dev ブランチを別スタック(例: AwsCdkIacDemo-Dev)としてデプロイする。 |
| 権限管理 |
最小権限のIAMロールを利用し、ActionsにはAdministratorAccessを渡さない。 |
| CI/CD |
cdk diff ステップをパイプラインに組み込み、変更差分をレビューする。 |
🌱 まとめ
| 学んだこと | 内容 |
|---|---|
| IaCとは | インフラをコードで管理し、再現性と効率を高める考え方。 |
| AWS CDKとは | CloudFormationをPythonなどで生成できるAWS公式ツール。 |
| GitHub Actions | IaCの自動デプロイを可能にするCI/CD基盤。 |
| メリット | コード管理・自動化・再現性を同時に実現。 |
🚧 今後の応用予定
今回のEC2デプロイは最も基本的な例でした。今後は次のような構成にも挑戦していく予定です👇
✅ Lambda + API GatewayをCDK + GitHub Actionsで自動デプロイする
✅ CodePipeline × CDK で自動CI/CDを構築し、承認フローを組み込む
✅ Parameter Store や Secrets Manager と組み合わせた機密情報の安全な構成管理
🪶 おわりに
AWS CDKは「インフラ構築を開発サイクルの一部に組み込む」ための最強ツールです。手動構築から卒業し、コードでクラウドを自在に操る時代へ — ぜひCDKを試してみてください!
Discussion