mcpField
R
rds

rds

github.com/itsmostafaデータ・データベース1.2k129 回インストール2 日前に更新
リポジトリ

rds について

データベース管理者や開発者向けの Amazon RDS 運用スキルです。CLI と boto3 の例に加え、バックアップ、高可用性、セキュリティ、性能、トラブルシューティングを扱います。

主な機能

  1. 01インスタンスの作成と変更
  2. 02リードレプリカと Multi-AZ 構成
  3. 03スナップショットと特定時点への復元
  4. 04セキュリティと性能の指針
  5. 05CLI と boto3 の例

活用シーン

  1. 01PostgreSQL RDS の導入計画
  2. 02レプリカによる読み取りの拡張
  3. 03データ損失後のデータベース復元
  4. 04接続や性能の問題の調査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/itsmostafa/aws-agent-skills --skill rds

インストール後、Claude Code で/rdsを入力して読み込まれたか確認します。

同梱ファイルadministration.md

詳細

AWS RDS

Amazon Relational Database Service(RDS)は、MySQL、PostgreSQL、MariaDB、Oracle、SQL Server、Aurora などのマネージドリレーショナルデータベースを提供します。RDS は、プロビジョニング、パッチ適用、バックアップ、フェイルオーバーを処理します。

目次

主な概念

DB インスタンスクラス
カテゴリ例ユースケース
標準db.m6g.large汎用
メモリ最適化db.r6g.large大容量メモリを必要とするワークロード
バースト可能db.t3.medium変動するワークロード、開発/テスト
ストレージタイプ
タイプIOPSユースケース
gp33,000-16,000ほとんどのワークロード
io1/io2最大 256,000高性能 OLTP
magneticN/Aレガシー用途。使用は避けてください
Multi-AZ デプロイ
  • Multi-AZ インスタンス:別の AZ に同期スタンバイを配置します
  • Multi-AZ クラスター:ライターインスタンス 1 台とリーダーインスタンス 2 台で構成されます(Aurora に類似)
リードレプリカ

読み取りをスケールするための非同期コピーです。リージョンをまたいで作成できます。

一般的なパターン

PostgreSQL インスタンスを作成する

AWS CLI:

# Create DB subnet group
aws rds create-db-subnet-group \
  --db-subnet-group-name my-db-subnet-group \
  --db-subnet-group-description "Private subnets for RDS" \
  --subnet-ids subnet-12345678 subnet-87654321

# Create security group (allow PostgreSQL from app)
aws ec2 create-security-group \
  --group-name rds-postgres-sg \
  --description "RDS PostgreSQL access" \
  --vpc-id vpc-12345678

aws ec2 authorize-security-group-ingress \
  --group-id sg-rds12345 \
  --protocol tcp \
  --port 5432 \
  --source-group sg-app12345

# Create RDS instance
aws rds create-db-instance \
  --db-instance-identifier my-postgres \
  --db-instance-class db.t3.medium \
  --engine postgres \
  --engine-version 16.1 \
  --master-username admin \
  --master-user-password 'SecurePassword123!' \
  --allocated-storage 100 \
  --storage-type gp3 \
  --db-subnet-group-name my-db-subnet-group \
  --vpc-security-group-ids sg-rds12345 \
  --multi-az \
  --backup-retention-period 7 \
  --storage-encrypted \
  --no-publicly-accessible

boto3:

import boto3

rds = boto3.client('rds')

response = rds.create_db_instance(
    DBInstanceIdentifier='my-postgres',
    DBInstanceClass='db.t3.medium',
    Engine='postgres',
    EngineVersion='16.1',
    MasterUsername='admin',
    MasterUserPassword='SecurePassword123!',
    AllocatedStorage=100,
    StorageType='gp3',
    DBSubnetGroupName='my-db-subnet-group',
    VpcSecurityGroupIds=['sg-rds12345'],
    MultiAZ=True,
    BackupRetentionPeriod=7,
    StorageEncrypted=True,
    PubliclyAccessible=False
)
リードレプリカを作成する
aws rds create-db-instance-read-replica \
  --db-instance-identifier my-postgres-replica \
  --source-db-instance-identifier my-postgres \
  --db-instance-class db.t3.medium \
  --availability-zone us-east-1b
スナップショットを取得する
aws rds create-db-snapshot \
  --db-snapshot-identifier my-postgres-snapshot-2024-01-15 \
  --db-instance-identifier my-postgres
スナップショットから復元する
aws rds restore-db-instance-from-db-snapshot \
  --db-instance-identifier my-postgres-restored \
  --db-snapshot-identifier my-postgres-snapshot-2024-01-15 \
  --db-instance-class db.t3.medium \
  --db-subnet-group-name my-db-subnet-group \
  --vpc-security-group-ids sg-rds12345
特定時点への復元
aws rds restore-db-instance-to-point-in-time \
  --source-db-instance-identifier my-postgres \
  --target-db-instance-identifier my-postgres-pitr \
  --restore-time 2024-01-15T10:30:00Z \
  --db-instance-class db.t3.medium
インスタンスを変更する
# Change instance class (with downtime)
aws rds modify-db-instance \
  --db-instance-identifier my-postgres \
  --db-instance-class db.m6g.large \
  --apply-immediately

# Scale storage (no downtime)
aws rds modify-db-instance \
  --db-instance-identifier my-postgres \
  --allocated-storage 200 \
  --apply-immediately
IAM 認証で接続する
import boto3
import psycopg2

rds = boto3.client('rds')

