Azure Virtual Network Manager の ルーティング構成 を試す!!

こんにちは、アーキテクトのやまぱんです。
補足コメントや質問、<font color="red">**いいね、拡散**</font>、是非お願いします🥺！
間違ってたら<font color="red">**優しく**</font>教えてください！


## モチベーション
Azure Virtual Network Manager (以下、AVNM) のルーティング規則って
『有事の際 (具体的には `オンプレ - Azure 間` でExpressRoute と VPN なり複数のプライべート接続が構成されている場合にいずれかの経路が不通となった際) にバックアップ回線として生きている経路に通信を寄せるようなことできるのかな？？？(-ω-;)』 
という疑問がわいたので検証してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/82804fc6-1f1e-f5ab-ba5f-0f1a8ce8744b.png)
ちなみに AVNM のアイコンはこちら↑



## そもそも Azure Virtual Network Manager とは
本題にはいる前に、Azure Virtual Network Manager について簡単にご紹介します。
Azure Virtual Network Manager（AVNM）は、Azure内の仮想ネットワーク（VNet）を一元的に管理し、複数のサブスクリプションやリージョンにまたがるネットワークのグループ化、構成、デプロイ、および管理を可能にするサービスです。 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/f3f3caeb-a866-d720-c655-67b2df1f6c02.png)
Azure Portal はこんな感じの画面↑

VNet をグループ化して、そのネットワークのグループ にそれぞれの構成をデプロイするイメージになります。
具体的には以下のような機能があります。
まず以下の 3 つは、AVNM → [構成] から作成することができます。
+ **接続構成(Connectivity configuration)** : 仮想ネットワーク間の接続方法を定義し、ハブ＆スポーク型やメッシュ型のトポロジを自動的に適用する機能。複数の VNet 間で接続を管理する際に便利。
+ **セキュリティ管理構成 (Security admin)**: 
各ネットワークに共通で適用するセキュリティ ポリシーを定義し、ネットワーク セキュリティ グループ（NSG）やファイアウォールの設定を一元管理する機能。セキュリティポリシーの徹底と標準化に役立ちます。
+ **ルーティング構成 (user-defined routes management)**: 
特定のトラフィックが通る経路を制御するためのルーティング ポリシーを設定する機能。強制トンネリングやインターネット接続の制御などに利用される。

https://learn.microsoft.com/ja-jp/azure/virtual-network-manager/concept-connectivity-configuration

https://learn.microsoft.com/ja-jp/azure/virtual-network-manager/concept-security-admins

https://learn.microsoft.com/ja-jp/azure/virtual-network-manager/concept-user-defined-route

また以下は執筆時 (2025/02/03) 現在ではプレビュー表記として存在しています。
+ **IP アドレス管理 (IPAM)**:  
Azure内でIPアドレス空間をポリシーとして一元管理し、アドレスの重複や競合を防止する機能。
+ **仮想ネットワーク検証ツール (Virtual Network Verifier)**: 
VM間の接続性をネットワーク ポリシーに基づいて検証し、到達可能性を分析するツール。

https://learn.microsoft.com/ja-jp/azure/virtual-network-manager/how-to-manage-ip-addresses-network-manager?tabs=azureportal

https://learn.microsoft.com/ja-jp/azure/virtual-network-manager/how-to-verify-reachability-with-virtual-network-verifier


## とりあえずルーティング構成を試す
本題に入ります。
+ AVNM のルーティング構成 を作成する。
こんなかんじです。対象とするネットワークグループを指定し、通常の UDR のように記載することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/023b3bc3-e796-e183-e8a2-7242a9d3633d.png)


### デプロイする
+ デプロイする
以下のように先ほど作ったルーティング構成を選択し、リージョンも選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/69011a71-492d-2cfa-4af8-dee297468e2e.png)

では、AVNM をデプロイした後のルートテーブルを確認してみましょう。

以下はデプロイした後の画面ショットです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/83afec19-3af1-87a9-4a13-fda0611fc323.png)


#### 既存の UDR が**紐づいていない**場合

`ルートテーブル：AVNM_Managed_BD0FAE688A294FE49084630103413536` が関連付けられ、有効なルートには先ほど設定した、ルーティング規則の接頭辞として `AVNM_Managed_` がついたルートが追加されていることがわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/70546110-42c8-90da-902e-2a4c17b13eb8.png)

