Bicepのパラメーターファイルを使ってVPN gatewayをデプロイする

こんにちは。
前回に引き続きBicep の記事です。
前はパラメーターをベタ打ちしてデプロイしました。
Bicep ではテンプレートファイルとは別にパラメーターファイルを作成して、デプロイ時に使用することができます。これによって、デプロイごとにパラメーターを変更することが容易になるというわけです。

今回は、前回とまったく同じVPN gatewayのデプロイを、パラメーターを分離して行う方法を試してみます。
Azure PowerShell を使用します。
## 作業
まず、到達地点としては、Azure PowerShell のコマンドに、作成したテンプレートファイルとパラメーターファイルを渡すことです。[公式DOCはこちら](https://learn.microsoft.com/ja-jp/azure/azure-resource-manager/bicep/deploy-powershell#json-parameters-files)。
```
New-AzResourceGroupDeployment `
-TemplateFile C:\\xxxx
-TemplateParameterFile C:\\xxx
```
TemplateFile にはBicep で書いたテンプレートファイル、TemplateParameterFile には今回作成するJSON パラメーターファイルのパスを入力します。
### 前回の使いまわし
前回のテンプレートファイルを使いまわします。ベタ打ちしたパラメーターはコメントアウトしておきましょう。[前回の記事はこちら](https://qiita.com/dessin/items/61b08502705cbaa32439)。
Bicep では、// や/* */ をコメントアウトに使用することができます。

:::note
１行ごとにコメントアウトしたいときは、// を使うとこれの後ろがコメントアウトされる
まとめてしたいときは/* と*/ で挟んだ部分がコメントアウトされる
:::
前回のテンプレートファイルでいうと、こんな感じになるでしょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3617557/6752decd-ee2b-e434-d5c3-67e2ae62fe6b.png)
デフォルトのサブネットとか仮想マシン、と書いてある部分は今回には無関係ですのでコメントアウトしました。

### パラメーターファイルの作成
さて本題です。
パラメーターファイルはJSON で書きます。テンプレートファイルには10 個のパラメーターがあるので、すべて定義していきます。ベタ打ちしていたパラメーターをキーとバリューとして列挙するだけです。
```
{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "location": {
        "value": "japaneast"
    },
    "publicIPName": {
        "value": "pip-vpngw"
    },
    "publicIpsku":{
        "value": "Standard"
    },
    "VNetName" :{
        "value": "vnet-hub"
    },
    "VNetAddress" :{
        "value": "10.0.0.0/16"
    },
    "gatewaysubnetAddress" :{
        "value": "10.0.255.0/24"
    },
    "vpngwName" :{
        "value": "vpngw"
    },
    "vpngwSKU" :{
        "value": "Vpngw1"
    }
    }
}
```
$schema とか contentVersion の部分は、Azure Resource Manager の窓口の住所のようなものを示していて、デプロイしたいリソースの情報（ポータルでもテンプレートファイルでも）を渡すとよしなにしてくれるものです。たぶん。よく理解していません。

上のファイルの名前を"vpngw.parameters.dev.json"として保存します。

## さあデプロイ
まだリソースグループがデプロイされていないのでポータルで作成してください。（Bicep によるリソースグループのデプロイは、次の次くらいの記事で書く予定です）
あとは流れでお願いします。
```
connect-AzAccount
new-AzResourceGroupDeployment -TemplateFile vpngw.bicep -TemplateParameterFile vpngw.parameters.dev.json
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3617557/d3020a9c-d69a-7de6-cf7b-f682719cdd47.png)
デプロイが進行しています。
例のごとくVPN gateway には時間がかかるのでシャツにアイロンでもかけます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3617557/e12d25ee-b872-20fc-709d-0b89829adce5.png)
デプロイ完了です。5,6 枚くらいですかね

仮想ネットワークがどうなっているか見てみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3617557/2f00d8a0-7f3b-dab8-31d5-59092c5703bf.png)
設定した通りのアドレス空間でサブネットの名前が与えられていますね。うまくいっているようです。

今回は、テンプレートファイルとは別に、パラメーターファイルを用意して、デプロイしました。
お疲れさまでした。





## 出くわしたエラー
> New-AzResourceGroupDeployment: 12:38:59 - Error: Code=ResourceGroupNotFound; Message=Resource group 'bicep-wakeru' could not be found.
New-AzResourceGroupDeployment: The deployment validation failed

サブスクリプションのターゲットが間違っていたことによるエラー
対処するには
```
get-AzSubscription
```
で正しいサブスクリプションのID を見つけて、続いて
```
set-azcontext -subscription [subscription ID]
```
でターゲットを変更します。

---
>New-AzResourceGroupDeployment: 12:44:47 - Error: Code=InvalidTemplate; Message=Deployment template validation failed: 'The following parameters were supplied, but do not correspond to any parameters defined in the template: 'subnetAddress, vpngwAddress, subnetName'. The parameters defined in the template are: 'publicIPName, location, publicIpsku, VNetName, VNetAddress, gatewaysubnetName, gatewaysubnetAddress, vpngwName, vpngwSKU, activeactive'. Please see https://aka.ms/arm-pass-parameter-values for usage details.'.
New-AzResourceGroupDeployment: The deployment validation failed

テンプレートファイルのパラメーターが、パラメーターに見つかりませんというエラー。
コメントアウトしたデフォルトのサブネットにつけるパラメーターを入れたままだった。
他には大文字と小文字が違って認識されなかったとか。
なお、JSON にはコメントアウトがないので消すしかないです。