🕌

Kiro + AWS CDK を用いた爆速インフラ環境構築がすごかった

に公開

はじめに

最近、AI 開発アシスタント「Kiro」と AWS CDK を組み合わせて、顔認証を利用したアプリケーションプラットフォームのインフラ環境を構築する機会がありました。

この記事では、実際に Kiro を使って構築した成果物を中心に、Kiro + AWS CDK の組み合わせの可能性をご紹介します。

注意事項:

  • 作業時間は厳密に計測しておらず、肌感覚での推測です
  • Kiro との会話内容は、実際のやり取りをサマライズしたり、記憶に基づく再構成を含みます
  • 一部、今回実際には行っていない作業についても「このような可能性がある」として紹介しています

プロジェクト概要

顔認を利用したアプリケーションプラットフォーム とは

このプロジェクトは、ユーザーの顔認証情報利用許諾を管理するプラットフォームです。主な特徴は以下の通りです:

  • ターゲット業界: 写真・動画共有イベント業界
  • 技術スタック: AWS Rekognition、Lambda、API Gateway、RDS、DynamoDB
  • アーキテクチャ: サーバーレス構成
  • 主要機能:
    • ユーザーの顔認証情報登録・管理
    • 企業サービスごとの利用許諾 On/Off 管理
    • 企業向け顔認証 API 提供
    • リアルタイム Webhook 通知

システム構成

Kiro ってどんなもの

Kiro は、開発者向けの AI アシスタント兼 IDE です。主な特徴は以下の通りです:

主要機能

  • コード生成・編集: 自然言語での指示からコードを生成
  • ファイル操作: プロジェクト全体のファイル読み書き・編集
  • コマンド実行: ターミナルコマンドの実行
  • プロジェクト理解: コードベース全体の文脈を理解した提案

特に優れている点

  • 文脈理解: プロジェクト全体の構造と要件を把握した上での提案
  • 実行能力: 提案だけでなく、実際にファイル作成・編集まで実行
  • 継続性: 過去のやり取りを記憶し、一貫した作業を継続

AWS CDK ってどんなもの

AWS CDK(Cloud Development Kit)は、AWS インフラをコードで定義・管理するためのフレームワークです。

主な特徴

  • Infrastructure as Code: インフラを TypeScript/Python 等で記述
  • 高レベル抽象化: AWS リソースを直感的に定義
  • 再利用性: コンポーネント化による再利用
  • 型安全性: TypeScript による型チェック

従来の CloudFormation との違い

// CDK(直感的)
const bucket = new s3.Bucket(this, 'MyBucket', {
  encryption: s3.BucketEncryption.S3_MANAGED,
  lifecycleRules: [{
    expiration: cdk.Duration.days(1)
  }]
});

// CloudFormation(冗長)
{
  "Type": "AWS::S3::Bucket",
  "Properties": {
    "BucketEncryption": {
      "ServerSideEncryptionConfiguration": [...]
    },
    "LifecycleConfiguration": {
      "Rules": [...]
    }
  }
}

実際に構築した成果物の概要

今回 Kiro と一緒に構築したのは以下のような構成です:

  1. AWS CDK スタック - TypeScript で記述されたインフラ定義
  2. 要件・設計ドキュメント - Kiro が生成した詳細な仕様書
  3. データベーススキーマ - PostgreSQL 用の完全なスキーマ定義
  4. プロジェクト構造 - 適切に整理されたファイル構成

作業時間について:
正確に計測していませんが、肌感覚として従来なら数週間かかりそうな作業を数日で完了できた印象です。ただし、これは厳密な測定ではなく、あくまで主観的な感覚です。

実際の成果物の詳細

1. 実際に生成された CDK スタックの品質

Kiro が生成した CDK コードの品質は非常に高く、以下のような特徴がありました:

AWS 環境の事前準備(Kiro が手順書を作成)

開発開始前に、AWS 環境の準備が必要でした。この作業は主に AWS Management Console での手動作業となりますが、Kiro に依頼して詳細な手順書を作成してもらいました。

Kiro への依頼内容

AWS CDKでデプロイするための事前準備手順を教えてください。
IAMユーザー作成、ポリシー設定、AWS CLI設定まで含めて、
初心者でもわかるように手順書を作成してください。

Kiro が作成した手順書の内容

