Azure Administrator(AZ-104)：Azure管理者向けの前提条件「パラメーターと変数を用いた式(Bicep)」

Microsoft Learnを用いたMicrosoft Azure Administrator(AZ-104)の試験内容をまとめる投稿です。
この投稿ではMicrosoft Learnで学ぶ内容をできるだけ簡潔にまとめております。
Azureの勉強を一から始め、AZ-900取得後の資格としてAZ-104取得を目指している方の参考になれば幸いです。
※AZ-900の内容は本投稿では省略しております。再度復習したい方は下記をご参照ください。
[Azure Fundamentals(AZ-900)：試験合格に向けた学習内容のまとめ](https://qiita.com/fsd-jume/items/e4ec76959adb547ac5e8)

## 今回の学習内容
**◆「パラメーターと変数(Bicep)」**
◇対応するMicrosoft Learn ラーニングパス
[AZ-104:Azure 管理者向けの前提条件](https://learn.microsoft.com/ja-jp/training/paths/az-104-administrator-prerequisites/)
◇まとめとリソース
[Azure Resource Manager テンプレートを使用してリソースを構成する](https://learn.microsoft.com/ja-jp/training/modules/configure-resources-arm-templates/8-summary-resources)
◇対応するモジュール
[パラメーターと変数を使用して柔軟性を高める](https://learn.microsoft.com/ja-jp/training/modules/build-first-bicep-template/5-add-flexibility-parameters-variables)

※前回の投稿は下記から確認できます。
[Azure Administrator(AZ-104)：Azure管理者向けの前提条件「パラメーターと変数(Bicep)」](https://qiita.com/fsd-jume/items/52c2d957028072ed547d)

## パラメーターと変数を用いた式(Bicep)
**式を用いることで様々なシチュエーションで複雑な定義が可能**

### 式を用いたコード例(リソースの場所を指定する)
・リソースグループと同じ場所にすべてのリソース(今回はApp Serviceアプリ)を作成したい場合
```:Bicep
param location string = resourceGroup().location

resource appServiceApp 'Microsoft.Web/sites@2021-03-01' = {
  name: appServiceAppName
  location: location
  properties: {
    serverFarmId: appServicePlan.id
    httpsOnly: true
  }
}
```
**※コードの意味**
**・resourceGroup().location**
リソースグループのリージョンを取得
　-resourceGroup()：リソースがデプロイされているリソースグループの情報を取得する関数
　-.location：リージョン情報を返すプロパティ
**・location: location**
定義した「location」パラメーターを使用

### 式を用いたコード例(リソース名を指定する)
・リソース名は全体で一意である必要があるため、他のユーザが使用していない名前を指定したい場合
→デプロイするサブスクリプションやリソースグループにより、一貫した名前や異なる名前を自動で指定可能
```:Bicep
param storageAccountName string = uniqueString(resourceGroup().id)
```
**※コードの意味**
**・uniqueString(`シード値`)**
シード値に基づいて13文字のハッシュ値を作成
　-resourceGroup().id：リソースグループIDを取得
　　(リソースグループIDはサブスクリプションIDとリソースグループ名が含まれている)
　　⇒サブスクリプションとリソースグループが同じなら常に同じ値が返される
　　⇒サブスクリプションとリソースグループのどちらかが異なれば異なる値が返される
　-ハッシュ値：あるルールのハッシュ関数により、入力データを決められた長さの桁数で返された値

### 式を用いたコード例(文字列の結合)
・リソース名からリソースの内容を判断できるように、意味のある一意の名前を指定したい場合
→意味を表す文字列と一意の名前を組み合わせることで自動で指定可能
```:Bicep
param storageAccountName string = 'toylaunch${uniqueString(resourceGroup().id)}'
```
**※コードの意味**
**・`文字列`$`文字列`**
$の前後の文字列を連結(文字列補間)
今回の場合は「storageAccountName」が「toylaunch`13文字のハッシュ値`」になる

### 式を用いたコード例(リソースSKUを指定する)
・環境によりリソースのSKUを分けて指定したい場合
→パラメーターで指定した環境を基に自動でリソースのSKUを指定可能
　-運用環境(prod)：ストレージアカウント → Standard_GRS、App Serviceプラン → P2v3
　-非運用環境(nonprod)：ストレージアカウント → Standard_LRS、App Serviceプラン → F1
```:Bicep
@allowed([
  'nonprod'
  'prod'
])
param environmentType string

var storageAccountSkuName = (environmentType == 'prod') ? 'Standard_GRS' : 'Standard_LRS'
var appServicePlanSkuName = (environmentType == 'prod') ? 'P2V3' : 'F1'
```
**※コードの意味**
**・allowed([])**
パラメーターに使用できる値を配列で指定するデコレーター
**・`条件` ? `true値` : `false値`**
条件を評価しtrueであれば`true値`を返し、falseであれば`false値`を返す
今回の場合はパラメーター「environmentType」が「prod」であればtrue、それ以外であればfalseとなる
　-environmentType = prodの場合
　　storageAccountSkuName = Standard_GRS、appServicePlanSkuName = P2V3
　-environmentType = nonprodの場合
　　storageAccountSkuName = Standard_LRS、appServicePlanSkuName = F1

## 次の学習内容
**◆モジュールと出力(Bicep)**

https://qiita.com/fsd-jume/items/49dc332f2d697e8259e3

## 学習内容をまとめたページの一覧

https://qiita.com/fsd-jume/items/6eda24728c9c03c36bc3