Aurora

【VPC内リージョンサービス】

Aurora は、AWS が提供するフルマネージド型データベースサービスである RDS(Relational Database Service) の一部として提供される、AWS 独自設計の MySQL / PostgreSQL 互換のRDBです。

RDS と同様に、バックアップ、フェイルオーバー、スケーリング、パッチ適用、監視などの運用管理を自動化し、運用負荷を大幅に軽減します。

Aurora は、クラスタ構造を採用しており、1つのクラスター内にプライマリインスタンスと複数のRead Replica(リードレプリカ)を持つことで、高い可用性とスケーラビリティを実現します。

Auroraのストレージは6-way replicated storage(6重複写ストレージ)によって構成され、3つのAZ(Availability Zone)に分散配置されます。これにより、自動自己修復機能を備え、障害に強く、秒間数百万IOPS級の高性能を発揮します。また、Storage Auto-Scaling(ストレージ自動拡張)機能により、データ量の増加に応じてストレージが自動的に拡張され、最大128TBまでスケールします。

Aurora Serverless v2 に対応しており、ワークロードの変化に応じてコンピューティングキャパシティがリアルタイムにスケーリングします。これにより、負荷変動の大きいアプリケーションでも効率的かつコスト最適に運用できます。さらに、I/O-Optimized(I/O最適化) モードを利用することで、ストレージI/Oのレイテンシを最小化し、安定した高スループットを実現します。

Global Database 機能により、複数のAWSリージョン間で非同期レプリケーションを行い、グローバル規模での読み取り性能向上やDR(Disaster Recovery:災害復旧)対策を実現します。

Multi-Master構成を利用することで、複数のWriterインスタンスによる同時書き込みが可能になり、高い可用性と可用性を両立します。

AuroraはRead Replicaを最大15個まで作成でき、読み取りトラフィックを効率的に分散できます。障害発生時には自動フェイルオーバーが行われ、サービスを中断することなく継続運用できます。さらに、Custom Endpoints機能を使うことで、特定のRead Replica群に対して個別の接続エンドポイントを設定し、ワークロードに応じた柔軟な負荷分散が可能です。

Backtrack(バックトラック)機能では、数秒~数時間前の任意時点に即座にロールバックでき、誤操作や検証作業時に便利です。

Fast Cloning(クローン機能)により、コピーオンライト技術を使って大規模データベースを瞬時に複製できるため、開発・検証環境の構築を迅速に行えます。

Parallel Query(並列クエリ)機能では、クエリ処理をストレージ層で並列化し、大規模データ分析やバッチ処理を高速に実行できます。

重要用語

関連サービス
RDS

ユースケース

高可用・高性能な基幹DBAmazon Aurora MySQL/PostgreSQL互換エンジンを利用し、自動ストレージ拡張と高速なリカバリを備えた基幹システム用データベースを構築する。
サーバーレスDBによるスパイク対応Aurora Serverlessを使い、アクセスが少ない時間帯は自動的にリソースを縮小し、ピーク時だけスケールアウトするコスト最適なDB基盤を実現する。
マイクロサービスごとの分離DBマイクロサービスごとに小さなAuroraクラスターを用意し、スキーマや負荷を分離した構成で独立性とスケーラビリティを高める。

ベストプラクティス

リーダー/リーダーエンドポイントの活用読み取りトラフィックをリーダーにオフロードしスケールアウトする。
バックトラックやGlobal Database誤更新対策やグローバル展開にAurora固有機能を利用する。
Auto Scalingとサーバーレス検討負荷変動が大きい場合はリーダーのオートスケーリングやAurora Serverlessを検討する。

高可用性・バックアップ・リトライ

