bicep の what-if を GUI で試す！

こんにちは、アーキテクトのやまぱんです。

補足コメントや質問、<font color="red">**いいね、拡散**</font>、是非お願いします🥺！
間違ってたら<font color="red">**優しく**</font>教えてください！

今回は Azure の IaC ツールである Bicep の What-if を GUI (VScode) で試してみました！
簡単に VScode から実施できて非常に便利です！

:::note info
Bicep の What-if とは、デプロイする前に同様な影響があるかを表示してくれる機能です。
いわゆる、ドライラン的な機能で、Terraform でいうところの plan です。
:::

:::note warn
この記事執筆時点では、GA (一般提供) されていない機能です。 
:::


# 動機
拡張機能を入れてれば、 VScode から bicep のデプロイはできるけど、What-if って GUI で出来るんだっけ？
という会話が某所で巻き起こったのが発端です。


# そもそも、コマンドでやるには？
下記のコマンドで実行することが可能です。

```bash:Azure CLI 
az deployment group what-if --resource-group (デプロイするリソースグループ) --template-file (bicepファイル)
```

[こちらのかたの記事](https://qiita.com/ShogoMatsumoto/items/a66234b27ee29a2f4c08#%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4%E5%89%8D%E3%81%AE%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF)で書かれているのが参考になるかと思います。


+ Bicep デプロイの What-If 操作 - MS Learn

https://learn.microsoft.com/ja-jp/azure/azure-resource-manager/bicep/deploy-what-if?tabs=azure-powershell%2CCLI

# GUI で What-if してみる (リソースグループ新規作成編)
さっそくやってみましょう、まずは新しいリソースグループで実施してみます。
前提として、 vscode と vscode にbicep 拡張機能、および Azure の Subscription があることです。
普通に bicep を利用している方であればこれらの環境は揃っていると思います。

+ [Using the Deployment Pane (Experimental - Azure/bicep(Github)](https://github.com/Azure/bicep/blob/main/docs/experimental/deploy-ui.md )

https://github.com/Azure/bicep/blob/main/docs/experimental/deploy-ui.md 

## 手順
+ bicepファイル(.bicep) を VScode 上で右クリック → ”Show Deployment Pane” 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/5718895e-93c1-42a6-81c4-e47a5bf31378.png)

### Pick Scope / Pick JSON Parameter File を設定します
+ Pick Scope / Pick JSON Parameter File を設定します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/ff3bfd7b-4a2e-3885-949c-9a131ae5c358.png)

+ Pick Scope 
Pick Scope を押すと、Subscription の指定、リソースグループの指定ができる
(VScode からデプロイする場合と同じような感じです)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/26e597ee-00e7-7ed8-edf5-dda7a996180b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/0b72b8da-998d-af16-8db2-d857783d9d13.png)

今回は新しいリソースグループを作ります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/346fd38c-9abd-bd4b-ab61-94cd1c1a75e3.png)

この時点で新しいリソースグループが作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/2da791af-f168-d7de-952b-2dcf9fb3bf1e.png)

こんな画面になります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/aa95dde5-0933-1861-8822-77185bb367c4.png)

+ Pick JSON parameterFile
こちらから JSON 形式のパラメータファイルを指定します。
またここで **直接 パラメータの値を入れることも可能です**。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/151723ca-08f2-b2cb-574c-3db0d43dff7a.png)

こんな画面になります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/284e4b42-1626-6f97-9236-e51c1290dfcd.png)

### What-if の実施
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/e1bd14a2-724d-5358-d07b-0ede1dc62b90.png)

### 結果
新規デプロイなので こんな風にすべてのリソースが Create で見えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/ba4b1a61-deaa-acf9-be3d-dc1e99da1d6c.png)

:::note
Create があることが分かります。
:::



# GUI で What-if してみる (既存リソースグループ編)
こちらの手順はリソースグループ新規作成編 と同じなので省略して、結果のみです。
ちなみに、すでに作成予定のリソースがあったりした場合は以下のよう結果になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/8c01e58c-6e12-1ef8-7fe8-a225ee7ccf16.png)

:::note
Create / Nochange / Modify の種類があることが分かります。
:::

## 今回使った bicep ファイルと パラメータファイル
参考までにこちらが今回使った bicep ファイルです。

https://github.com/aktsmm/Iac/tree/main/01_2Vnet-2VM


## 参考になりそうな記事たち

https://qiita.com/ShogoMatsumoto/items/a66234b27ee29a2f4c08

https://zenn.dev/microsoft/articles/guidance-for-migrate-to-bicep

https://github.com/Azure/bicep/blob/main/docs/experimental/deploy-ui.md

https://azure.microsoft.com/ja-jp/products/visual-studio-code

https://learn.microsoft.com/ja-jp/azure/azure-resource-manager/bicep/deploy-what-if?tabs=azure-powershell%2CCLI