AWSに戻る

Amazon RDS (Relational Database Service)

Amazon RDSとは

Amazon Relational Database Service (Amazon RDS) は、クラウド内でリレーショナルデータベースを簡単に設定、運用、スケーリングできるマネージドサービスです。ハードウェアのプロビジョニング、データベースのセットアップ、パッチ適用、バックアップなどの時間のかかる管理タスクを自動化しながら、コスト効率の高いリサイズ可能な容量を提供します。これにより、アプリケーション開発に集中できるようになります。Amazon RDSは、Amazon Aurora、PostgreSQL、MySQL、MariaDB、Oracle Database、SQL Serverなど、6つの主要なデータベースエンジンから選択できます。

Amazon RDSの主な特徴

Amazon RDSのデータベースエンジン

Amazon RDSは以下のデータベースエンジンをサポートしています:

データベースエンジン 説明 ユースケース
Amazon Aurora MySQLおよびPostgreSQLと互換性のあるAWS独自のリレーショナルデータベース。標準のMySQLより最大5倍、標準のPostgreSQLより最大3倍の性能を提供 高性能が必要なエンタープライズアプリケーション、SaaS製品、ウェブアプリケーション
MySQL 世界で最も広く使用されているオープンソースリレーショナルデータベース ウェブサイト、ブログ、eコマース、多様なアプリケーション
PostgreSQL 高度な機能を持つ強力なオープンソースオブジェクトリレーショナルデータベース 複雑なクエリ、地理空間データ、NoSQLのようなJSON機能が必要なアプリケーション
MariaDB MySQLから派生したコミュニティ開発のリレーショナルデータベース MySQLと互換性が必要なアプリケーション、より新しい機能が必要な場合
Oracle エンタープライズグレードの商用リレーショナルデータベース エンタープライズアプリケーション、ビジネスクリティカルなワークロード
Microsoft SQL Server Microsoftの商用リレーショナルデータベース管理システム Windowsベースのアプリケーション、.NETアプリケーション

Amazon Auroraについて

Amazon Auroraは、AWSが開発したクラウドネイティブのリレーショナルデータベースで、以下の特徴があります:

Amazon RDSのデプロイオプション

Amazon RDSには複数のデプロイオプションがあります:

単一AZデプロイメント

単一のアベイラビリティゾーン内にデータベースインスタンスをデプロイします。開発、テスト環境、または非クリティカルなワークロードに適しています。

マルチAZデプロイメント

プライマリDBインスタンスと同期スタンバイレプリカを別のアベイラビリティゾーンにデプロイします。高可用性と耐障害性を提供し、本番環境に推奨されます。

マルチAZデプロイメントの作成

aws rds create-db-instance \
    --db-instance-identifier mydbinstance \
    --db-instance-class db.m5.large \
    --engine mysql \
    --master-username admin \
    --master-user-password secret99 \
    --allocated-storage 100 \
    --multi-az

リードレプリカ

プライマリDBインスタンスの読み取り専用コピーを作成します。読み取りトラフィックを分散させ、スケーラビリティを向上させます。最大15個のリードレプリカを作成できます。

リードレプリカの作成

aws rds create-db-instance-read-replica \
    --db-instance-identifier mydbinstance-replica \
    --source-db-instance-identifier mydbinstance

グローバルデータベース

複数のAWSリージョンにまたがるデータベースをデプロイします。プライマリリージョンでの書き込みと、最大5つのセカンダリリージョンでの低レイテンシー読み取りを提供します。

Amazon RDS Serverless

Amazon Aurora Serverlessは、需要に応じて自動的にスケールするデータベースを提供します。アプリケーションの需要に基づいて容量を調整し、使用した分だけ支払います。

Amazon RDSのインスタンスタイプ

Amazon RDSは様々なワークロードに対応するために複数のインスタンスタイプを提供しています:

