0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

徹底比較! AWS vs Azure 〜30の観点から考える最適なクラウド選び〜 - Day6: リレーショナルデータベース:AWS RDS vs Azure Database Services

Posted at

Day6: リレーショナルデータベース:AWS RDS vs Azure Database Services

皆さん、こんにちは。エンジニアのAkrです。
「徹底比較! AWS vs Azure」シリーズ、Day6へようこそ。
今回は、アプリケーションの根幹を支えるリレーショナルデータベースについて比較します。AWSのAmazon RDS(Relational Database Service)と、AzureのAzure Database Servicesです。

マネージドデータベースの基本

リレーショナルデータベースの運用には、パッチ適用、バックアップ、レプリケーション、スケーリングなど多くの手間がかかります。RDSとAzure Database Servicesは、これらをクラウドプロバイダーが自動で管理してくれる**「マネージドサービス」**です。これにより、開発者はデータベースの運用ではなく、スキーマ設計やクエリ最適化といった本質的な作業に集中できます。

マネージドサービスの主なメリット

  • 自動バックアップ: 定期的なデータバックアップの自動化
  • パッチ管理: セキュリティパッチの自動適用
  • 高可用性: 複数ゾーンでの冗長化
  • 監視・アラート: パフォーマンス監視とアラート機能
  • 自動スケーリング: 負荷に応じたリソース調整

サービス対応表

まず、各プラットフォームでどのデータベースエンジンがサポートされているかを整理します。

データベースエンジン AWS Azure
MySQL Amazon RDS for MySQL
Amazon Aurora MySQL
Azure Database for MySQL
PostgreSQL Amazon RDS for PostgreSQL
Amazon Aurora PostgreSQL
Azure Database for PostgreSQL
MariaDB Amazon RDS for MariaDB Azure Database for MariaDB
SQL Server Amazon RDS for SQL Server Azure SQL Database
Azure SQL Managed Instance
Oracle Amazon RDS for Oracle 未サポート(IaaS VM推奨)
独自エンジン Amazon Aurora Azure SQL Database(SQL Server派生)

基本仕様比較

Amazon RDS vs Azure Database Services

項目 AWS RDS Azure Database Services
最大ストレージ 64TB(Aurora: 128TB) 4TB(Azure SQL: 100TB)
最大接続数 エンジン・インスタンス依存 サービス層依存
可用性SLA 99.95%(Multi-AZ) 99.99%(高可用性構成)
RPO 5分(自動バックアップ) 5-10分(サービス依存)
RTO 5-10分(Multi-AZ) 10-15分(高可用性)
リージョン数 25+ 30+

エンジン別詳細比較

MySQL比較

機能 Amazon Aurora MySQL Azure Database for MySQL
互換性 MySQL 5.7/8.0 MySQL 5.7/8.0
パフォーマンス 標準MySQLの5倍 標準MySQL同等
ストレージ 自動拡張(10GB-128TB) 手動拡張(5GB-4TB)
読み取りレプリカ 最大15個 最大5個
料金モデル インスタンス+I/O課金 インスタンス+ストレージ課金

PostgreSQL比較

機能 Amazon Aurora PostgreSQL Azure Database for PostgreSQL
互換性 PostgreSQL 11/12/13/14/15 PostgreSQL 11/12/13/14/15/16
パフォーマンス 標準PostgreSQLの3倍 標準PostgreSQL同等
拡張機能 制限あり 豊富な拡張機能サポート
読み取りレプリカ 最大15個 最大5個
Hyperscale なし Hyperscale (Citus)対応

SQL Server比較

機能 Amazon RDS for SQL Server Azure SQL Database
エディション Express/Web/Standard/Enterprise Basic/Standard/Premium/Critical
最大DB サイズ 16TB 100TB
Always On Multi-AZ で類似機能 標準搭載
ライセンス BYOL or License Included BYOL or vCore
SQL Server Management Studio 完全対応 制限あり(一部機能未対応)

料金比較(東京・東日本リージョン、2024年概算)

MySQL インスタンス料金比較(月額)

スペック AWS Aurora MySQL Azure Database for MySQL
2 vCore, 8GB RAM $190(r6g.large相当) $180(2 vCore汎用目的)
4 vCore, 16GB RAM $380(r6g.xlarge相当) $360(4 vCore汎用目的)
8 vCore, 32GB RAM $760(r6g.2xlarge相当) $720(8 vCore汎用目的)

SQL Server料金比較(月額)

