Azure VPN Gateway Basicの構築

# はじめに
弊宅にAzureとのS2S VPN接続をしたいと思ったのですが、最も安価なAzure VPN Gateway Basic SKUの構築はAzureポータルからできず、PowerShellで実施する必要があるので、備忘録として残そうと思います。

基本的にmicrosoftの公式ドキュメントを見ればできるものですが、コードがわかりづらいとか解読したくないという方や調べて分かったAzureの仕様を書こうかと思っています。
なお、AzureポータルのCloudShell実行やリソースグループ、仮想ネットワーク、サブネット作成は割愛しますので、ご了承ください。

 Microsoft公式ドキュメント：[PowerShell を使用して Basic SKU VPN ゲートウェイを作成する](https://learn.microsoft.com/ja-jp/azure/vpn-gateway/create-gateway-basic-sku-powershell)

https://learn.microsoft.com/ja-jp/azure/vpn-gateway/create-gateway-basic-sku-powershell

# 目標

#### Azure 仮想ネットワークゲートウェイ(VPNゲートウェイ)のBasic SKUを構築する。

※S2S接続に関しては別記事で書きます。

# 今回わかったAzureの仕様

* Basic SKUパブリックIPは2025/09/30に廃止される
* Basic SKU 仮想ネットワークゲートウェイは本稿執筆時点ではBasic SKUパブリックIPしかサポートしていない
* Standard SKUパブリックIPがBasic SKU 仮想ネットワークゲートウェイで利用できるようにMicrosoftは対応を進めているところ
* Basic SKUパブリックIPが廃止になるだけで、Basic SKU 仮想ネットワークゲートウェイは今後も残る（調べると勘違いされている方がいるみたいです）
* Basic SKU 仮想ネットワークゲートウェイでもサイト間接続は可能

# 事前作業
## 命名規則
この操作では以下のリソースの名前を作成する必要があります。
あらかじめ決めておくと作業がスムーズになります。
もし命名にこだわりがない場合は、Microsoftから名前付け規則の定義が出ていますので、マネするのがよいかと思います。
今回はMicrosoftの名前付け定義を参考にしています。

https://learn.microsoft.com/ja-jp/azure/cloud-adoption-framework/ready/azure-best-practices/resource-naming

名前付けが必要なリソース
* リソースグループ
* 仮想ネットワーク（VNET）
* パブリックIP
* VPNゲートウェイ

# 手順
## リソースグループを作成する

Azureポータルで作成できます。
今回は（rg-hub-prod-eastjp-001）で作成

## 仮想ネットワークの作成

Azureポータルで作成できます。
今回は(vnet-hub-prod-eastjp-001)で作成

## ゲートウェイサブネットの追加

Azureポータルで作成できます。
名前はGatewaySubnetにする必要があります。

## パブリックIPアドレスの作成

Azureポータルで作成できますが、今回は後の仮想ネットワークゲートウェイ（VPNゲートウェイ）作成の時に楽になるので、PowerShellで作成します。

### コマンド

~~~shell
$gwpip = New-AzPublicIpAddress -Name "pip-vpngw-prod-japaneast-001" -ResourceGroupName "rg-hub-prod-eastjp-001" -Location "JapanEast" -AllocationMethod Dynamic -Sku Basic
~~~

### コマンド解説

##### $gwpip

変数の設定です。

##### New-AzPublicIpAddress

新しいパブリックIPアドレスを作成するという宣言です。

##### -Name "pip-vpngw-prod-japaneast-001"

パブリックIPアドレスのリソース名を指定しています。

##### -ResourceGroupName "rg-hub-prod-eastjp-001"

パブリックIPアドレスのリソースを紐付けるリソースグループを指定しています。

##### -Location "JapanEast"

パブリックIPアドレスのリソースを作成するリージョンを指定しています。今回はJapanEastなので東京リージョンです。

##### -AllocationMethod Dynamic

パブリックIPアドレスを静的にするか動的にするかを指定します。
S2S接続をするなら静的の方がいいのですが、Basic SKU VPNゲートウェイはDynamicにしか対応していないため、Dynamicを指定します。

##### -Sku Basic

パブリックIPアドレスのSKUを指定します。
Basicは2025/09/30に廃止されますが、現在Basic SKUのVPNゲートウェイを作成する場合はBasic SKUパブリックIPにしか対応していないため、Basicに設定します。
公式ドキュメントによると現在はBasic SKUパブリックIPにしか対応していないですが、Standard SKUパブリックIPへの対応を進めているとのことです。

## ゲートウェイIPアドレス構成の作成

VPNゲートウェイに設定するIPアドレスの構成を作成します。

### コマンド

~~~shell
$vnet = Get-AzVirtualNetwork -Name vnet-hub-prod-eastjp-001 -ResourceGroupName rg-hub-prod-eastjp-001
$subnet = Get-AzVirtualNetworkSubnetConfig -Name 'GatewaySubnet' -VirtualNetwork $vnet
$gwipconfig = New-AzVirtualNetworkGatewayIpConfig -Name gwipconfig -SubnetId $subnet.Id -PublicIpAddressId $gwpip.Id
~~~

### コマンド解説
##### $vnet
変数の設定です。
##### Get-AzVirtualNetwork
リソース グループ内の仮想ネットワーク(VNET)の情報を取得するコマンドです。
##### -Name vnet-hub-prod-eastjp-001
情報を取得するVNET名を指定します。
作成済みのものでないと取得できません。
##### -ResourceGroupName rg-hub-prod-eastjp-001
VNETが属するリソース グループの名前を指定します。

##### $subnet
変数の設定です。
##### Get-AzVirtualNetworkSubnetConfig
VNET内のサブネット情報を取得します。
##### -Name 'GatewaySubnet'
情報を取得するサブネットの名前を指定します。
##### -VirtualNetwork $vnet
情報を取得するサブネット構成が所属するVNETを指定します。今回は前段でVNETの情報を取得しているため、変数($vnet)を指定します。

##### $gwipconfig
変数の設定です。
##### New-AzVirtualNetworkGatewayIpConfig
仮想ネットワーク ゲートウェイ(VPNゲートウェイ)の IP 構成を作成します
##### -Name gwipconfig
公式ドキュメントにも解説がないのですが、IP構成の構成名を入れるのだと思います。
##### -SubnetId $subnet.Id
VPNゲートウェイに設定するサブネットIDを指定します。
今回は前段でサブネットの情報を取得しているため、変数($subnet.ID)を指定します。
##### -PublicIpAddressId $gwpip.Id
VPNゲートウェイに設定するパブリックIPアドレスを指定します。
今回はパブリックIPアドレス作成の時に作成したパブリックIPアドレスの情報を変数($gwpip)に格納しているため、ここでも変数を指定します。

## VPNゲートウェイを作成する
VPNゲートウェイを作成します。
今回はSKUをBasicに指定しています。

### コマンド
~~~shell
New-AzVirtualNetworkGateway -Name vgw-prod-japaneast-001 -ResourceGroupName rg-hub-prod-eastjp-001 -Location "JapanEast" -IpConfigurations $gwipconfig -GatewayType "Vpn" -VpnType "RouteBased" -GatewaySku Basic
~~~

### コマンド解説

##### New-AzVirtualNetworkGateway

新しい仮想ネットワークゲートウェイ(VPNゲートウェイ)を作成するコマンドです。

##### -Name vgw-prod-japaneast-001

VPNゲートウェイの名前を指定します。

##### -ResourceGroupName rg-hub-prod-eastjp-001

所属するリソースグループを指定します。

##### -Location "JapanEast"

デプロイするリージョンを指定します。

##### -IpConfigurations $gwipconfig

利用するパブリックIPアドレスなどのネットワーク情報を指定します。
前段で変数($gwipconfig)に値を入れているため、今回は変数を指定します。

##### -GatewayType "Vpn"

ゲートウェイのタイプを指定します。

##### -VpnType "RouteBased"

ポリシーベースかルートベースのどちらかを指定します。
Basic SKUの場合はルートベースのみになります。

##### -GatewaySku Basic

SKUを指定します。
今回はBasicに指定します。

## 作成が完了するまで待つ

コマンドであっても少し時間がかかります。
Azureポータルの通知で作成完了がわかるはずです。

# 事後確認

指定したとおりにVPNゲートウェイが作成できているかを確認します。
以下のコマンドで内容が正しければ問題ありません。

### コマンド
~~~shell
Get-AzVirtualNetworkGateway -Name vgw-prod-japaneast-001 -ResourceGroup rg-hub-prod-eastjp-001
~~~

### 実行結果
~~~shell
ResourceGroupName      Name                   Location  GatewayType VpnType    EnableBgp DisableIPsecProtection EnablePrivateIpAddress ActiveActive ProvisioningState Sku Name ExtendedLocation VNetExtendedLocationResourceId EnableBgpRou
                                                                                                                                                                                                                               teTranslatio
                                                                                                                                                                                                                               nForNat
-----------------      ----                   --------  ----------- -------    --------- ---------------------- ---------------------- ------------ ----------------- -------- ---------------- ------------------------------ ------------
rg-hub-prod-eastjp-001 vgw-prod-japaneast-001 japaneast Vpn         RouteBased False     False                  False                  False        Succeeded         Basic                                                    False
~~~