aws-cloudformation-dynamodb について
AWS CloudFormation を使う開発者向けに、DynamoDB テーブルのインフラ構成パターンを提供します。インデックス、容量、セキュリティ、ライフサイクル設定に加え、検証とデプロイの手順も扱います。
主な機能
- 01テーブルキーと GSI・LSI の設定
- 02課金モードと自動スケーリングの設定
- 03暗号化、TTL、Streams の有効化
- 04ポイントインタイムリカバリとクロススタック参照の設定
活用シーン
- 01アプリケーション用 DynamoDB テーブルの作成
- 02アクセスパターンに応じたセカンダリインデックス設計
- 03セッションデータの TTL 設定
- 04プロビジョンドキャパシティテーブルへの自動スケーリング追加
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ giuseppe-trisciuoglio/ developer-kit --skill aws-cloudformation-dynamodbインストール後、Claude Code で/aws-cloudformation-dynamodbを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/advanced-configuration.mdcomplete-examples.mdexamples.mdreference.md詳細
AWS CloudFormation DynamoDB パターン
DynamoDB テーブル、GSI、LSI、自動スケーリング、暗号化、TTL、ストリームを備えた AWS CloudFormation テンプレートを使用して、本番環境ですぐに利用できる NoSQL データベースのインフラストラクチャパターンを提供します。
概要
DynamoDB テーブル、プライマリキー、セカンダリインデックス(GSI/LSI)、キャパシティモード、自動スケーリング、暗号化、TTL、ストリームに加え、パラメーター、出力、スタック間参照のベストプラクティスを扱います。
使用する場面
DynamoDB テーブルの作成、キーとインデックスの設定、キャパシティモードの設定、自動スケーリングの実装、暗号化/TTL/ストリームの有効化、CloudFormation テンプレートの整理に使用します。
手順
CloudFormation で DynamoDB テーブルを作成するには、次の手順に従います。
- テーブルのパラメーターを定義する:テーブル名と請求モードを指定します
- プライマリキーを設定する:パーティションキーと、必要に応じてソートキーを設定します
- セカンダリインデックスを追加する:別のアクセスパターン用に GSI を作成します
- 暗号化を設定する:KMS キーを使用した暗号化を有効にします
- TTL を設定する:自動削除用のタイムスタンプ属性を定義します
- ストリームを有効にする:変更データキャプチャ用のストリームを設定します
- 自動スケーリングを追加する:プロビジョニング済みキャパシティに対して Application Auto Scaling を実装します
- バックアップを作成する:ポイントインタイムリカバリを有効にします
- テンプレートを検証する:デプロイ前に
aws cloudformation validate-templateを実行します - スタックをデプロイする:
aws cloudformation create-stackまたはupdate-stackを使用します - イベントを監視する:
aws cloudformation describe-stack-eventsを確認し、失敗やROLLBACK状態がないか調べます - ロールバックに対処する:失敗した場合は、イベントでリソースエラーを確認し、テンプレートを修正して再デプロイします
クイックリファレンス
| リソースタイプ | 用途 |
|---|---|
AWS::DynamoDB::Table | DynamoDB テーブルを作成します |
AWS::ApplicationAutoScaling::ScalableTarget | 自動スケーリングの設定 |
AWS::ApplicationAutoScaling::ScalingPolicy | スケーリングポリシー |
AWS::KMS::Key | 暗号化用の KMS キー |
AWS::IAM::Role | 自動スケーリング用の IAM ロール |
| BillingMode | PAY_PER_REQUEST または PROVISIONED |
| SSESpecification | サーバー側の暗号化 |
例
オンデマンドキャパシティを使用する基本的なテーブル
DynamoDBTable:
Type: AWS::DynamoDB::Table
Properties:
TableName: !Sub "${AWS::StackName}-table"
BillingMode: PAY_PER_REQUEST
AttributeDefinitions:
- AttributeName: pk
AttributeType: S
KeySchema:
- AttributeName: pk
KeyType: HASH
グローバルセカンダリインデックスを含むテーブル
DynamoDBTable:
Type: AWS::DynamoDB::Table
Properties:
TableName: !Sub "${AWS::StackName}-table"
BillingMode: PAY_PER_REQUEST
AttributeDefinitions:
- AttributeName: pk
AttributeType: S
- AttributeName: gsi-pk
AttributeType: S
KeySchema:
- AttributeName: pk
KeyType: HASH
GlobalSecondaryIndexes:
- IndexName: gsi-index
KeySchema:
- AttributeName: gsi-pk
KeyType: HASH
Projection:
ProjectionType: ALL
TTL を含むテーブル
SessionTable:
Type: AWS::DynamoDB::Table
Properties:
TableName: !Sub "${AWS::StackName}-sessions"
BillingMode: PAY_PER_REQUEST
AttributeDefinitions:
- AttributeName: sessionId
AttributeType: S
KeySchema:
- AttributeName: sessionId
KeyType: HASH
TimeToLiveSpecification:
AttributeName: expiresAt
Enabled: true
自動スケーリングを含むテーブル
ScalableTarget:
Type: AWS::ApplicationAutoScaling::ScalableTarget
Properties:
MaxCapacity: 100
MinCapacity: 5
ResourceId: !Sub "table/${DynamoDBTable}"
RoleARN: !GetAtt AutoScalingRole.Arn
ScalableDimension: dynamodb:table:ReadCapacityUnits
ServiceNamespace: dynamodb
暗号化、ストリーム、自動スケーリング、本番環境向けテーブルを含む詳細な例については、references/complete-examples.md を参照してください。
テンプレートの構造
ベーステンプレート
AWSTemplateFormatVersion: 2010-09-09
Description: DynamoDB table with GSI and auto-scaling
Parameters:
TableName:
Type: String
Default: my-table
BillingMode:
Type: String
Default: PAY_PER_REQUEST
Resources:
DynamoDBTable:
Type: AWS::DynamoDB::Table
Properties:
TableName: !Ref TableName
BillingMode: !Ref BillingMode
Outputs:
TableName:
Value: !Ref DynamoDBTable
TableArn:
Value: !GetAtt DynamoDBTable.Arn
Parameters、Mappings、Conditions、Outputs、IAM ロール、スタック間参照の詳細については、references/advanced-configuration.md を参照してください。
ベストプラクティス
- 開発/テスト環境や予測できないワークロードには PAY_PER_REQUEST を使用する
- 本番環境のテーブルでは ポイントインタイムリカバリを有効にする
- 機密データには KMS 暗号化を使用する(SSE-KMS)
- プロビジョニング済みキャパシティのテーブルでは 自動スケーリングを設定する
- GSI を慎重に設計する - 各 GSI はキャパシティを消費します
- 自動的なデータ有効期限切れ(セッション、キャッシュ)には TTL を使用する
- 変更データキャプチャと分析には ストリームを有効にする
- コスト配分と整理のために リソースにタグを付ける
- スタック間参照用に 出力をエクスポートする
- 環境固有の設定には Conditions を使用する
よくあるトラブルシューティング
テーブルがすでに存在する:一意のテーブル名を使用するか、スタックの削除ポリシーを設定してください GSI の作成に失敗する:属性定義に GSI の属性が含まれていることを確認してください 自動スケーリングが機能しない:IAM ロールの権限とサービスリンクロールを確認してください TTL による有効期限切れが発生しない:TTL 属性が String 型ではなく Number 型であることを確認してください ストリームが有効にならない:ストリームを有効にできるのはテーブル作成時のみです 暗号化エラーが発生する:KMS キーがテーブルと同じリージョンにあることを確認してください
関連スキル
- aws-cloudformation-security - DynamoDB のセキュリティに関するベストプラクティス
- aws-cloudformation-lambda - DynamoDB Streams の Lambda トリガー
- aws-cloudformation-iam - DynamoDB アクセス用の IAM ロール
参考資料
完全な例
- references/complete-examples.md - 基本的なテーブル、GSI、LSI、TTL、暗号化、PITR、自動スケーリング、本番環境用テーブル、グローバルテーブル、ストリーム
高度な設定
- references/advanced-configuration.md - パラメーター、マッピング、条件、自動スケーリングポリシー、ストリーム、TTL、グローバルテーブル、出力、IAM ロール、削除ポリシー
制約事項と警告
- テーブル名:リージョンごとに一意である必要があります(グローバルテーブルではグローバルに一意である必要があります)
- GSI の制限:テーブルごとに最大 5 個の GSI(単一リージョンのテーブルの場合)
- LSI の制限:テーブルごとに最大 5 個の LSI。テーブルと同じパーティションキーを使用する必要があります
- キャパシティの制限:オンデマンドにはデフォルトのアカウント制限があります(40,000 RCU、40,000 WCU)
- 自動スケーリング:PROVISIONED 課金モードが必要です(PAY_PER_REQUEST ではありません)
- ポイントインタイムリカバリ:テーブルの作成時にのみ有効にできます
- ストリーム:テーブルの作成時にのみ有効にできます
- 暗号化:KMS キーはテーブルと同じリージョンにある必要があります
- TTL:属性は Number 型である必要があり、秒単位で測定されます
- スループット:各 GSI は、テーブルとプロビジョニング済みスループットを共有します
- アイテムサイズの上限:1 アイテムあたり最大 400 KB
- ホットパーティション:ホットパーティションの問題を避けるようにキーを設計してください