aws-cloudformation-rds について
AWS CloudFormation で Amazon RDS を管理する開発者や運用担当者向けのスキルです。DB インスタンスや Aurora クラスターに加え、高可用性、ネットワーク、セキュリティ、認証情報管理の構成を扱います。
主な機能
- 01RDS インスタンスと Aurora クラスター
- 02マルチ AZ とリードレプリカ
- 03サブネットグループとパラメーターグループ
- 04Secrets Manager による認証情報連携
- 05クロススタック参照と変更セット
活用シーン
- 01CloudFormation で RDS データベースを作成
- 02本番データベースにマルチ AZ を設定
- 03データベース認証情報とネットワークアクセスを管理
- 04データベース接続情報をアプリケーションスタックに出力
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ giuseppe-trisciuoglio/ developer-kit --skill aws-cloudformation-rdsインストール後、Claude Code で/aws-cloudformation-rdsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/constraints.mddatabase-components.mdexamples.mdhigh-availability.mdoperational-practices.mdreference.mdsecurity-secrets.mdtemplate-structure.md詳細
AWS CloudFormation RDS データベース
概要
AWS CloudFormation テンプレートを使用して、本番環境に対応した Amazon RDS インフラストラクチャを作成します。RDS インスタンス(MySQL、PostgreSQL、Aurora)、DB クラスター、マルチ AZ デプロイ、パラメータグループ、サブネットグループ、セキュリティグループ、スタック間参照を扱います。
使用する場面
- RDS インスタンス(MySQL、PostgreSQL、Aurora)や、リードレプリカを含む DB クラスターを作成する場合
- マルチ AZ デプロイを設定したり、パラメータグループやサブネットグループを構成したりする場合
- Secrets Manager と統合したり、スタック間参照を実装したりする場合
クイックリファレンス
| コンポーネント | CloudFormation の型 | 用途 |
|---|---|---|
| DB インスタンス | AWS::RDS::DBInstance | 単一のデータベースインスタンス |
| DB クラスター | AWS::RDS::DBCluster | Aurora クラスター |
| DB サブネットグループ | AWS::RDS::DBSubnetGroup | VPC へのデプロイ |
| パラメータグループ | AWS::RDS::DBParameterGroup | データベースの設定 |
| セキュリティグループ | AWS::EC2::SecurityGroup | ネットワークアクセス制御 |
| Secrets Manager | AWS::SecretsManager::Secret | 認証情報の保存 |
手順
ステップ 1 — データベースのパラメータを定義する
検証には AWS 固有のパラメータ型を使用します。
Parameters:
DBInstanceClass:
Type: AWS::RDS::DBInstance::InstanceType
Default: db.t3.micro
AllowedValues: [db.t3.micro, db.t3.small, db.t3.medium]
Engine:
Type: String
Default: mysql
AllowedValues: [mysql, postgres, aurora-mysql, aurora-postgresql]
MasterUsername:
Type: String
Default: admin
AllowedPattern: "^[a-zA-Z][a-zA-Z0-9]*$"
MinLength: 1
MaxLength: 16
MasterUserPassword:
Type: String
NoEcho: true
MinLength: 8
MaxLength: 41
高度なパラメータパターン、マッピング、条件、スタック間参照については、template-structure.md を参照してください。
ステップ 2 — DB サブネットグループを作成する
異なる AZ にサブネットを配置する VPC デプロイでは必須です。
DBSubnetGroup:
Type: AWS::RDS::DBSubnetGroup
Properties:
DBSubnetGroupDescription: Subnet group for RDS
SubnetIds:
- !Ref PrivateSubnet1
- !Ref PrivateSubnet2
パラメータグループ、オプショングループ、エンジン固有の設定については、database-components.md を参照してください。
ステップ 3 — セキュリティグループを設定する
アクセスをアプリケーション層のみに制限します。
DBSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Security group for RDS
VpcId: !Ref VpcId
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 3306
ToPort: 3306
SourceSecurityGroupId: !Ref AppSecurityGroup
VPC セキュリティグループ、暗号化、Secrets Manager との統合、IAM 認証については、security-secrets.md を参照してください。
ステップ 4 — RDS インスタンスを起動する
サブネットグループ、セキュリティグループ、各種設定を使用してインスタンスを構成します。
DBInstance:
Type: AWS::RDS::DBInstance
Properties:
DBInstanceIdentifier: !Sub "${AWS::StackName}-mysql"
DBInstanceClass: !Ref DBInstanceClass
Engine: !Ref Engine
MasterUsername: !Ref MasterUsername
MasterUserPassword: !Ref MasterUserPassword
AllocatedStorage: 20
StorageType: gp3
DBSubnetGroupName: !Ref DBSubnetGroup
VPCSecurityGroups: [!Ref DBSecurityGroup]
StorageEncrypted: true
MultiAZ: true
BackupRetentionPeriod: 7
DeletionProtection: false
MySQL、PostgreSQL、Aurora クラスターの設定やパラメータグループについては、database-components.md を参照してください。
ステップ 5 — 高可用性を有効にする
本番環境向けにマルチ AZ デプロイを構成します。
Conditions:
IsProduction: !Equals [!Ref Environment, production]
Resources:
DBInstance:
Type: AWS::RDS::DBInstance
Properties:
MultiAZ: !If [IsProduction, true, false]
BackupRetentionPeriod: !If [IsProduction, 35, 7]
DeletionProtection: !If [IsProduction, true, false]
EnablePerformanceInsights: !If [IsProduction, true, false]
マルチ AZ デプロイ、リードレプリカ、Aurora の自動スケーリング、拡張モニタリング、災害復旧については、high-availability.md を参照してください。
ステップ 6 — 出力を定義する
アプリケーションスタック向けに接続情報をエクスポートします。
Outputs:
DBInstanceEndpoint:
Description: Database endpoint address
Value: !GetAtt DBInstance.Endpoint.Address
Export:
Name: !Sub ${AWS::StackName}-DBEndpoint
DBInstancePort:
Description: Database port
Value: !GetAtt DBInstance.Endpoint.Port
Export:
Name: !Sub ${AWS::StackName}-DBPort
DBConnectionString:
Description: Connection string
Value: !Sub jdbc:mysql://${DBInstance.Endpoint.Address}:${DBInstance.Endpoint.Port}/${DBName}
スタック間参照のパターンやインポート/エクスポートの方法については、template-structure.md を参照してください。
検証手順
デプロイ前、特に本番環境へのデプロイ前には、必ず検証してください。
# Validate the template syntax
aws cloudformation validate-template --template-body file://template.yaml
# Review the change set before applying updates
aws cloudformation create-change-set \
--stack-name my-rds-stack \
--template-body file://template.yaml \
--change-set-type UPDATE
aws cloudformation describe-change-set --change-set-name <arn>
# Execute the change set if the preview looks correct
aws cloudformation execute-change-set --change-set-name <arn>
ベストプラクティス
| カテゴリ | プラクティス | 実装方法 |
|---|---|---|
| セキュリティ | 保存時の暗号化 | KMS キーと StorageEncrypted: true を使用する |
| セキュリティ | 認証情報の管理 | Secrets Manager との統合を使用する |
| セキュリティ | ネットワークの分離 | プライベートサブネットと制限的な SG ルールを使用する |
| セキュリティ | IAM 認証 | IAMDatabaseAuthentication を有効にする |
| HA | マルチ AZ デプロイ | 本番環境では MultiAZ: true を設定する |
| HA | 削除保護 | 本番環境では DeletionProtection: true を設定する |
| HA | バックアップの保持期間 | 本番環境では 35 日、開発環境では 7 日にする |
| HA | リードレプリカ | 読み取り負荷の高いワークロードで使用する |
| コスト | ストレージタイプ | コスト効率を高めるために gp3 を使用する |
| コスト | インスタンスのサイズ | ワークロードに基づいて適切なサイズを選択する |
| コスト | サーバーレス | 負荷が変動する場合は Aurora Serverless を検討する |
| 運用 | 変更セット | 更新を適用する前に必ず確認する |
| 運用 | ドリフト検出 | テンプレートへの準拠を確認できるよう有効にする |
| 運用 | モニタリング | CloudWatch アラームを設定する |
スタックポリシー、終了保護、バックアップ戦略の詳細については、operational-practices.md を参照してください。
例
MultiAZ、暗号化、Secrets Manager との統合を備えた、本番環境対応の RDS インスタンスの完全な例:
AWSTemplateFormatVersion: '2010-09-09'
Description: Production RDS Instance
Parameters:
VpcId:
Type: AWS::EC2::VPC::Identifier
SubnetIds:
Type: List<AWS::EC2::Subnet::Identifier>
AppSecurityGroupId:
Type: AWS::EC2::SecurityGroup::Id
Environment:
Type: String
AllowedValues: [dev, staging, production]
MasterUsername:
Type: String
Default: dbadmin
Conditions:
IsProduction: !Equals [!Ref Environment, production]
Resources:
DBSubnetGroup:
Type: AWS::RDS::DBSubnetGroup
Properties:
DBSubnetGroupDescription: !Sub "${AWS::StackName} subnet group"
SubnetIds: !Ref SubnetIds
DBSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: !Sub "${AWS::StackName} RDS security group"
VpcId: !Ref VpcId
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 3306
ToPort: 3306
SourceSecurityGroupId: !Ref AppSecurityGroupId
DBInstance:
Type: AWS::RDS::DBInstance
DeletionPolicy: Snapshot
UpdateReplacePolicy: Snapshot
Properties:
DBInstanceIdentifier: !Sub "${AWS::StackName}-mysql"
DBInstanceClass: db.t3.medium
Engine: mysql
EngineVersion: '8.0'
MasterUsername: !Ref MasterUsername
MasterUserPassword: !Ref MasterUserPassword
AllocatedStorage: 50
StorageType: gp3
StorageEncrypted: true
KmsKeyId: !Ref KmsKeyId
DBSubnetGroupName: !Ref DBSubnetGroup
VPCSecurityGroups: [!Ref DBSecurityGroup]
MultiAZ: !If [IsProduction, true, false]
BackupRetentionPeriod: !If [IsProduction, 35, 7]
DeletionProtection: !If [IsProduction, true, false]
EnablePerformanceInsights: !If [IsProduction, true, false]
PerformanceInsightsRetentionPeriod: !If [IsProduction, 731, 7]
KmsKeyId:
Type: AWS::KMS::Key
Condition: IsProduction
Properties:
Description: KMS key for RDS encryption
EnableKeyRotation: true
KeyPolicy:
Version: '2012-10-17'
Statement:
- Sid: Enable IAM User Permissions
Effect: Allow
Principal:
AWS: !Sub arn:aws:iam::${AWS::AccountId}:root
Action: kms:*
Resource: '*'
Outputs:
DBEndpoint:
Description: Database endpoint
Value: !GetAtt DBInstance.Endpoint.Address
Export:
Name: !Sub ${AWS::StackName}-DBEndpoint
DBPort:
Description: Database port
Value: !GetAtt DBInstance.Endpoint.Port
Export:
Name: !Sub ${AWS::StackName}-DBPort
Aurora クラスター、リードレプリカ、マルチリージョン構成などの追加例については、examples.md を参照してください。
リファレンス
コア設定
- template-structure.md — テンプレートのセクション、パラメーター、マッピング、条件、出力、スタック間参照
- database-components.md — DB インスタンス、クラスター、パラメーターグループ、サブネットグループ、Aurora の設定
- security-secrets.md — セキュリティグループ、暗号化、Secrets Manager、IAM 認証
- high-availability.md — Multi-AZ、リードレプリカ、Aurora の自動スケーリング、災害復旧
運用ガイド
- operational-practices.md — スタックポリシー、削除保護、ドリフト検出、変更セット、モニタリング
- constraints.md — リソース制限、運用上の制約、セキュリティ上の制約、コストに関する考慮事項
その他のリソース
- examples.md — 本番環境対応の完全な例
- reference.md — CloudFormation RDS リソースのリファレンス
制約と警告
リソースの制限
- 最大ストレージサイズはエンジンによって異なります(MySQL/PostgreSQL では最大 64 TB)
- CloudFormation スタックあたりのリソース数は最大 500 個です
- パラメーターグループの上限はアカウント/リージョンによって異なります
コストに関する考慮事項
- Multi-AZ デプロイのコストは、単一 AZ の場合のおよそ 2 倍です
- プロビジョンド IOPS(io1)を使用すると、コストが大幅に増加します
- 無料利用枠を超えるバックアップストレージには、月額料金が発生します
- 手動スナップショットには、インスタンスの削除後もストレージ料金が発生します
セキュリティ上の制約
- 作成後にマスターパスワードを取得することはできません
- 有効にした後、保存時の暗号化を無効にすることはできません
- RDS インスタンスは VPC 内に配置する必要があります(パブリックアクセスは推奨されません)
- セキュリティグループルールでは、アプリケーション層からのアクセスに制限する必要があります
運用上の制約
- 一部の変更(エンジンバージョン、ストレージタイプ)では、ダウンタイムを伴うインスタンスの置き換えが必要です
- メンテナンス時間帯には、短時間のサービス中断が発生する場合があります
- リードレプリカは、プライマリに対して数秒から数分遅れる場合があります
- すべてのデータベースエンジンを利用できるリージョンがあるわけではありません
制約、トラブルシューティングガイド、パフォーマンスに関する考慮事項の詳細については、constraints.md を参照してください。