インスタンスファミリー 説明 ユースケース
T(バーストパフォーマンス) ベースラインパフォーマンスとバースト能力を提供する低コストインスタンス 開発/テスト環境、小規模アプリケーション、低トラフィックのブログやウェブサイト
M(汎用) コンピューティング、メモリ、ネットワークリソースのバランスが取れたインスタンス 中小規模のデータベース、開発環境、テスト環境、本番環境
R(メモリ最適化) メモリを多く使用するワークロード向けに最適化されたインスタンス 高性能データベース、インメモリデータベース、リアルタイム分析
X(メモリ超最適化) 大規模なインメモリアプリケーション向けの高メモリインスタンス 大規模なインメモリデータベース、SAP HANA、ビッグデータ処理エンジン
Z(メモリ最適化および高速ストレージ) 高周波数のIntel Xeonプロセッサと高速ローカルストレージを備えたインスタンス 高性能トランザクション処理、低レイテンシーが必要なアプリケーション

Amazon RDSのストレージオプション

Amazon RDSは3種類のストレージタイプを提供しています:

ストレージタイプ 説明 ユースケース
汎用SSD(gp2/gp3) コスト効率の高いSSDストレージ。gp3はgp2の後継で、より柔軟なパフォーマンス設定が可能 開発/テスト環境、中小規模の本番データベース
プロビジョンドIOPS SSD(io1/io2) 高性能SSDストレージ。io2はio1の後継で、より高い耐久性を提供 I/O集約型のワークロード、高トランザクションのOLTPシステム
マグネティック(スタンダード) レガシーストレージタイプ(新規デプロイメントには非推奨) 低コストが最優先の非クリティカルワークロード

プロビジョンドIOPSストレージを使用したDBインスタンスの作成

aws rds create-db-instance \
    --db-instance-identifier mydbinstance \
    --db-instance-class db.m5.large \
    --engine mysql \
    --master-username admin \
    --master-user-password secret99 \
    --allocated-storage 100 \
    --storage-type io1 \
    --iops 3000

Amazon RDSの使用方法

Amazon RDSは、AWS Management Console、AWS CLI、AWS SDKs、またはインフラストラクチャ as コード(IaC)ツールを使用して利用できます。

データベースインスタンスの作成

AWS CLIを使用したMySQLデータベースインスタンスの作成

aws rds create-db-instance \
    --db-instance-identifier mydbinstance \
    --db-instance-class db.t3.micro \
    --engine mysql \
    --engine-version 8.0.28 \
    --master-username admin \
    --master-user-password secret99 \
    --allocated-storage 20 \
    --storage-type gp2 \
    --vpc-security-group-ids sg-0123456789abcdef0 \
    --db-subnet-group-name my-db-subnet-group \
    --backup-retention-period 7 \
    --port 3306 \
    --multi-az \
    --publicly-accessible \
    --tags Key=Environment,Value=Production

データベースへの接続

MySQLデータベースへの接続

mysql -h mydbinstance.abcdefghijkl.us-east-1.rds.amazonaws.com -P 3306 -u admin -p

PostgreSQLデータベースへの接続

psql -h mydbinstance.abcdefghijkl.us-east-1.rds.amazonaws.com -p 5432 -U admin -d postgres

バックアップと復元

手動スナップショットの作成

aws rds create-db-snapshot \
    --db-instance-identifier mydbinstance \
    --db-snapshot-identifier mydbsnapshot

スナップショットからのデータベースの復元

aws rds restore-db-instance-from-db-snapshot \
    --db-instance-identifier mynewdbinstance \
    --db-snapshot-identifier mydbsnapshot

特定の時点への復元

aws rds restore-db-instance-to-point-in-time \
    --source-db-instance-identifier mydbinstance \
    --target-db-instance-identifier mynewdbinstance \
    --restore-time 2023-01-15T00:00:00Z

パラメータグループの管理

DBパラメータグループの作成

