最小のアドレス空間を持つ VNet 統合サブネットにデプロイできる Azure Database for PostgreSQL フレキシブルサーバーの数

Azure Database for PostgreSQL フレキシブルサーバー は、リソースをデプロイする際に `[ネットワーク]` > `[ネットワーク接続]` > `[接続方法]` で `プライベート アクセス (VNET 統合)` を選ぶことができます。

![The-number-of-Azure-Database-for-PostgreSQL-Flexible-Servers-in-a-smallest-address-space-subnet-with-VNet-Integration_00001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17549/f6a58360-3b31-9a3f-3dea-0aff692feef9.png)

[プライベート アクセス (VNet 統合)](https://docs.microsoft.com/azure/postgresql/flexible-server/concepts-networking#private-access-vnet-integration) を利用すると、フレキシブルサーバーはパブリックなエンドポイントを持たず、プライベートな仮想ネットワーク内に接続を限定することができ、データベースのネットワークをよりセキュアにすることができます。

このとき、サブネットは `Microsoft.DBforPostgreSQL/flexibleServers` に委任されることとなり、Azure Database for PostgreSQL フレキシブルサーバーのみがそのサブネットを使用できるよう管理されます。

ここで、委任されたサブネットについて、[ネットワークの概要 - Azure Database for PostgreSQL - フレキシブル サーバー | Microsoft Docs > 仮想ネットワークの概念](https://docs.microsoft.com/azure/postgresql/flexible-server/concepts-networking#virtual-network-concepts) には以下の様な説明があります。

> サブネットに指定できる最小 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 (本記事執筆時点において)


## 検証環境構築

[操作方法ガイド](https://docs.microsoft.com/ja-jp/azure/postgresql/flexible-server/how-to-manage-virtual-network-portal) に従い、プライベート アクセス (VNet 統合) を構築します。
構築した VNet に対して、新規の委任サブネットを /28 で作成します。

![The-number-of-Azure-Database-for-PostgreSQL-Flexible-Servers-in-a-smallest-address-space-subnet-with-VNet-Integration_00002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17549/8a62edca-4843-3411-371b-5f08bd862325.png)

![The-number-of-Azure-Database-for-PostgreSQL-Flexible-Servers-in-a-smallest-address-space-subnet-with-VNet-Integration_00003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17549/67f34cc9-b1f6-071b-e159-1722268c5063.png)


## 検証

作成した委任サブネットに、ゾーン冗長構成のフレキシブルサーバーを新規デプロイしていきます。

![The-number-of-Azure-Database-for-PostgreSQL-Flexible-Servers-in-a-smallest-address-space-subnet-with-VNet-Integration_00004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17549/72a47ed3-2b31-5934-cd78-7463d7443de6.png)


4台目をデプロイ中に、エラーが発生しました。

![The-number-of-Azure-Database-for-PostgreSQL-Flexible-Servers-in-a-smallest-address-space-subnet-with-VNet-Integration_00005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17549/48fbd931-1746-57fa-c7be-d3440fbc261f.png)

プロビジョニングに失敗しています。

![The-number-of-Azure-Database-for-PostgreSQL-Flexible-Servers-in-a-smallest-address-space-subnet-with-VNet-Integration_00006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17549/53ebe51b-53e6-81d2-437f-4003feb30b6d.png)


```json
{
    "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台デプロイされる場合は、自己責任でお願いします。


## See also

* [ネットワークの概要 - Azure Database for PostgreSQL - フレキシブル サーバー | Microsoft Docs](https://docs.microsoft.com/azure/postgresql/flexible-server/concepts-networking#private-access-vnet-integration)
* [仮想ネットワークを管理する - Azure portal - Azure Database for PostgreSQL - フレキシブル サーバー | Microsoft Docs](https://docs.microsoft.com/ja-jp/azure/postgresql/flexible-server/how-to-manage-virtual-network-portal)