高可用性・バックアップ・リトライ設計のポイント
【デフォルト】AWS内部で冗長化
 ・ストレージの6重化(データは自動的に3つのAZにまたがって6つのコピーが作成される)
 ・データブロックの継続的スキャンと自動修復(ストレージ層で破損データを自動検出)
 ・Write Ahead Log(トランザクションログが複数AZに自動分散)
 ・ストレージの自動スケーリング(10GBずつ自動拡張 最大128TB)
【リードレプリカ】の作成(最大5台、15台)
【クラスタのマルチAZ構成】(ストレージはデフォルトで6重化)
【データベースプロキシ】の利用(アプリケーションの接続要求を RDS Proxy がまとめてプール)
【グローバルデータベース】(ディザスタリカバリ要件がある場合)
【自動バックアップ】バックアップ保持期間 1~35 日
 デフォルト 1 日
 クラスタボリュームを継続的に S3 にバックアップ
 PITR:継続的バックアップ+トランザクションログにより、保持期間内の任意時点に復元可能
【手動スナップショット】任意のタイミングで取得可能
 保持期限は無制限(ユーザーが削除するまで保持)
 クラスタボリューム全体を S3 ベースの永続ストレージに保存
 スナップショットからいつでもクラスタを復元可能(スナップショット時点での復元)

セキュリティ

関連サービス設定内容
Subnet(公開リソースと内部リソースの分離)【DBサーバ】
 Privateの専用SubnetでマルチAZ構成
SG(リソース単位のアクセス制御)【DBサーバ】
 インバウンド:3306(MySQL)
        5432(PostgreSQL)
 アウトバウンド:すべて許可
KMS(データの暗号化と鍵の安全管理)【 AWS管理キーによる暗号化を実施】
 独自KMSキーを使うことを推奨(鍵操作、監査)
Secrets Manager(機密情報の安全管理)シークレット(秘密情報)の作成が推奨
 DB認証情報
SSM Parameter Store(設定情報の一元管理)-
CloudTrail(操作履歴の記録・監査・追跡)【自動記録】
作成・更新・削除・設定変更は自動記録される。(コントロールプレーンAPI)
データ操作は追跡できない(データプレーンAPI)
Config(リソースの構成状態・設定変更を記録)【Configが有効な場合】
DBクラスタ/インスタンス設定変更履歴・暗号化/バックアップ/パブリックアクセス準拠評価
GuardDuty(脅威を自動検出)【GuardDutyが有効な場合】
RDS同様、ネットワーク通信とAPI異常検知

ログ・監視

ログ出力先ログの種類
CloudWatch Logsデータベースログ
CloudWatch Logs優先の原則
標準メトリクス
メトリクス名説明
AuroraBinlogReplicaLagAuroraバイナリログレプリカ遅延
AuroraReplicaLagAuroraレプリカ遅延
BufferCacheHitRatioバッファキャッシュヒット率
RollbackSegmentHistoryListLengthロールバックセグメント履歴長
AuroraVolumeBytesLeftTotalAurora残容量
EngineUptimeエンジン稼働時間

制限値(固定値/ハードリミット/ソフトリミット)

固定値制限値
スナップショット保持期間1-35日
データベース接続数インスタンスタイプに依存

ハードリミット制限値
最大ストレージ128 TiB
リードレプリカ数15
バックトラック期間最大72時間

ソフトリミット制限値
クラスターあたりのDBインスタンス数15
クロスリージョンスナップショット共有先20アカウント

AWS CLIのサンプルコード

SG を作成する(VPC ID 指定)
aws ec2 create-security-group \
  --group-name aurora-sg \
  --vpc-id vpc-xxxxxxxxx \
  --tag-specifications 'ResourceType=security-group,Tags=[{Key=Name,Value=aurora-sg}]'
SG ID を表示する
aws ec2 describe-security-groups
インバウンドルールを追加する(SG ID 指定)
aws ec2 authorize-security-group-ingress \
  --group-id sg-xxxxxxxxx \
  --protocol tcp \
  --port 3306 \
  --cidr 0.0.0.0/0