aws rds create-db-parameter-group \
    --db-parameter-group-name myparametergroup \
    --db-parameter-group-family mysql8.0 \
    --description "My custom parameter group"

パラメータの変更

aws rds modify-db-parameter-group \
    --db-parameter-group-name myparametergroup \
    --parameters "ParameterName=max_connections,ParameterValue=1000,ApplyMethod=immediate"

Amazon RDSのセキュリティ

Amazon RDSは、データベースのセキュリティを確保するための多層防御アプローチを提供します:

ネットワークセキュリティ

セキュリティグループの設定

# セキュリティグループの作成
aws ec2 create-security-group \
    --group-name rds-security-group \
    --description "Security group for RDS" \
    --vpc-id vpc-0123456789abcdef0

# 特定のIPからのMySQLアクセスを許可
aws ec2 authorize-security-group-ingress \
    --group-id sg-0123456789abcdef0 \
    --protocol tcp \
    --port 3306 \
    --cidr 203.0.113.0/24

アクセス管理

IAM認証の有効化

aws rds modify-db-instance \
    --db-instance-identifier mydbinstance \
    --enable-iam-database-authentication

暗号化

暗号化されたデータベースインスタンスの作成

aws rds create-db-instance \
    --db-instance-identifier mydbinstance \
    --db-instance-class db.t3.micro \
    --engine mysql \
    --master-username admin \
    --master-user-password secret99 \
    --allocated-storage 20 \
    --storage-encrypted \
    --kms-key-id arn:aws:kms:us-east-1:123456789012:key/abcd1234-ef56-gh78-ij90-klmn1234pqrs

監査とモニタリング

Amazon RDSのモニタリングと可観測性

Amazon RDSは、データベースのパフォーマンスと健全性を監視するための様々なツールを提供します:

Amazon CloudWatch

CloudWatchは、RDSインスタンスのメトリクス(CPU使用率、メモリ使用率、ディスクI/O、接続数など)を収集し、アラームを設定して自動アクションをトリガーすることができます。

CloudWatchアラームの作成

aws cloudwatch put-metric-alarm \
    --alarm-name HighCPUUtilization \
    --comparison-operator GreaterThanThreshold \
    --evaluation-periods 2 \
    --metric-name CPUUtilization \
    --namespace AWS/RDS \
    --period 300 \
    --statistic Average \
    --threshold 80 \
    --alarm-actions arn:aws:sns:us-east-1:123456789012:my-topic \
    --dimensions "Name=DBInstanceIdentifier,Value=mydbinstance"

拡張モニタリング

拡張モニタリングは、RDSインスタンスのオペレーティングシステムのメトリクスをリアルタイムで提供します。これにより、データベースのパフォーマンスに影響を与える可能性のあるプロセスやスレッドを特定できます。

拡張モニタリングの有効化

aws rds modify-db-instance \
    --db-instance-identifier mydbinstance \
    --monitoring-interval 30 \
    --monitoring-role-arn arn:aws:iam::123456789012:role/rds-monitoring-role

Performance Insights

Performance Insightsは、データベースのパフォーマンスを簡単に可視化し、パフォーマンスの問題を特定するためのツールです。データベースの負荷を分析し、待機イベント、SQLステートメント、ホスト、ユーザーによるフィルタリングが可能です。

Performance Insightsの有効化

aws rds modify-db-instance \
    --db-instance-identifier mydbinstance \
    --enable-performance-insights \
    --performance-insights-retention-period 7

データベースログ

RDSは、データベースエンジンのログをCloudWatch Logsにエクスポートする機能を提供しています。これにより、ログの集中管理、検索、分析が可能になります。

ログのエクスポートの有効化

aws rds modify-db-instance \
    --db-instance-identifier mydbinstance \
    --cloudwatch-logs-export-configuration '{"EnableLogTypes":["error","general","slowquery"]}'

Amazon RDSの高度な機能

ブルー/グリーンデプロイメント

