跳到主要内容

Azure SQL Database vs Managed Instance

Azureには、SQL Serverエンジンをベースとした複数のデータベースサービスが存在します。その中でも主要なPaaS(Platform as a Service)であるAzure SQL Databaseと**Azure SQL Managed Instance (SQL MI)**の違いについて解説します。

概要

Azure SQL Database

最新の安定したSQL Serverバージョンで動作する、フルマネージドなデータベースサービスです。OSやインスタンスの管理から解放され、データベース単体(またはエラスティックプール)として管理します。クラウドネイティブなアプリケーション開発に最適です。

Azure SQL Managed Instance

オンプレミスのSQL Serverとほぼ100%の互換性を持つフルマネージドインスタンスです。VNet(仮想ネットワーク)内にデプロイされ、プライベートIPを持ちます。既存のSQL Serverからの「リフト&シフト(移行)」に最適です。

機能比較表

機能Azure SQL DatabaseAzure SQL Managed Instance
デプロイモデルデータベース単位 (Single Database / Elastic Pool)インスタンス単位 (Instance)
SQL Server互換性高い (一部機能制限あり)ほぼ100% (オンプレミス同等)
ネットワークパブリックエンドポイント (ファイアウォール制御)、Private LinkVNet統合 (VNet Injection) が必須
SQL Server Agent非対応 (Elastic Jobsで代替)対応
クロスデータベースクエリ非対応 (Elastic Queryで代替)対応
リンクサーバー制限あり対応 (SQL Server, Azure SQL DB, MI等)
CLR (共通言語ランタイム)非対応対応
バックアップ/リストア自動バックアップ、ポイントインタイムリストア (.bacpac)ネイティブバックアップ/リストア (.bak) 対応
タイムゾーン設定UTC固定変更可能
マシンラーニング非対応Machine Learning Services 対応

主な違いの詳細

1. アーキテクチャと管理スコープ

  • SQL Database: 「データベース」が管理の単位です。物理的なサーバーやインスタンスの概念は抽象化されています。
  • Managed Instance: 「インスタンス」が管理の単位です。SQL Serverのエージェントジョブやログイン、サーバーレベルの構成など、インスタンス全体に関わる機能が利用できます。

2. ネットワーク構成

  • SQL Database: デフォルトではパブリックエンドポイントを持ちますが、ファイアウォールルールでアクセス元を制限します。Private Linkを使用することでVNet内からプライベートIPで接続することも可能です。
  • Managed Instance: 仮想ネットワーク(VNet)内の専用サブネットにデプロイされます(VNet Injection)。デフォルトでプライベートIPを持ち、セキュアな閉域網接続が前提となります。

3. 移行の容易性 (Lift & Shift)

  • SQL Database: オンプレミスで使用していた機能(クロスデータベースクエリ、SQL Agent、CLRなど)が使えない場合があり、アプリケーションの改修が必要になることがあります。
  • Managed Instance: オンプレミスのSQL Serverと高い互換性があるため、アプリケーションコードの変更を最小限に抑えて移行(リフト&シフト)することが可能です。ネイティブバックアップファイル(.bak)からのリストアもサポートしています。

選定の指針

Azure SQL Database を選ぶべきケース

  • 新規にクラウドネイティブなアプリケーションを開発する場合
  • 管理コストを最小限に抑えたい場合
  • データベース単位でのスケーリングや課金が要件に合う場合
  • サーバーレス(Serverless)コンピュート層を利用して、使用頻度の低いDBのコストを最適化したい場合

Azure SQL Managed Instance を選ぶべきケース

  • オンプレミスのSQL Serverから既存アプリケーションをそのまま移行したい場合
  • SQL Server Agent、クロスデータベースクエリ、CLR、Service Brokerなどのインスタンスレベルの機能が必要な場合
  • VNet内での完全なネットワーク分離が要件となる場合
  • リンクサーバーを使用して他のデータソースと連携する必要がある場合