【Azure】Bicepを用いて環境を切り替えながらストレージアカウントをデプロイする

# 1. はじめに
### 1-1 ご挨拶
初めまして、井村と申します。
今更ですが Azure リソースをデプロイするドメイン固有言語 (DSL) であるBicepが使いやすいそうです。その為、mslearnを用いて勉強をしてみました。本番環境と開発環境へAzureサービスをリリースする際に、Azureサービスのスペックを切り替えるBicepテンプレートを作成します。

### 1-2 対象読者
- Azureに興味がある
- Bicepに興味がある


### 1-3 成果物
Bicepテンプレートを作成し、成果物としては下図の通りストレージアカウントを作成します。ポイントは２点です。
・リソースグループと同様のロケーションで作成
・本番環境はゾーン冗長、開発環境はローカル冗長で作成

<img width="400" alt="構成図.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1989465/1fc859f8-d80d-a0fe-2b6b-b65fb746202a.png">

※事前にAzureアカウントは作成済みです。Azure CLI、Bicepはインストール済みです。

# 2. 構築
それでは、構築始めます。リソースグループはAzure CLIで作成します。
### 2-1 リソースグループの作成

```bash:bash
# Azureへログイン
az login

#変数宣言
myResourceGroupDev=dev-rg
myResourceGroupPro=pro-rg

locationDev=japanwest
locationPro=japaneast

# 開発環境リソースグループの作成
az group create -l $locationDev -n $myResourceGroupDev

# 本番環境リソースグループの作成
az group create -l $locationPro -n $myResourceGroupPro
```
上記を実行して東日本リージョン(本番環境)、西日本リージョン(開発環境)それぞれにリソースグループを作成します。
続いてストレージアカウントを作成するBicepテンプレートになります。

### 2-2 Bicepテンプレートの作成
以下がBicepテンプレートになります。Bicepテンプレートを作成するときは、Visual Studio CodeにBicep拡張機能をインストールして作成するのが便利です。

![Bicepテンプレート.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1989465/8d69e70a-f9d7-2f60-de10-b0276cb83c0a.png)


上記Bicepテンプレート少し解説します。
2行目のallowedで本番環境なら'pro'、開発環境なら'dev'を選択します。Bicepテンプレートをデプロイする際に指定します。
9行目の'resourceGroup()'関数にてリソースグループのロケーションを取得します。
15行目はif文みたいなものです。2行目で'pro'を指定した場合、'Standard_ZRS'が選択されます。これがゾーン冗長になります。
18行目以下がストレージアカウントの設定になります。上記指定したパラメータ、変数を代入しています。

コピーされる方は以下にテンプレートを折りたたんでいます。

<details>
<summary>元のBicepテンプレート</summary>
<pre>
<code>

```
@description('Bash実行時に本番環境または開発環境を選択する')
@allowed([
  'pro'
  'dev'
])
param environmentType string

@description('リージョンはリソースグループに依存する')
param location string = resourceGroup().location

@description('ストレージアカウントの名前。 環境 + st + tkimura')
param storageAccountName string = '${environmentType}sttkimura'

@description('本番環境はゾーン冗長、開発環境はローカル冗長')
var storageAccountSkuName = (environmentType == 'pro') ? 'Standard_ZRS' : 'Standard_LRS'

@description('ストレージアカウント生成')
resource storageAccount 'Microsoft.Storage/storageAccounts@2022-05-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: storageAccountSkuName
  }
  kind: 'StorageV2'
  properties: {
    accessTier: 'Hot'
  }
}
```

</code>
</pre>
</details>

### 2-3 ストレージアカウントをデプロイ
以下コマンドをbashで実行します。

```bash:bash
# Azureへログイン
az login

#変数宣言
myResourceGroupDev=dev-rg
myResourceGroupPro=pro-rg

# 開発環境でのストレージアカウント作成
az deployment group create --resource-group $myResourceGroupDev --template-file main.bicep --parameters environmentType=dev

# 本番環境でのストレージアカウント作成
az deployment group create --resource-group $myResourceGroupPro --template-file main.bicep --parameters environmentType=pro
```
上記コマンドにて'--parameters'の引数はBicepテンプレートで2行目で指定する'pro'か'dev'に該当します。

# 3. 確認
### 3-1 開発環境のリソースグループ

![dev-rg.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1989465/7ffe1bc1-752c-423a-a4be-76b629593f11.jpeg)

場所は西日本リージョンで作成されてますね。

### 3-2 開発環境のストレージアカウント

![dev-st.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1989465/5258825e-4ef2-bf6d-70a3-7d8a1fe88664.jpeg)

場所は西日本リージョン、レプリケーションはローカル冗長(LRS)で作成されてますね。

### 3-3 本番環境のリソースグループ

![pro-rg.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1989465/849bbb67-623e-f33b-4142-a352fccc1794.jpeg)

場所は東日本リージョンで作成されてますね。

### 3-4 本番環境のストレージアカウント

![pro-st.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1989465/daf2d7ba-8aa7-eae9-4d79-fae5b4c0f916.jpeg)

場所は東日本リージョン、レプリケーションはゾーン冗長(ZRS)で作成されてますね。

# 4. おわりに
本記事を最後まで読んで頂きましてありがとうございます。
初めてBicepを触りましたが、ARMテンプレートをごりごり操作するより、
だいぶ使いやすい印象でした。しばらく勉強しようと思います。


# 5. 参考記事
-  [Bicep ツールのインストール](https://learn.microsoft.com/ja-jp/azure/azure-resource-manager/bicep/install)
-  [初めての Bicep テンプレートを作成する](https://learn.microsoft.com/ja-jp/training/modules/build-first-bicep-template/)