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 Database | Azure SQL Managed Instance |
|---|---|---|
| デプロイモデル | データベース単位 (Single Database / Elastic Pool) | インスタンス単位 (Instance) |
| SQL Server互換性 | 高い (一部機能制限あり) | ほぼ100% (オンプレミス同等) |
| ネットワーク | パブリックエンドポイント (ファイアウォール制御)、Private Link | VNet統合 (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内での完全なネットワーク分離が要件となる場合
- リンクサーバーを使用して他のデータソースと連携する必要がある場合