Bicep Tips - Bicep事始め1（リソースグループの作成）

# 概要
AzureのIaCをするにあたって、Bicepにチャレンジしようと思って、環境構築周りの備忘録。
Bicep自体の説明は他所に譲ります（笑）。

# 環境
・MacBook Air
・Power Shell
・Azure PowerShell
・Visual Studio Code

# 手順
### Power ShellにAzure PowerShellモジュールをインストール
私の環境はMacBookで、こちらに記載した手順でインストールしました。
[MacにAzure PowerShellを入れる](https://qiita.com/yossihard/items/8f3dc952f12d020dc6f8)

### Bicepツールのインストール
Bicepを使うための環境構築手順は、Microsoft Learnの以下のページに記載があります。
[Bicep ツールのインストール](https://learn.microsoft.com/ja-jp/azure/azure-resource-manager/bicep/install&wt.mc_id=AZ-MVP-4028478)

Azure PowerShellを使う場合のBicepツールのインストールについては、Microsoft Learnに手順が記載されています。
[Bicep ツールのインストール - Azure PowerShell](https://learn.microsoft.com/ja-jp/azure/azure-resource-manager/bicep/install#azure-powershell&wt.mc_id=AZ-MVP-4028478)

私の環境はMacBookなので、シェル上で以下のコマンドを実行して、Bicepツールをインストールしました。

```
> brew tap azure/bicep
> brew install bicep
```

### Visual Studio CodeにBicepの拡張機能をインストールする
拡張機能のマーケットプレイスで、Bicepを検索し、インストールをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/69dfcd8c-3924-4ad8-aeee-935339d90f32.png)

インストールが完了すると、「ようこそ」タブが開き、チュートリアルが表示されます。
「Create Bicep file」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/c38d6f30-fd4d-4f7d-aed6-ee23946e8433.png)

任意のフォルダに、拡張子「bicep」のファイルを作るようにします。
ここではデフォルトのmain.bicepを作ってみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/ee1f31e5-7026-4ece-afcb-1807e84198b1.png)

作成したBicepファイルがエディターで表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/47d327db-0d8d-40aa-8957-1714ad0376a3.png)

### リソースグループの作成
Microsoft Learnに、Bicepでリソースグループを作成する手順が記載されています。
→ [Bicep を使用してリソース グループを作成する](https://learn.microsoft.com/ja-jp/azure/azure-resource-manager/bicep/create-resource-group&wt.mc_id=AZ-MVP-4028478)

一旦、ここに記載されているコードをそのままコピペします。

``` main.bicep
targetScope='subscription'

param resourceGroupName string
param resourceGroupLocation string

resource newRG 'Microsoft.Resources/resourceGroups@2024-11-01' = {
  name: resourceGroupName
  location: resourceGroupLocation
}
```
#### スコープ
1行目の「targetScope」で、どこのレベルへのデプロイかを決めるようです。
targetScope='resourceGroup'　・・・　リソースグループ内へのデプロイ（デフォルト）
targetScope='subscription'　・・・　サブスクリプション内へのデプロイ

他にも、管理グループへのデプロイやテナントへのデプロイが設定できますが、説明は割愛。
参考：[デプロイ スコープについて](https://learn.microsoft.com/ja-jp/training/modules/deploy-resources-scopes-bicep/2-understand-deployment-scopes&wt.mc_id=AZ-MVP-4028478)

#### パラメータ
3〜4行目の、先頭に「param」と書かれた行は、（そのまんまですが）パラメーターの定義する行です。
パラメーターは、ここで代入もできるようですが、Bicepファイルを実行するときの引数でも指定できるようです。
→ 後ほど説明

#### リソース
6〜9行目の記載で、作成するリソース（ここではリソースグループ）を指定しています。
リソースの記述の仕方はこんな感じだそうです。

```
resource <symbolic-name> '<full-type-name>@<api-version>' = {
  <resource-properties>
}
```

Microsoft Learnの説明は以下のページです。
[リソースの Bicep を使った宣言](https://learn.microsoft.com/ja-jp/azure/azure-resource-manager/bicep/resource-declaration?tabs=azure-powershell?wt.mc_id=AZ-MVP-4028478)

symbolic-nameは変数名みたいなものでしょうかね。
full-tyoe-nameが作成するリソース、api-versionがリソースを作成するときに使用するAPIのバージョンです。
full-type-nameと、使用できるバージョン番号は、以下のページを開いて、左側のツリーから検索することができます。
[Bicep、ARM テンプレート、Terraform AzAPI プロバイダーを使用してリソースを定義する](https://learn.microsoft.com/ja-jp/azure/templates?wt.mc_id=AZ-MVP-4028478)

検索窓からリソースを検索することもできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/78c4850d-12d8-45ff-8670-c1e8360f401a.png)

resource-propertiesにも様々指定することが可能です。
今回のBicepファイルでは、リソースグループ名とロケーションを指定しています。

#### api-versionの変更
ここでは、リソースグループのAPIバージョンを最新のものに変えておこうと思います。
Visual Studio Codeで、＠以降の文字列を削除し、再度＠を入力すると、
インテリセンスで使用できるapi-versionが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/7ebac23d-92a2-4759-8159-32b076c26cf2.png)


ここまででBicepファイルの作成作業は一旦終了。

### Bicepファイルの実行
Power Shell（Azure PowerShell モジュール導入済み）を使って、Bicepファイルでリソースグループを作成したいと思います。
Power Shellを起動し、カレントディレクトリをBicepファイルのあるフォルダに移動します。
以下のコマンドを実行します。

```
> Connect-AzAccount
> New-AzSubscriptionDeployment -location japanwest -TemplateFile main.bicep -resourceGroupName demoResourceGroup -resourceGroupLocation japanwest
```

１つ目のコマンド（Connect-AzAccount）は、Azureへの接続コマンドです。
ブラウザが起動してくるので、Azureポータルへのログインを行なってください。

実行するとこんな感じで応答が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/82256b68-b2b0-4c1d-bedb-f34fd629ea2e.png)

特段サブスクリプションの指定をしていないので、既定のサブスクリプションでBicepが実行されるのかな？

Azureポータルで、ちゃんとリソースグループが作成されたかを確認。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/da08b716-0f0b-48f8-a66b-f280e54859d9.png)


次回は、リソースグループの中にApp Serviceなどのリソースを作成するところまで、まとめてBicepで書く方法を調べる・・・予定。