Claude CodeでCDKする。cloudshellで
いや、いうても2日前くらいに契約したド素人やがな..しかもCodexが流行り始めたこの時期にClaude Code
かよ。ここではいいとか悪いとかは書かない。単純にclaude codeがどう作用するかを見るだけの記事。
install
これ自体はcurlの系統のinstallで入る。npmよりいいんじゃないかね?
curl -fsSL https://claude.ai/install.sh | bash
的な。怖いのは容量だけやね。
作業dir切る
~ $ mkdir claude-cdk
~ $ cd claude-cdk/
cdk init...を手で引いてもいいけど
これもclaudeにやらせてみよう。
claude
ディレクトリが信頼できんのか?みたいな確認
エージェント待機中
このディレクトリで AWS CDK のプロジェクトを初期化してください。
- 言語は TypeScript を選択すること
- エントリーポイントを`bin/app.ts` に変更すること
プロンプトを入力
cdk init app --language typescript
の実行確認
エントリーポイントを変更するぞ確認
それに伴う変更
完了
確認
git
差分
gitオペレーション
cdk自体がgit管理を前提としたイニシャライズをしているのでこれを利用する。
gitアカウントをセット
とかして
git add . して git commitしてください。
commit messageは英語で
とかすると
commit message、ここには大抵Co-Authored-By: Claude <noreply@anthropic.com>
が付く
完了
このようになるわけだ
ローカルのcdkを更新する
グローバルのcdkを更新するのが面倒なんでローカルのcdkを更新する。まあこれは
npm install --save-dev aws-cdk@latest
みたいなのを打たせてもいいが、20USDのプランだと勿体ないのでこんなのは自分で打っていいかも
ローカルのバージョンがグローバルの 2.1021.0 と比較して 2.1029.0 まで上がった
たとえばcdk diffさせる
cdk diffしてください
とかすると
最近ある典型的なエラー
とかになることがあるので、ここで
/init "日本語で作成してください"
とかする
錬金中...
すると
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## プロジェクト概要
このプロジェクトは AWS CDK v2 を使用した TypeScript プロジェクトです。AWS リソースをコードで定義・デプロイするためのインフラストラクチャ as Code (IaC) プロジェクトです。
...(省略)
## 重要な注意点
### AWS 認証
- AWS 認証情報が必要(AWS CLI、環境変数、IAM ロールなど)
- `cdk diff` や `cdk deploy` 実行時に AWS アカウントが必要
- 環境固有の設定は `bin/app.ts` でスタック定義時に指定可能
### CDK 機能フラグ
- `cdk.json` で多数の最新機能フラグが有効化済み
- CDK v2 の最新機能を利用可能
### デプロイメント
- 初回デプロイ前に `cdk bootstrap` が必要
- `cdk diff` で変更内容を確認してからデプロイすること
こんなのが出てくる
これを
@@ -2,6 +2,9 @@
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
+- このプロジェクトでは **すべての CDK コマンドは `npx cdk` を使用してください**。
+- `cdk` という短縮エイリアスやグローバルインストールは使用禁止です。
+
## プロジェクト概要
このプロジェクトは AWS CDK v2 を使用した TypeScript プロジェクトです。AWS リソースをコードで定義・デプロイするためのインフラストラクチャ as Code (IaC) プロジ
とかかましてさらに
cdk diffしてください
といえば
npx cdk diff
に変更された`
ということでCLAUDE.md で前提の条件を変更できる
ちょっとやってみよか?
ここでやってきたようなのをAIに任せたらどないなるっちゅーねん。
の前に
git
差分
とりあえず簡単にAIつかってプログラムするなら最低限git差分をある程度小まめに確認しておかないと取り返しがつかない事になるかもしれん。
作る
以下はclaude codeへのプロンプト
VPCを作成する
- VPCスタックは分割する。既存の雛形は削除してok
- NAT Gatewayは作らない
- パブリックサブネットのみ
- AZは2つに分散
とかをぶっこむ
やらっせる
コード生成は差分がずばっと出てくる、がここで確認するのはちょっと面倒くさい
既存の変更はまあまあわかりやすいけど
テストもアップデートされる
npm test
していいかと聞かれる
書き直し
完了
git
差分
とまあこんな感じで出てくるけど要するに
import * as cdk from 'aws-cdk-lib';
import * as ec2 from 'aws-cdk-lib/aws-ec2';
import { Construct } from 'constructs';
export class VpcStack extends cdk.Stack {
public readonly vpc: ec2.Vpc;
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
this.vpc = new ec2.Vpc(this, 'VPC', {
ipAddresses: ec2.IpAddresses.cidr('10.0.0.0/16'),
maxAzs: 2,
subnetConfiguration: [
{
cidrMask: 24,
name: 'public-subnet',
subnetType: ec2.SubnetType.PUBLIC,
}
],
natGateways: 0,
enableDnsHostnames: true,
enableDnsSupport: true,
});
new cdk.CfnOutput(this, 'VpcId', {
value: this.vpc.vpcId,
description: 'VPC ID',
});
new cdk.CfnOutput(this, 'PublicSubnetIds', {
value: this.vpc.publicSubnets.map(subnet => subnet.subnetId).join(','),
description: 'Public Subnet IDs',
});
}
}
これだよねっていう話。これをみる限り、省略可能なオプションも片っ端から書いているのでコード量は多めだ。IaC
の場合とりあえず動くからどうというのではかなりきついので出力してきたコードを理解しないとけない。
lib/vpc-stack.ts について主要な動作やオプションについてコメントを日本語で与えてください
さらにcdk diffして、どのような変更があるかをレポートください
とかすると
コメントが与えられた
などが出てくるので理解や、あるいは学習に役に立つだろう。
さらに
レポート出力
deploy
実際にデプロイし、デプロイ後の構成を README.md にまとめてください。既存のREADME.mdは全て消してかまいません
とかすれば
確認無しモードでdeployしているnpx cdk deploy --require-approval never
やらっせる
ただまあ
道具は使いようやな。本当にdeployまで引かせていいの? しかも --require-approval never でとか。
ちなみに
AIが書いたREADME.md
Welcome to your CDK TypeScript project
This is a blank project for CDK development with TypeScript.
The cdk.json
file tells the CDK Toolkit how to execute your app.
Useful commands
-
npm run build
compile typescript to js -
npm run watch
watch for changes and compile -
npm run test
perform the jest unit tests -
npx cdk deploy
deploy this stack to your default AWS account/region -
npx cdk diff
compare deployed stack with current state -
npx cdk synth
emits the synthesized CloudFormation template
claude-cdk $ cat README.md
AWS CDK VPC プロジェクト
このプロジェクトは AWS CDK v2 を使用して、シンプルなパブリック VPC 構成を作成します。
デプロイ済み構成
VPC 情報
-
VPC ID:
vpc-05927d229410d194f
-
CIDR ブロック:
10.0.0.0/16
- DNS ホスト名: 有効
- DNS 解決: 有効
- 状態: available
サブネット構成
サブネット ID | アベイラビリティゾーン | CIDR ブロック | パブリック IP 割り当て |
---|---|---|---|
subnet-0d53b61998e978651 |
ap-northeast-1a | 10.0.0.0/24 |
有効 |
subnet-0d77eca05a7a4f041 |
ap-northeast-1c | 10.0.1.0/24 |
有効 |
ネットワーク構成
-
インターネットゲートウェイ:
igw-05a0a02f371c60f4a
- NAT ゲートウェイ: なし(パブリックサブネットのみ)
- アベイラビリティゾーン: 2つ(ap-northeast-1a, ap-northeast-1c)
プロジェクト構造
claude-cdk/
├── bin/
│ └── app.ts # CDK アプリケーションのエントリーポイント
├── lib/
│ └── vpc-stack.ts # VPC スタック定義
├── test/
│ └── claude-cdk.test.ts # Jest 単体テスト
├── cdk.out/ # CDK 合成出力ディレクトリ
├── CLAUDE.md # Claude Code 向けガイド
├── package.json # NPM 設定とスクリプト
├── tsconfig.json # TypeScript 設定
├── jest.config.js # Jest テスト設定
└── cdk.json # CDK 設定ファイル
開発コマンド
ビルドとテスト
npm run build # TypeScript を JavaScript にコンパイル
npm run watch # ファイル変更を監視して自動コンパイル
npm test # Jest 単体テストを実行
CDK 操作
npx cdk synth # CloudFormation テンプレートを合成・表示
npx cdk diff # デプロイ済みスタックと現在の状態を比較
npx cdk deploy # AWS アカウントにスタックをデプロイ
npx cdk destroy # デプロイしたスタックを削除
デプロイメント詳細
デプロイ結果
- デプロイ時間: 約67秒
- 作成されたリソース数: 16個
-
CloudFormation スタック名:
VpcStack
-
スタック ARN:
arn:aws:cloudformation:ap-northeast-1:****:stack/VpcStack/f86d5a70-8e1c-11f0-a85a-06146e8089c5
作成されたリソース一覧
ネットワークリソース
- AWS::EC2::VPC
- AWS::EC2::Subnet × 2(パブリックサブネット)
- AWS::EC2::RouteTable × 2
- AWS::EC2::SubnetRouteTableAssociation × 2
- AWS::EC2::Route × 2(デフォルトルート)
- AWS::EC2::InternetGateway
- AWS::EC2::VPCGatewayAttachment
セキュリティ・カスタムリソース
- Custom::VpcRestrictDefaultSG(デフォルトセキュリティグループ制限)
- AWS::IAM::Role(カスタムリソース用)
- AWS::Lambda::Function(カスタムリソース処理用)
出力値
-
VpcId:
vpc-05927d229410d194f
-
PublicSubnetIds:
subnet-0d53b61998e978651,subnet-0d77eca05a7a4f041
技術仕様
使用技術
- AWS CDK: v2.1029.0
- TypeScript: v5.6.3
- Node.js: LTS版推奨
- Jest: v29.7.0(テストフレームワーク)
AWS リージョン
- デプロイ先: ap-northeast-1(東京リージョン)
設計方針
- パブリックサブネットのみでシンプルな構成
- NAT ゲートウェイなしでコスト効率化
- 2つのアベイラビリティゾーンで可用性確保
- DNS 機能有効でサービス連携対応
次のステップ
この VPC 基盤上に以下のリソースを追加することができます:
- EC2 インスタンス: パブリックサブネットに配置
- Application Load Balancer: 複数 AZ に分散配置
- RDS データベース: 将来プライベートサブネット追加時
- セキュリティグループ: アプリケーション固有の通信制御
- 追加サービス: Lambda、ECS、EKS など
トラブルシューティング
よくある問題
- AWS 認証エラー: AWS CLI の設定を確認
- 権限不足: IAM ユーザー・ロールの権限を確認
- リージョン間違い: CDK のデフォルトリージョンを確認
サポート
- CDK ドキュメント: https://docs.aws.amazon.com/cdk/
- AWS サポート: https://aws.amazon.com/support/claude-cd
Discussion