【 IaC 入門】 AWS CDK で「インフラのコード化」を体験してみた

【 IaC 入門】 AWS CDK で「インフラのコード化」を体験してみた

AWS CDK(Python版)とCloudShellを使い、Lambda と API Gateway でシンプルなサーバーレス API を構築してみました。長期アクセスキーを発行せずに、ローカル PC に認証情報を置かずに一連の作業を完結させる方法をご紹介します。
2026.08.19

はじめに

こんにちは、クラスメソッドオペレーションズの目取眞です。

AWS CDK(AWS Cloud Development Kit、以下 CDK)の Python 版を使い、AWS Lambda と Amazon API Gateway によるシンプルなサーバーレス API を構築してみました。CDK では Python などのプログラミング言語で AWS リソースを定義できるため、IaC(Infrastructure as Code)の考え方を直感的に理解できます。AWS 初学者が IaC に触れる際の入門教材として適していると感じたため、手順を整理して記事にしました。

なお、今回は会社の検証環境を使用していますが、社内ポリシーで長期アクセスキーの発行が非推奨とされているため、ローカル PC に認証情報を置かずに完結できる AWS CloudShell 上で作業しています。同様の環境で作業されている方の参考になれば幸いです。

今回のゴール

  • CDK(Python)を使って、Lambda と API Gateway によるシンプルな API を構築する
  • 長期アクセスキーを発行・設定せず、CloudShell だけで一連の作業(環境構築からデプロイ、後片付けまで)を完結させる
  • cdk synth でコードが AWS CloudFormation テンプレートに変換される様子を確認する

今回作るものの構成図

スクリーンショット 2026-08-19 08.58.47

/hello エンドポイントにアクセスすると API Gateway が Lambda を呼び出し、実行結果を返します。Lambda の実行ログは Amazon CloudWatch Logs に記録されます。

事前準備:なぜ CloudShell を使うのか

cdk deploy は AWS マネジメントコンソールへのログインとは別に、AWS CLI や CDK CLI が AWS API を呼び出すための認証情報を必要とします。ローカル PC から AWS CLI や CDK CLI を利用する場合は、環境に応じた認証設定が必要です。しかし、会社の検証環境では長期アクセスキーの発行が非推奨とされていました。

そこで採用したのが CloudShell です。CloudShell は、ログインしている IAM ユーザーまたはロールの権限を引き継いで動作するブラウザベースのシェル環境のため、長期アクセスキーを発行・設定せずに CDK のデプロイまで完結できます。

1. CloudShell を起動する

AWS マネジメントコンソールにログインし、画面上部のツールバーから CloudShell アイコンをクリックします。

スクリーンショット 2026-08-18 15.11.56

2. プロジェクトのディレクトリとファイルを作成する

まず、プロジェクト用のディレクトリを作成します。

mkdir -p ~/aws-cdk-handson/aws_cdk_handson ~/aws-cdk-handson/lambda
cd ~/aws-cdk-handson

Lambda 関数のコードを作成

以下のコマンドで Lambda 関数のコードを作成します。

lambda/handler.py
cat > lambda/handler.py << 'EOF'
import json

def handler(event, context):
    return {
        "statusCode": 200,
        "headers": {"Content-Type": "application/json"},
        "body": json.dumps({"message": "Hello from Lambda! CDK Handson"}),
    }
EOF

CDK スタックのコードを作成

CDK スタックのコードを作成します。

aws_cdk_handson/aws_cdk_handson_stack.py
cat > aws_cdk_handson/aws_cdk_handson_stack.py << 'EOF'
from aws_cdk import (
    Stack,
    CfnOutput,
    aws_lambda as _lambda,
    aws_apigatewayv2 as apigwv2,
    aws_apigatewayv2_integrations as integrations,
)
from constructs import Construct

class AwsCdkHandsonStack(Stack):
    def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
        super().__init__(scope, construct_id, **kwargs)

        hello_function = _lambda.Function(
            self,
            "HelloHandler",
            runtime=_lambda.Runtime.PYTHON_3_12,
            handler="handler.handler",
            code=_lambda.Code.from_asset("lambda"),
        )

        http_api = apigwv2.HttpApi(
            self,
            "HelloHttpApi",
            api_name="hello-handson-api",
        )

        integration = integrations.HttpLambdaIntegration(
            "HelloIntegration", hello_function
        )

        http_api.add_routes(
            path="/hello",
            methods=[apigwv2.HttpMethod.GET],
            integration=integration,
        )

        CfnOutput(self, "ApiUrl", value=f"{http_api.api_endpoint}/hello")
EOF

残りのファイルを作成

CDK の設定ファイルとエントリーポイントを作成します。

app.py / requirements.txt / cdk.json
touch aws_cdk_handson/__init__.py

cat > app.py << 'EOF'
#!/usr/bin/env python3
import aws_cdk as cdk

from aws_cdk_handson.aws_cdk_handson_stack import AwsCdkHandsonStack

app = cdk.App()
AwsCdkHandsonStack(app, "AwsCdkHandsonStack")
app.synth()
EOF