ちなみにこの `ルートテーブル：AVNM_Managed_BD0FAE688A294FE49084630103413536` は AVNM 専用のマネージドなリソースグループ (`AVNM_Managed_ResourceGroup_"SubscriptionID"`)に存在します。マネージドな通常のルートテーブルリソースが存在しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/943f72d9-c00b-ebd1-349a-57d46c734757.png)




####  既存の UDR が**紐づいている場合**
結果としては以下のようになりました。
黄色のハイライト部分が Azure Virtual Network Manager によるルートで、青色ハイライト部分が既存の UDR で設定していたルートになります。
ただし、見ての通り、**既存の UDR の関連付けは切れた状態**になっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/71efa5cd-fd5a-89b9-ebfa-7c5b6cfde074.png)



::: note 
残ってるのは ロンゲストマッチ的に強い ルートだけが残っていて、AVNMがロンゲストマッチでかってるやつはAVNMになってる（なお、**同じプレフィックス長だと既存のUDRが勝ってる**）
:::

でもそもそもルートテーブル 2 つ紐づいてないのになんで残ってんだ!!😅って思いました。
でもこれは以下のドキュメントに書かれています。
既存のUDRが関連付けられてる場合はそれとマージしてよしなに新しいルートテーブルを AVNM はつくるようです。

> 既存の UDR を含むルート テーブルが存在する場合、デプロイされたルーティング構成に基づいて、**既存のルートと新しいルートの両方を含む新しいマネージド ルート テーブルが Azure Virtual Network Manager によって作成**されます。
> + ルートとルート テーブルへの UDR 管理の影響 - MS Learn
https://learn.microsoft.com/ja-jp/azure/virtual-network-manager/concept-user-defined-route#impact-of-udr-management-on-routes-and-route-tables

### アンデプロイする 
以下からアンデプロイ(デプロイの削除)が可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/42f86fc4-7270-8697-5336-35c7d129d433.png)

見てわかる通り、アンデプロイもデプロイの画面と同じで`既存のルーティング構成を削除します`を選択することでアンデプロイになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/98667b44-30ee-85a4-30d8-f3e378f5e88a.png)

####  既存の UDR が**紐づいていない場合**
既存の UDR が紐づいていない場合は以下のようにデフォルトのルート構成になりました。
*下部省略
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/38a6ae5b-489c-c537-575f-6e3e0d641bd8.png)


####  既存の UDR が**紐づいている場合**
以下のように AVNM のルートが消えた新しいルートテーブル `AVNM_Managed_D72F1C994D1F48BE80F794E8C40FAB15` が AVNM によってつくられ、それが関連付けられています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/edfad2f3-b79b-36b3-f8fe-ba692aa99229.png)
青色ハイライト部分は AVNM をデプロイする前に既存の UDR で設定していた内容の一部になります。
AVNMをデプロイした際に優先度が AVNM より高かった既存の UDR のルートのみが残っている。**AVNM より優先度が低かったルートは AVNM デプロイ時に消えてしまうので、アンデプロイをしても元に戻るわけではない。**

:::note info
もとに戻すためには手動で AVNM によってつくられたルートテーブル をの関連付けを解除することも可能
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/093adbf8-3469-ebf7-3b46-73fa0159f676.png)
そうすることで元々の UDR のルートテーブルを関連付けることが可能。

ただし、AVNM の管理下にあるので、できれば AVNM の管理下 (NWグループ) から外して、既存の UDR を再度関連付けた方が気持ちいい。
せっかくAVNMによってルートテーブルを自動構成して一元管理しているのに一部のサブネットだけ手動でルートテーブルを管理する(UDR)って運用上よくないきがします。自動化できるものは自動化しましょう！
:::


### まとめ
今回の検証で、Azure Virtual Network Manager（AVNM）のルーティング規則が便利か感じられました！
また具体的な適応の参考になる部分もあったかなーと思います。
ロンゲストマッチによる制御がしっかり効いているところも知見でしたね 👀✨

**現状だと、既存の UDR とAVNMによるルートがあった際に、同じプレフィックス長だと既存の UDR が優先されるので、個人的には同じプレフィックス長だった際に AVNM のルールを優先する**ようなオプションがあるといいなと思いました。

これをうまく使いこなせば、VNet がたくさんある環境でも設定ミスによるトラブルも減りそうです！
何より、ルートテーブルがAzure Virtual Network Manager によりマネージドリソースとして管理されているおかげで、いちいち手動で修正しなくてもいいのが楽ちんですね 🎉

これからも AVNMを使いこなして、もっと快適で安心なネットワーク構成を作れるように、どんどん検証を進めていきますよ～！💪🚀