1. IAM ユーザーの作成

  1. AWS Management Console にログイン
  2. IAM サービスに移動
  3. 「ユーザー」→「ユーザーを追加」をクリック
  4. ユーザー名を入力(例:facecloud-developer
  5. 「プログラムによるアクセス」にチェック
  6. 「次のステップ:アクセス権限」をクリック

2. ポリシーの設定

開発用として以下のポリシーをアタッチ:

  • PowerUserAccess(本番環境では最小権限の原則に従って調整)
  • または、CDK 専用のカスタムポリシー作成

3. アクセスキーの取得

  1. ユーザー作成完了後、アクセスキー ID とシークレットアクセスキーを保存
  2. 重要: シークレットキーは再表示できないため、安全な場所に保管

4. AWS CLI の設定

# AWS CLI のインストール(macOS の場合)
brew install awscli

# 認証情報の設定
aws configure
# AWS Access Key ID: [取得したアクセスキーID]
# AWS Secret Access Key: [取得したシークレットアクセスキー]
# Default region name: ap-northeast-1
# Default output format: json

# 設定確認
aws sts get-caller-identity

5. CDK Bootstrap の実行

# CDK CLI のインストール
npm install -g aws-cdk

# CDK Bootstrap(初回のみ)
cdk bootstrap aws://[アカウントID]/ap-northeast-1

この手順書の価値

従来の課題:

  • AWS 公式ドキュメントが膨大で初心者には難しい
  • 必要最小限の設定がわからない
  • 手順を間違えると後で問題が発生

Kiro の手順書の利点:

  • プロジェクト固有の要件に最適化
  • 初心者でも迷わない詳細さ
  • セキュリティベストプラクティスも含む
  • 実際のコマンド例付き

この事前準備により、後続の CDK 開発がスムーズに進行できました。

2. Kiro にそのままお任せできた点

CDK スタックの基盤作成

最初に Kiro に以下のように依頼しました:

AWS CDKを使って、顔認証許諾管理プラットフォームのインフラを構築したい。
以下のコンポーネントが必要:
- PostgreSQL RDS
- DynamoDB(セッション管理用)
- Lambda関数(ユーザー管理、顔認証、許諾管理)
- API Gateway
- S3(画像保存用)
- Cognito(認証用)

Kiro は即座に以下を生成してくれました:

export class FaceCloudStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // VPC for RDS
    const vpc = new ec2.Vpc(this, "FaceCloudVPC", {
      maxAzs: 2,
      natGateways: 1,
      subnetConfiguration: [
        {
          cidrMask: 24,
          name: "public",
          subnetType: ec2.SubnetType.PUBLIC,
        },
        {
          cidrMask: 24,
          name: "private",
          subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS,
        },
      ],
    });

    // PostgreSQL RDS Instance
    const dbInstance = new rds.DatabaseInstance(this, "FaceCloudDB", {
      engine: rds.DatabaseInstanceEngine.postgres({
        version: rds.PostgresEngineVersion.VER_16_9,
      }),
      instanceType: ec2.InstanceType.of(ec2.InstanceClass.T3, ec2.InstanceSize.MICRO),
      vpc,
      credentials: rds.Credentials.fromGeneratedSecret("facecloudadmin", {
        secretName: "facecloud-db-credentials",
      }),
      // ... 他の設定
    });

    // ... 他のリソース定義
  }
}

驚いた点:

  • セキュリティベストプラクティスが自動的に適用されている
  • VPC 設定、暗号化、IAM ロールが適切に設定されている
  • 環境変数やシークレット管理も考慮されている

データベーススキーマの自動生成

要件を伝えると、Kiro は以下のような完全な PostgreSQL スキーマを生成:

