Azure Database for PostgreSQL フレキシブルサーバー は、リソースをデプロイする際に [ネットワーク]
> [ネットワーク接続]
> [接続方法]
で プライベート アクセス (VNET 統合)
を選ぶことができます。
プライベート アクセス (VNet 統合) を利用すると、フレキシブルサーバーはパブリックなエンドポイントを持たず、プライベートな仮想ネットワーク内に接続を限定することができ、データベースのネットワークをよりセキュアにすることができます。
このとき、サブネットは Microsoft.DBforPostgreSQL/flexibleServers
に委任されることとなり、Azure Database for PostgreSQL フレキシブルサーバーのみがそのサブネットを使用できるよう管理されます。
ここで、委任されたサブネットについて、ネットワークの概要 - Azure Database for PostgreSQL - フレキシブル サーバー | Microsoft Docs > 仮想ネットワークの概念 には以下の様な説明があります。
サブネットに指定できる最小 CIDR 範囲は /28 で 14 個の IP アドレスが得られますが、ネットワークまたはサブネット内の最初と最後のアドレスは、個々のホストに割り当てることができません。 5 つの IP は、Azure ネットワークで内部的に利用するために予約されています。ホストに割り当てることのできない前述の 2 つの IP もそこに含まれます。 その結果、/28 の CIDR 範囲で使用可能な IP アドレスは 11 個残りますが、高可用性機能を備えた 1 つのフレキシブル サーバーでは 4 つのアドレスが使用されます。
すなわち、 VNet 統合 において、サブネットの CIDR 範囲が最小の /28 である場合、フレキシブルサーバーが使用できる IP アドレスは 11 個であり、ゾーン冗長構成のフレキシブルサーバー 1台が使用する IP アドレスは 4つであるということです。
単純計算で、この場合にサブネット内にデプロイできるゾーン冗長構成のフレキシブルサーバーの数は 2 ということになりますが、実際に検証して確認を行いました。
結論
3 (本記事執筆時点において)
検証環境構築
操作方法ガイド に従い、プライベート アクセス (VNet 統合) を構築します。
構築した VNet に対して、新規の委任サブネットを /28 で作成します。
検証
作成した委任サブネットに、ゾーン冗長構成のフレキシブルサーバーを新規デプロイしていきます。
4台目をデプロイ中に、エラーが発生しました。
プロビジョニングに失敗しています。
{
"status": "Failed",
"error": {
"code": "ServerGroupDropping",
"message": "Operations on a server group in dropping state are not allowed."
}
}
したがって、/28 の委任サブネットにデプロイできる Azure Database for PostgreSQL フレキシブルサーバーは、 3台ということになります。
時間が経ったらいずれかのサーバーに問題が発生する(委任サブネットとの紐付けが解除される等)というのも想定していたのですが、6時間以上経っても、午前0時(但しJST)をまたいでも、問題は起きていません。
まとめ
- 最小のアドレス空間を持つ VNet 統合サブネットにデプロイできる Azure Database for PostgreSQL フレキシブルサーバーの数は 3 であることがわかりました。
- 公式ドキュメントの説明からすると 3台目でデプロイ失敗することが予想されましたが、3台目のデプロイは成功し、4台目で失敗しました。
- 3台デプロイできるものの、やはり公式ドキュメントの説明からすると委任サブネット内の IP アドレスが足りていないはずですので、おすすめはできません。
- あるいは「高可用性機能を備えた 1 つのフレキシブル サーバーでは 4 つのアドレスが使用されます」という公式の説明が正しくない可能性も考えられますが、真相は不明です。
- 公式ドキュメントの説明に反して 3台デプロイされる場合は、自己責任でお願いします。