SG を削除する(SG ID 指定)
aws ec2 delete-security-group \
  --group-id sg-xxxxxxxxx

サブネットグループを作成する
aws rds create-db-subnet-group \
  --db-subnet-group-name my-db-subnet-group \
  --db-subnet-group-description "Aurora Subnet Group" \
  --subnet-ids subnet-xxxxx subnet-yyyyy
サブネットグループを表示する
aws rds describe-db-subnet-groups
サブネットグループを削除する(サブネットグループ名 指定)
aws rds delete-db-subnet-group \
  --db-subnet-group-name my-db-subnet-group

Aurora クラスタを作成する(SG ID、サブネットグループ名 指定)
aws rds create-db-cluster \
  --db-cluster-identifier my-aurora-cluster \
  --engine aurora-mysql \
  --engine-version 8.0.mysql_aurora.3.04.0 \
  --master-username admin \
  --master-user-password MyPassword123! \
  --db-subnet-group-name my-db-subnet-group \
  --vpc-security-group-ids sg-xxxxx
Aurora クラスタを表示する
aws rds describe-db-clusters
Aurora クラスタを削除する(クラスタID 指定)
aws rds delete-db-cluster \
  --db-cluster-identifier my-aurora-cluster \
  --skip-final-snapshot

Auroraインスタンスを作成する(クラスタID 指定)
 1個目のインスタンス   ・・・ ライター(プライマリ)
 2個目以降のインスタンス ・・・ リーダー(レプリカ)
aws rds create-db-instance \
  --db-instance-identifier my-aurora-instance-1 \
  --db-instance-class db.t3.medium \
  --engine aurora-mysql \
  --db-cluster-identifier my-aurora-cluster
Auroraインスタンスを表示する
aws rds describe-db-instances
Auroraインスタンスを削除する(インスタンス ID 指定)
aws rds delete-db-instance \
  --db-instance-identifier my-aurora-instance-1 \
  --skip-final-snapshot

Aurora クラスタを起動する(クラスタ ID 指定)
aws rds start-db-cluster \
  --db-cluster-identifier my-aurora-cluster
Aurora クラスタを停止する(クラスタ ID 指定)
aws rds stop-db-cluster \
  --db-cluster-identifier my-aurora-cluster

スナップショットを作成する(クラスタ ID 指定)
aws rds create-db-cluster-snapshot \
  --db-cluster-identifier my-aurora-cluster \
  --db-cluster-snapshot-identifier my-snapshot-20241205
スナップショットを表示する(クラスタ ID 指定)
aws rds describe-db-cluster-snapshots \
  --db-cluster-identifier my-aurora-cluster
スナップショットを削除する(スナップショット ID 指定)
aws rds delete-db-cluster-snapshot \
  --db-cluster-snapshot-identifier my-snapshot-20241205
スナップショットからクラスターを復元する(クラスタ ID 指定、スナップショット ID指定)
aws rds restore-db-cluster-from-snapshot \
  --db-cluster-identifier my-restored-cluster \
  --snapshot-identifier my-snapshot-20241205 \
  --engine aurora-mysql

フェールオーバーを実行する(クラスタID、昇格させるインスタンスID 指定)
aws rds failover-db-cluster \
  --db-cluster-identifier my-aurora-cluster \
  --target-db-instance-identifier my-aurora-instance-2

CloudFormationのサンプルコード

Terraformのサンプルコード

料金計算

課金項目説明
インスタンス時間データベースインスタンスの稼働時間
ストレージ容量使用したストレージ容量(10GB単位で自動拡張)
I/Oリクエスト100万I/Oリクエスト単位
バックアップストレージ保持期間を超えるバックアップの容量
データ転送インターネットへのデータ転送量
グローバルデータベースリージョン間のレプリケーション
ServerlessACU(Aurora Capacity Units)の使用量
料金計算ツール

公式ページ

AWSドキュメント Aurora