cat > requirements.txt << 'EOF'
aws-cdk-lib>=2.150.0,<3.0.0
constructs>=10.0.0,<11.0.0
EOF

cat > cdk.json << 'EOF'
{
  "app": "python3 app.py"
}
EOF

ファイル確認

以下のコマンドで、ファイルが揃っているか確認します。

find . -type f

以下の 6 ファイルが表示されていれば成功です。

./cdk.json
./requirements.txt
./app.py
./lambda/handler.py
./aws_cdk_handson/aws_cdk_handson_stack.py
./aws_cdk_handson/__init__.py

3. CDK CLI と Python 環境をセットアップする

CloudShell には Python と Node.js がプリインストールされているため、CDK CLI のみ追加でインストールします。

sudo npm install -g aws-cdk  # CDK CLI をインストール
python3 -m venv .venv        # Python 仮想環境を作成
source .venv/bin/activate    # 仮想環境を有効化
pip install -r requirements.txt  # CDK ライブラリをインストール

4. ブートストラップを実行する

cdk bootstrap は、CDK が使用するブートストラップリソース(アセット保存用の Amazon S3 バケット、Amazon ECR リポジトリ、IAM ロールなど)を、AWS アカウントとリージョンの組み合わせごとに作成するコマンドです。すでにブートストラップ済みの場合は、必要に応じて既存の CDKToolkit スタックが更新されます。

cdk bootstrap

スクリーンショット 2026-08-18 16.12.13

5. cdk synth でテンプレートを確認する

デプロイ前に、Python で書いたコードがどのような CloudFormation テンプレートに変換されるかを確認します。

cdk synth

スクリーンショット 2026-08-18 15.24.03

6. デプロイする

cdk deploy

途中で以下のような確認が出るので y を入力します。

Stack includes security-sensitive updates and "--require-approval" is set to 'broadening'.
Do you wish to deploy these changes (y/n)?

デプロイが完了すると、ApiUrl という出力に API のエンドポイント URL が表示されます。

スクリーンショット 2026-08-18 16.21.18

7. 動作確認する

出力された URL に対して curl を実行します。

curl https://xxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/hello

以下のレスポンスが返ってくれば成功です。

スクリーンショット 2026-08-18 15.32.27

{"message": "Hello from Lambda! CDK Handson"}

8. AWS マネジメントコンソールで作成されたリソースを確認する

Lambda 関数の確認

Lambda コンソールを開き、作成された関数を確認します。

スクリーンショット 2026-08-18 15.34.29

CDK が自動生成した関数名や、API Gateway との連携が確認できます。

API Gateway の確認

API Gateway コンソールを開くと、/hello ルートが登録されていることを確認できます。

スクリーンショット 2026-08-18 15.35.42

CloudWatch Logs でログを確認

CloudWatch Logs で、先ほどの curl によって Lambda が実行されたログを確認します。なお、CloudWatch Logs のロググループは CDK で明示的に設定していませんが、Lambda 関数の初回呼び出し時に自動で作成されます。

スクリーンショット 2026-08-18 16.26.39
スクリーンショット 2026-08-18 15.39.36

コールドスタート時の INIT_START や、関数呼び出し時の STARTENDREPORT などが記録されています。

9. 後片付けする

不要な課金を抑えるため、検証で作成したリソースを削除します。

cdk destroy

スクリーンショット 2026-08-18 15.41.23

出力に ✓ AwsCdkHandsonStack: destroyed と表示されれば、リソースが正常に削除されています。

また、cdk bootstrap で作成される CDKToolkit スタック(Amazon S3 バケットや Amazon ECR リポジトリなど)は、同じアカウント・リージョンで複数の CDK プロジェクト間で共有・再利用される想定のリソースのため、原則として削除しないでください。削除すると、同じ環境を利用する他の CDK プロジェクトに影響する可能性があります。検証専用環境などで削除する場合は、他の CDK プロジェクトで使用されていないことを確認した上で、CloudFormation コンソール → スタック → CDKToolkit を選択 → 「スタックを削除」をクリックで削除できます。

まとめ

CDK(Python)を使うことで、Lambda や API Gateway などのリソースをコードでまとめて定義・削除できることを確認しました。

また、長期アクセスキーの発行が非推奨とされている環境でも、CloudShell を使えばローカルに認証情報を置かずにハンズオンを完結できます。同様の環境で作業する方の参考になれば幸いです。

参考

クラスメソッドオペレーションズ株式会社について

クラスメソッドグループのオペレーション企業です。
運用・保守開発・サポート・情シス・バックオフィスの専門チームが、 IT・AI をフル活用した「しくみ」を通じて、お客様の業務代行から課題解決や高付加価値サービスまでを提供するエキスパート集団です。
当社は様々な職種でメンバーを募集しています。
「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、クラスメソッドオペレーションズ株式会社 コーポレートサイトをぜひご覧ください。
※2026 年 1 月 アノテーション㈱から社名変更しました。

この記事をシェアする

AWSのお困り事はクラスメソッドへ

関連記事