ブルー/グリーンデプロイメントは、本番環境(ブルー環境)のコピーを作成し、新しい環境(グリーン環境)でアップグレードやスキーマ変更をテストした後、最小限のダウンタイムで切り替えることができる機能です。

マルチAZクラスター

マルチAZクラスターは、3つのアベイラビリティゾーンにわたるリードレプリカを持つ高可用性クラスターデプロイメントです。書き込みノードに障害が発生した場合、自動的にフェイルオーバーが行われます。

RDSプロキシ

RDSプロキシは、データベース接続をプールし、共有し、安全に維持するフルマネージドの高可用性データベースプロキシです。アプリケーションのスケーラビリティを向上させ、データベースの障害に対する回復力を高めます。

RDSプロキシの作成

aws rds create-db-proxy \
    --db-proxy-name mydbproxy \
    --engine-family MYSQL \
    --auth '{
      "AuthScheme": "SECRETS",
      "SecretArn": "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret",
      "IAMAuth": "DISABLED"
    }' \
    --role-arn arn:aws:iam::123456789012:role/rds-proxy-role \
    --vpc-subnet-ids subnet-0123456789abcdef0 subnet-0123456789abcdef1 \
    --vpc-security-group-ids sg-0123456789abcdef0

RDSカスタム

RDSカスタムは、基盤となるデータベースとオペレーティングシステムへのアクセスを提供するマネージドデータベースサービスです。これにより、レガシーアプリケーションやカスタムアプリケーションに必要なカスタマイズが可能になります。

Amazon RDSのコスト最適化

Amazon RDSのコストを最適化するための戦略:

Amazon RDSのユースケース

Amazon RDSは以下のようなユースケースに適しています:

Amazon RDSとの統合サービス

Amazon RDSは他のAWSサービスと統合して、より強力なソリューションを構築できます:

サービス 統合の利点
Amazon EC2 アプリケーションサーバーとデータベースの統合
AWS Lambda サーバーレスアプリケーションからのデータベースアクセス
Amazon S3 データのインポート/エクスポート、バックアップの保存
AWS DMS データベース移行とレプリケーション
Amazon CloudWatch モニタリング、アラート、ログ管理
AWS Secrets Manager データベース認証情報の安全な管理
AWS Backup 一元管理されたバックアップソリューション

AWS DMSとの統合例

データベース移行タスクの作成

aws dms create-replication-task \
    --replication-task-identifier my-migration-task \
    --source-endpoint-arn arn:aws:dms:us-east-1:123456789012:endpoint:ABCDEFGHIJKLMNOPQRSTUVWXYZ \
    --target-endpoint-arn arn:aws:dms:us-east-1:123456789012:endpoint:ZYXWVUTSRQPONMLKJIHGFEDCBA \
    --replication-instance-arn arn:aws:dms:us-east-1:123456789012:rep:ABCDEFGHIJKLMNOPQRSTUVWXYZ \
    --migration-type full-load-and-cdc \
    --table-mappings file://table-mappings.json \
    --replication-task-settings file://task-settings.json

Amazon RDSのベストプラクティス

RDSのセキュリティチェックリスト

RDSインスタンスのセキュリティを確保するためのチェックリスト:

まとめ

Amazon RDSは、クラウド内でリレーショナルデータベースを簡単に設定、運用、スケーリングできるマネージドサービスです。複数のデータベースエンジンをサポートし、バックアップ、パッチ適用、スケーリング、高可用性などの時間のかかる管理タスクを自動化します。

Amazon RDSの主な利点は以下の通りです:

Amazon RDSを効果的に活用するには、適切なデータベースエンジンとインスタンスタイプの選択、高可用性の確保、セキュリティベストプラクティスの適用、パフォーマンスの最適化、コスト管理の最適化が重要です。また、他のAWSサービスと組み合わせることで、より強力で柔軟なクラウドソリューションを構築することができます。