スペック AWS RDS SQL Server Azure SQL Database
2 vCore, 8GB $580(ライセンス込み) $450(vCore + ライセンス)
4 vCore, 16GB $1,160(ライセンス込み) $900(vCore + ライセンス)
Azure Hybrid Benefit適用 適用不可 最大40%割引

高可用性・災害復旧の比較

AWS RDS の高可用性

# RDS Multi-AZ の設定例
import boto3

rds = boto3.client('rds')

# Multi-AZ での DB インスタンス作成
response = rds.create_db_instance(
    DBInstanceIdentifier='myapp-prod-db',
    DBInstanceClass='db.r6g.large',
    Engine='aurora-mysql',
    MasterUsername='admin',
    MasterUserPassword='SecurePassword123',
    MultiAZ=True,  # Multi-AZ 有効化
    BackupRetentionPeriod=7,
    PreferredBackupWindow='03:00-04:00',
    PreferredMaintenanceWindow='sun:04:00-sun:05:00'
)

# 読み取りレプリカの作成
read_replica = rds.create_db_instance_read_replica(
    DBInstanceIdentifier='myapp-read-replica',
    SourceDBInstanceIdentifier='myapp-prod-db',
    DBInstanceClass='db.r6g.large'
)

Azure Database の高可用性

# Azure CLI での高可用性 MySQL サーバー作成
az mysql flexible-server create \
    --name myapp-prod-db \
    --resource-group myapp-rg \
    --location eastus \
    --admin-user myadmin \
    --admin-password SecurePassword123 \
    --sku-name Standard_D2ds_v4 \
    --tier GeneralPurpose \
    --high-availability Enabled \
    --backup-retention 7 \
    --storage-size 128

# 読み取りレプリカの作成
az mysql flexible-server replica create \
    --replica-name myapp-read-replica \
    --source-server myapp-prod-db \
    --resource-group myapp-rg

パフォーマンス・ベンチマーク比較

Amazon Aurora の性能特徴

-- Aurora の独自機能例:クローン作成
CALL mysql.rds_create_clone_db('production_db', 'test_clone');

-- Aurora の高速バックアップ
-- スナップショットから数分で復元可能

Aurora の優位性:

  • ストレージ層の最適化: 6つのコピーを3つのAZに分散
  • キャッシュウォーミング: インスタンス故障時の高速復旧
  • 並列クエリ: 大容量データの高速処理

Azure SQL Database の性能特徴

-- Azure SQL Database の独自機能
-- 自動チューニング
ALTER DATABASE [myapp_db] SET AUTOMATIC_TUNING (FORCE_LAST_GOOD_PLAN = ON);

-- インメモリOLTP(Premium層)
CREATE TABLE OrderDetails (
    OrderID int NOT NULL,
    ProductID int NOT NULL,
    Quantity int NOT NULL
) WITH (MEMORY_OPTIMIZED = ON);

Azure SQL Database の優位性:

  • Query Store: クエリ性能の自動追跡
  • 自動チューニング: AI による最適化提案
  • インメモリ OLTP: メモリ最適化テーブル

セキュリティ機能比較

AWS RDS のセキュリティ

機能 対応状況 詳細
暗号化(保存時) KMS統合、TDE対応
暗号化(転送時) SSL/TLS強制
ネットワーク分離 VPC、Security Groups
IAM統合 データベース認証
監査ログ CloudTrail、Performance Insights

Azure Database Services のセキュリティ

機能 対応状況 詳細
暗号化(保存時) Key Vault統合、TDE
暗号化(転送時) TLS 1.2強制
ネットワーク分離 VNet統合、Private Endpoints
Azure AD統合 シングルサインオン
Advanced Threat Protection AI による脅威検出

実践的な移行シナリオ

オンプレミス MySQL から Aurora への移行

# 1. AWS DMS を使用した移行
aws dms create-replication-task \
    --replication-task-identifier mysql-to-aurora \
    --source-endpoint-arn arn:aws:dms:region:account:endpoint:source \
    --target-endpoint-arn arn:aws:dms:region:account:endpoint:target \
    --migration-type full-load-and-cdc

# 2. mysqldump を使用したシンプルな移行
mysqldump -h source-server -u username -p database_name | \
mysql -h aurora-cluster.cluster-xxx.region.rds.amazonaws.com -u admin -p

オンプレミス SQL Server から Azure SQL Database への移行