# Generate auth token
token = rds.generate_db_auth_token(
    DBHostname='my-postgres.abc123.us-east-1.rds.amazonaws.com',
    Port=5432,
    DBUsername='iam_user',
    Region='us-east-1'
)

# Connect
conn = psycopg2.connect(
    host='my-postgres.abc123.us-east-1.rds.amazonaws.com',
    port=5432,
    database='mydb',
    user='iam_user',
    password=token,
    sslmode='require'
)

CLI リファレンス

インスタンス管理
コマンド説明
aws rds create-db-instanceインスタンスを作成
aws rds describe-db-instancesインスタンスを一覧表示
aws rds modify-db-instance設定を変更
aws rds delete-db-instanceインスタンスを削除
aws rds reboot-db-instanceインスタンスを再起動
aws rds start-db-instance停止中のインスタンスを起動
aws rds stop-db-instanceインスタンスを停止
バックアップ
コマンド説明
aws rds create-db-snapshot手動でスナップショットを作成
aws rds describe-db-snapshotsスナップショットを一覧表示
aws rds restore-db-instance-from-db-snapshotスナップショットから復元
aws rds restore-db-instance-to-point-in-time特定時点に復元
aws rds copy-db-snapshotスナップショットをコピー
レプリカ
コマンド説明
aws rds create-db-instance-read-replicaリードレプリカを作成
aws rds promote-read-replicaスタンドアロンに昇格

ベストプラクティス

セキュリティ
  • パブリックアクセスを絶対に許可しないでください — VPC とセキュリティグループを使用します
  • 保存時(KMS)と転送時(SSL)の暗号化を有効にします
  • アプリケーションからのアクセスにはIAM 認証を使用します
  • ローテーションを設定したうえで、認証情報を Secrets Manager に保存します
  • SSL を強制するにはパラメータグループを使用します
# Enforce SSL in PostgreSQL
aws rds modify-db-parameter-group \
  --db-parameter-group-name my-pg-params \
  --parameters "ParameterName=rds.force_ssl,ParameterValue=1,ApplyMethod=pending-reboot"
パフォーマンス
  • 適切なサイズのインスタンスを選択します — CPU、メモリ、IOPS を監視します
  • コスト効率の高いパフォーマンスを得るためにgp3 を使用します
  • クエリ分析のためにPerformance Insights を有効にします
  • 読み取りをスケールするためにリードレプリカを使用します
  • クエリを最適化します — スロークエリログを確認します
高可用性
  • 本番環境ではMulti-AZ を有効にします
  • ミッションクリティカルなワークロードにはAurora を使用します
  • 適切なバックアップ保持期間を設定します
  • 定期的にフェイルオーバーをテストします
  • レプリカのレプリケーション遅延を監視します
コスト最適化
  • 定常的なワークロードにはリザーブドインスタンスを使用します
  • 使用していないときは開発/テスト用インスタンスを停止します
  • 古いスナップショットを定期的に削除します
  • インスタンスクラスのサイズを適切に調整します

トラブルシューティング

接続できない

原因:

  1. セキュリティグループでアクセスが許可されていない
  2. インスタンスが VPC サブネット内にない
  3. SSL が必要だが使用されていない
  4. エンドポイントまたはポートが間違っている

デバッグ:

# Check security group
aws ec2 describe-security-groups --group-ids sg-rds12345

# Check instance status
aws rds describe-db-instances \
  --db-instance-identifier my-postgres \
  --query "DBInstances[0].{Status:DBInstanceStatus,Endpoint:Endpoint}"

# Test connectivity from EC2
nc -zv my-postgres.abc123.us-east-1.rds.amazonaws.com 5432
CPU/メモリ使用率が高い

デバッグ:

# Enable Enhanced Monitoring
aws rds modify-db-instance \
  --db-instance-identifier my-postgres \
  --monitoring-interval 60 \
  --monitoring-role-arn arn:aws:iam::123456789012:role/rds-monitoring-role

# Enable Performance Insights
aws rds modify-db-instance \
  --db-instance-identifier my-postgres \
  --enable-performance-insights \
  --performance-insights-retention-period 7

解決策:

  • インスタンスクラスをスケールアップする
  • 遅いクエリを最適化する
  • リードレプリカを追加する
  • ロックやブロックが発生していないか確認する
ストレージがいっぱい

症状: インスタンスが利用できなくなる

予防:

# Enable storage autoscaling
aws rds modify-db-instance \
  --db-instance-identifier my-postgres \
  --max-allocated-storage 500

# Set CloudWatch alarm
aws cloudwatch put-metric-alarm \
  --alarm-name "RDS-Storage-Low" \
  --metric-name FreeStorageSpace \
  --namespace AWS/RDS \
  --dimensions Name=DBInstanceIdentifier,Value=my-postgres \
  --statistic Average \
  --period 300 \
  --threshold 10000000000 \
  --comparison-operator LessThanThreshold \
  --evaluation-periods 2 \
  --alarm-actions arn:aws:sns:us-east-1:123456789012:alerts
レプリケーションラグ

モニタリング:

aws cloudwatch get-metric-statistics \
  --namespace AWS/RDS \
  --metric-name ReplicaLag \
  --dimensions Name=DBInstanceIdentifier,Value=my-postgres-replica \
  --start-time $(date -d '1 hour ago' -u +%Y-%m-%dT%H:%M:%SZ) \
  --end-time $(date -u +%Y-%m-%dT%H:%M:%SZ) \
  --period 60 \
  --statistics Average

原因:

  • レプリカインスタンスのサイズが小さすぎる
  • 書き込み負荷が高い
  • ネットワークの問題
  • レプリカでの長時間実行クエリ

参考資料

コメント