-- ユーザーテーブル
CREATE TABLE users (
    user_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    cognito_user_id VARCHAR(128) UNIQUE NOT NULL,
    email VARCHAR(255) UNIQUE NOT NULL,
    face_id VARCHAR(255) UNIQUE, -- Rekognition Face ID
    identity_verified BOOLEAN DEFAULT FALSE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 許諾記録テーブル
CREATE TABLE consent_records (
    consent_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    user_id UUID REFERENCES users(user_id) ON DELETE CASCADE,
    enterprise_id UUID REFERENCES enterprises(enterprise_id),
    purposes TEXT[] NOT NULL, -- ['authentication', 'analytics']
    granted BOOLEAN NOT NULL,
    expires_at TIMESTAMP,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 適切なインデックスも自動生成
CREATE INDEX idx_consent_user_enterprise ON consent_records(user_id, enterprise_id);
CREATE INDEX idx_recognition_logs_created_at ON recognition_logs(created_at);

素晴らしかった点:

  • 外部キー制約が適切に設定されている
  • パフォーマンスを考慮したインデックス設計
  • 監査ログ用のテーブルも含まれている

3. 上手くいかずに修正プロンプトを行った点

Lambda 関数の VPC 設定問題

最初に Kiro が生成した Lambda 関数設定では、VPC 内の RDS にアクセスできない問題が発生しました。

初回生成されたコード:

const userManagementLambda = new lambda.Function(this, "UserManagementLambda", {
  runtime: lambda.Runtime.PYTHON_3_11,
  handler: "user_management.handler",
  code: lambda.Code.fromAsset("lambda/user-management"),
  // VPC設定が不足
});

修正プロンプト:

Lambda関数がVPC内のRDSにアクセスできません。
VPC設定とIAMロールを修正してください。

修正後のコード:

const userManagementLambda = new lambda.Function(this, "UserManagementLambda", {
  runtime: lambda.Runtime.PYTHON_3_11,
  handler: "user_management.handler",
  code: lambda.Code.fromAsset("lambda/user-management"),
  role: lambdaRole, // 適切なIAMロール
  vpc, // VPC設定追加
  environment: {
    DB_SECRET_ARN: dbInstance.secret!.secretArn,
    // 必要な環境変数
  },
});

API Gateway の認証設定

企業向け API とユーザー向け API で異なる認証方式が必要でしたが、最初は統一されていました。

修正プロンプト:

企業向けAPIはAPI Key認証、ユーザー向けAPIはCognito認証にしたい。
それぞれ異なる認証方式を設定してください。

Kiro は即座に以下のように修正:

// Cognito Authorizer
const cognitoAuthorizer = new apigateway.CognitoUserPoolsAuthorizer(this, "CognitoAuthorizer", {
  cognitoUserPools: [userPool],
});

// ユーザー向けエンドポイント(Cognito認証)
usersResource.addMethod("POST", new apigateway.LambdaIntegration(userManagementLambda), {
  authorizer: cognitoAuthorizer,
  authorizationType: apigateway.AuthorizationType.COGNITO,
});

// 企業向けエンドポイント(API Key認証)
faceAuthResource.addMethod("POST", new apigateway.LambdaIntegration(faceRecognitionLambda), {
  apiKeyRequired: true,
});

Rekognition コレクションの初期化

Rekognition コレクションの作成が自動化されていませんでした。

修正プロンプト:

Rekognitionコレクションの初期化用Lambda関数を追加してください。
デプロイ時に自動実行されるようにしたい。

Kiro は以下を追加:

// Schema Migration Lambda (one-time use)
const schemaMigrationLambda = new lambda.Function(this, "SchemaMigrationLambda", {
  functionName: "facecloud-schema-migration",
  runtime: lambda.Runtime.PYTHON_3_11,
  handler: "schema_migration.handler",
  code: lambda.Code.fromAsset("lambda/schema-migration"),
  role: lambdaRole,
  vpc,
  environment: {
    DATABASE_SECRET_ARN: dbInstance.secret!.secretArn,
  },
  timeout: cdk.Duration.minutes(5),
});

Kiro + AWS CDK が素晴らしい点

1. 学習コストの大幅削減

従来の課題:

  • CDK の膨大なドキュメントを読む必要
  • AWS サービス間の連携方法を調べる時間
  • ベストプラクティスの習得に時間がかかる

Kiro + CDK の解決:

  • 自然言語で要件を伝えるだけ
  • ベストプラクティスが自動適用
  • 複雑な設定も一発で生成

2. 開発速度の劇的向上

実際の時間比較:

作業項目 従来 Kiro + CDK
AWS 環境準備手順書作成 1 日 10 分
CDK スタック作成 2-3 日 1-3 時間
Lambda 関数設定 1-2 日 2-4 時間
API Gateway 設定 1 日 1-2 時間
データベース設計 2-3 日 1-5 時間

3. 品質の向上

自動適用されるベストプラクティス:

  • セキュリティ設定(暗号化、IAM ロール)
  • 監視・ログ設定
  • エラーハンドリング
  • パフォーマンス最適化

4. 保守性の向上

生成されるコードの特徴:

  • 適切なコメント付き
  • 一貫したコーディングスタイル
  • 拡張しやすい構造
  • テスタブルな設計

事前に取得したほうがよい知識・経験

必須レベル

  1. AWS 基礎知識

    • 主要サービス(Lambda、API Gateway、RDS 等)の概念理解
    • IAM ロールとポリシーの基本
    • VPC ネットワークの基礎
  2. プログラミング基礎

    • TypeScript/JavaScript の基本文法
    • 非同期処理の理解
    • REST API の概念

推奨レベル

  1. インフラ設計経験

    • サーバーレスアーキテクチャの理解
    • データベース設計の経験
    • セキュリティ要件の理解
  2. CDK 基礎知識

    • CDK の基本概念(Stack、Construct 等)
    • デプロイメントプロセスの理解

あると便利

  1. AWS 実運用経験

    • CloudWatch での監視経験
    • トラブルシューティング経験
    • コスト最適化の知識
  2. DevOps 経験

    • CI/CD パイプラインの構築
    • Infrastructure as Code の経験

実際の作業コマンド例

事前準備(AWS CLI 設定)

# AWS CLI のインストール(macOS の場合)
brew install awscli

# 認証情報の設定
aws configure
# AWS Access Key ID: [IAMユーザーのアクセスキーID]
# AWS Secret Access Key: [IAMユーザーのシークレットアクセスキー]
# Default region name: ap-northeast-1
# Default output format: json

# 設定確認
aws sts get-caller-identity

# CDK CLI のインストール
npm install -g aws-cdk

# CDK Bootstrap(初回のみ)
cdk bootstrap aws://[アカウントID]/ap-northeast-1

プロジェクト初期化

# CDKプロジェクト作成
mkdir facecloud-mvp && cd facecloud-mvp
cdk init app --language typescript

# 依存関係インストール
npm install aws-cdk-lib constructs

デプロイメント

# CDKスタックのビルド
npm run build

# デプロイ実行
cdk deploy

# 特定環境へのデプロイ
cdk deploy --context environment=development

開発・テスト

# ローカル開発環境起動
docker-compose up -d

# Pythonテスト実行
cd backend && python -m pytest -v

# CDK差分確認
cdk diff

まとめ

Kiro + AWS CDK の威力

今回のプロジェクトを通じて、Kiro + AWS CDK の組み合わせは以下の点で革命的でした:

  1. 開発速度: 従来の 1/5〜1/10 の時間で完成
  2. 品質: ベストプラクティスが自動適用
  3. 学習効率: 実装しながら CDK を習得
  4. 保守性: 拡張しやすい構造で生成

特に印象的だった点

  • 文脈理解の精度: プロジェクト全体を理解した上での提案
  • 実行力: 提案だけでなく実際にファイル作成まで実行
  • 修正対応: 問題点を指摘すると即座に適切な修正

今後の展望

Kiro + AWS CDK の組み合わせにより、以下が可能になりました:

  • プロトタイプの高速開発: アイデアを数日で形にできる
  • 学習コストの削減: 実装しながら AWS を学習
  • 品質の標準化: チーム全体でベストプラクティスを共有

とはいえ、Kiro + AWS CDK ってすばらしい!

今回の経験を通じて、Kiro + AWS CDK の組み合わせは間違いなく開発の未来を変える技術だと確信しました。

従来なら数週間かかっていたインフラ構築が 1 日で完了し、しかも高品質なコードが生成される。これは単なる効率化を超えて、開発のパラダイムシフトと言えるでしょう。

特に、スタートアップや新規プロジェクトにおいて、この組み合わせの威力は絶大です。アイデアを素早く形にし、市場検証を行い、必要に応じて迅速に修正する。このサイクルを高速で回せることは、競争優位性に直結します。

今後も Kiro + AWS CDK を積極的に活用し、より多くのプロジェクトで実践していきたいと思います。皆さんもぜひ一度試してみてください。きっとその威力に驚かれることでしょう!


この記事が、Kiro + AWS CDK の可能性を感じていただくきっかけになれば幸いです。質問やコメントがあれば、お気軽にお声がけください!

Discussion