# Azure Database Migration Service を使用
# 1. アセスメントの実行
$assessment = New-AzDataMigrationProject -ResourceGroupName "myRG" `
    -ServiceName "myDMS" -ProjectName "SQLServerMigration"

# 2. スキーマ移行
$schemaTask = New-AzDataMigrationTask -ResourceGroupName "myRG" `
    -ServiceName "myDMS" -ProjectName "SQLServerMigration" `
    -TaskName "SchemaOnly"

# 3. データ移行の実行
$dataTask = New-AzDataMigrationTask -ResourceGroupName "myRG" `
    -ServiceName "myDMS" -ProjectName "SQLServerMigration" `
    -TaskName "DataMigration"

監視・運用の比較

AWS RDS の監視

# CloudWatch メトリクスの取得
import boto3
from datetime import datetime, timedelta

cloudwatch = boto3.client('cloudwatch')

# CPU使用率の取得
cpu_metrics = cloudwatch.get_metric_statistics(
    Namespace='AWS/RDS',
    MetricName='CPUUtilization',
    Dimensions=[{
        'Name': 'DBInstanceIdentifier',
        'Value': 'myapp-prod-db'
    }],
    StartTime=datetime.utcnow() - timedelta(hours=1),
    EndTime=datetime.utcnow(),
    Period=300,
    Statistics=['Average', 'Maximum']
)

# Performance Insights での詳細分析
pi = boto3.client('pi')
pi_data = pi.get_resource_metrics(
    ServiceType='RDS',
    Identifier='db-ABCDEFGHIJKLMNOPQRSTUVWX',
    MetricQueries=[{
        'Metric': 'db.SQL.Innodb_rows_read.avg',
        'GroupBy': {'Group': 'db.sql.Innodb_rows_read.avg'}
    }],
    StartTime=datetime.utcnow() - timedelta(hours=1),
    EndTime=datetime.utcnow()
)

Azure Database の監視

# Azure Monitor メトリクスの取得
az monitor metrics list \
    --resource /subscriptions/xxx/resourceGroups/myRG/providers/Microsoft.DBforMySQL/flexibleServers/myserver \
    --metric "cpu_percent,memory_percent,connections_active" \
    --start-time 2024-01-01T00:00:00Z \
    --end-time 2024-01-01T23:59:59Z

# Query Performance Insight の有効化
az mysql flexible-server parameter set \
    --resource-group myRG \
    --server-name myserver \
    --name query_store_capture_mode \
    --value ALL

サーバーレス・オートスケーリング比較

AWS Aurora Serverless v2

# Aurora Serverless v2 の設定
aurora_serverless = rds.create_db_cluster(
    DBClusterIdentifier='serverless-cluster',
    Engine='aurora-mysql',
    EngineMode='provisioned',  # v2では provisioned
    ServerlessV2ScalingConfiguration={
        'MinCapacity': 0.5,  # 最小 0.5 ACU
        'MaxCapacity': 16.0  # 最大 16 ACU
    },
    MasterUsername='admin',
    MasterUserPassword='SecurePassword123'
)

Azure SQL Database Serverless

-- Azure SQL Database サーバーレスの作成
-- Auto-pause/resume 機能付き
CREATE DATABASE [MyAppDB] 
(
    EDITION = 'GeneralPurpose',
    SERVICE_OBJECTIVE = 'GP_S_Gen5_2',  -- サーバーレス構成
    COMPUTE_MODEL = 'Serverless',
    AUTO_PAUSE_DELAY = 60  -- 60分でオートポーズ
);

コスト最適化戦略

AWS RDS のコスト最適化

# リザーブドインスタンスの活用
reserved_instances = rds.describe_reserved_db_instances()

# ストレージ最適化
def optimize_rds_storage():
    instances = rds.describe_db_instances()
    
    for instance in instances['DBInstances']:
        # 使用率チェック
        if instance['AllocatedStorage'] > actual_usage * 1.5:
            # ストレージを縮小(要ダウンタイム)
            rds.modify_db_instance(
                DBInstanceIdentifier=instance['DBInstanceIdentifier'],
                AllocatedStorage=int(actual_usage * 1.2),
                ApplyImmediately=False
            )

# Aurora の I/O 最適化モード(2024年新機能)
aurora_optimized = rds.create_db_cluster(
    DBClusterIdentifier='optimized-cluster',
    Engine='aurora-mysql',
    StorageType='aurora-iopt1'  # I/O最適化ストレージ
)

Azure Database のコスト最適化

# Azure Hybrid Benefit の適用
az sql db update \
    --resource-group myRG \
    --server myserver \
    --name mydb \
    --license-type BasePrice  # Hybrid Benefit適用

# 予約インスタンスの購入
az reservations catalog show \
    --reserved-resource-type SqlDatabases \
    --location eastus

# 自動スケーリングの設定
az monitor autoscale create \
    --resource-group myRG \
    --name myautoscale \
    --resource /subscriptions/xxx/resourceGroups/myRG/providers/Microsoft.Sql/servers/myserver \
    --min-count 2 \
    --max-count 10 \
    --count 2

実際の選択基準・意思決定フレームワーク

技術的要件による選択

要件 AWS RDS推奨度 Azure Database推奨度 理由
MySQL高性能 ⭐⭐⭐⭐⭐ ⭐⭐⭐ Aurora の圧倒的性能
PostgreSQL拡張 ⭐⭐⭐ ⭐⭐⭐⭐⭐ Azureの豊富な拡張機能
SQL Server ⭐⭐⭐ ⭐⭐⭐⭐⭐ ライセンスコストとAHB
Oracle ⭐⭐⭐⭐⭐ RDSのみ対応
マルチクラウド ⭐⭐⭐⭐ ⭐⭐⭐ RDSの方が移植性高い

ビジネス要件による選択

要件 AWS RDS Azure Database 備考
コスト最重視 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ Aurora Serverless v2
Microsoft統合 ⭐⭐ ⭐⭐⭐⭐⭐ Azure AD、Office 365
既存AWSインフラ ⭐⭐⭐⭐⭐ ⭐⭐ VPC、IAM統合
データ分析統合 ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ Azure Synapse統合
エンタープライズ ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ Azure のコンプライアンス

移行のベストプラクティス

Phase 1: 評価・計画

# データベース評価ツールの例
def database_assessment():
    # 現在のワークロード分析
    queries = analyze_query_patterns()
    storage = calculate_storage_requirements()
    performance = measure_performance_metrics()
    
    # 移行コスト見積もり
    aws_cost = calculate_aws_cost(queries, storage, performance)
    azure_cost = calculate_azure_cost(queries, storage, performance)
    
    return {
        'recommendation': 'aws' if aws_cost < azure_cost else 'azure',
        'cost_difference': abs(aws_cost - azure_cost),
        'migration_complexity': assess_complexity()
    }

Phase 2: 移行実行

# ゼロダウンタイム移行の例(MySQL)
# 1. ソースDBのバイナリログ有効化
# 2. 初期データ同期
# 3. 継続的レプリケーション
# 4. カットオーバー

# AWS DMS を使用した継続的レプリケーション
aws dms start-replication-task \
    --replication-task-arn arn:aws:dms:region:account:task:taskid \
    --start-replication-task-type reload-target

まとめ:2024年時点での選択指針

データベースエンジン別推奨

エンジン 推奨プラットフォーム 理由
MySQL AWS Aurora MySQL 5倍の性能、自動拡張ストレージ
PostgreSQL Azure Database for PostgreSQL 豊富な拡張機能、Hyperscale対応
SQL Server Azure SQL Database Azure Hybrid Benefit、統合環境
Oracle AWS RDS for Oracle Azureは正式サポートなし
MariaDB AWS RDS for MariaDB 機能・性能面でやや優位

組織タイプ別推奨

AWS RDS を選ぶべき組織:

  • スタートアップ〜成長企業: Aurora の高性能・低コスト
  • MySQL/PostgreSQL中心: Aurora の圧倒的な性能メリット
  • マルチクラウド戦略: ベンダーロックイン回避
  • 高い技術的自由度: 豊富なエンジン選択肢

Azure Database を選ぶべき組織:

  • Microsoft統合企業: Office 365、Azure AD統合
  • SQL Server移行: Azure Hybrid Benefit活用
  • 大規模データ分析: Azure Synapse統合
  • エンタープライズ: 強固なコンプライアンス

総合判定

結論として、MySQL/PostgreSQLで高性能を求める場合は AWS Aurora、SQL Serverからの移行や Microsoft エコシステムとの統合を重視する場合は Azure Database Services が最適な選択となります。

重要なのは、現在のデータベース環境、アプリケーション要件、チームのスキルセット、そして将来の拡張計画を総合的に評価することです。どちらも非常に成熟したサービスのため、基本的な要件は満たしますが、特定の要件において明確な差別化があります。


次回は、NoSQLデータベースに焦点を当て、AWS DynamoDBとAzure Cosmos DBを比較します。お楽しみに!

参考リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?