CDKで S3 と DynamoDB を作る基礎は、最初に「CDKプロジェクトを作る → Stackを書く → デプロイ」という流れです。
TypeScript前提す。
① CDKの基本構造
CDKはざっくりこういう構造です:
App(アプリ全体)
└ Stack(1つの環境単位)
└ Construct(リソース部品)
② プロジェクト作成
mkdir my-cdk-app
cd my-cdk-app
cdk init app --language typescript
依存関係を追加:
npm install aws-cdk-lib constructs
③ S3バケットを作る
lib/my-cdk-app-stack.ts を編集:
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as s3 from 'aws-cdk-lib/aws-s3';
export class MyCdkAppStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
new s3.Bucket(this, 'MyBucket', {
bucketName: 'my-sample-bucket-123456', // 一意にする
versioned: true,
removalPolicy: cdk.RemovalPolicy.DESTROY, // 開発用
autoDeleteObjects: true, // バケット削除時に中身も消す
});
}
}
ポイント
-
versioned: true→ バージョニングON -
removalPolicy→ 削除時の挙動(本番はRETAIN推奨)
④ DynamoDBテーブルを作る
同じファイルに追加:
import * as dynamodb from 'aws-cdk-lib/aws-dynamodb';
const table = new dynamodb.Table(this, 'MyTable', {
tableName: 'MySampleTable',
partitionKey: {
name: 'id',
type: dynamodb.AttributeType.STRING,
},
billingMode: dynamodb.BillingMode.PAY_PER_REQUEST, // 従量課金
removalPolicy: cdk.RemovalPolicy.DESTROY, // 開発用
});
ポイント
-
partitionKeyは必須 -
PAY_PER_REQUESTは初心者向け(キャパ設計不要)
⑤ デプロイ
初回のみ:
cdk bootstrap
デプロイ:
cdk deploy
⑥ よくある実務パターン(重要)
S3 + DynamoDB を連携する例
table.grantReadWriteData(new iam.ServicePrincipal('lambda.amazonaws.com'));
や
bucket.grantReadWrite(lambdaFunction);
👉 権限はCDKで付与するのが基本
⑦ ディレクトリ設計(実務寄り)
大きくなるとこう分けると楽:
lib/
├ s3/
│ └ s3-construct.ts
├ dynamodb/
│ └ dynamodb-construct.ts
└ stack.ts
👉 Constructを分けると再利用しやすい
⑧ 最低限覚えるべきこと
-
new XXX(this, 'ID', {...})でリソース作る - Stackに全部書く
-
cdk deployで反映 - IAM権限もCDKで管理
⑨ 次にやると一気にレベル上がる
ここまでできたら次は:
- Lambda追加(S3 or DynamoDB連携)
- 環境分離(dev / prod)
- context / env設定
- パラメータ化(SSM)