JavaScriptを有効にしてください

ARM テンプレートとBicep 02

 ·   5 分で読めます  ·   Kento

ARM テンプレートと Bicep の記事の続編です
今回は, 前回の記事で紹介したサンプルを使ってデプロイ方法の比較をしてみたいと思います
前回の記事はこちら

ARM テンプレートとBicep 01 – クラウドを勉強し隊

目次での比較

公開情報で整理されているデプロイ方法を比較します
ARM テンプレートも Bicep も 参照するファイル (Json または Bicep) が必要です
そして, それらのファイルをデプロイするツールを比較します

ARM テンプレートのデプロイ方法

ARM テンプレートのデプロイ方法は公開情報の目次を見ると以下の方法があるようです

  • Azure Portal
  • Azure CLI
  • Azure PowerShell
  • Python
  • REST API
  • Cloud Shell
  • Azure デプロイボタン
docs01
ARM テンプレートの公開情報のスクリーンショット:

※上記の公開情報のスクショにはありませんが, CI/CD のソリューションも連携可能です

Bicep のデプロイ方法

Bicep のデプロイ方法は公開情報の目次を見ると以下の方法があるようです

  • Visual Studio Code
  • Azure CLI
  • Azure PowerShell
  • Cloud Shell
docs02
Bicep の公開情報のスクリーンショット:

※上記の公開情報のスクショにはありませんが, CI/CD のソリューションも連携可能です

Cloud Shell を使った場合の比較

ARM テンプレートと Bicep の両方で利用可能な方法で, 比較的導入が簡単な CloudShell でためしてみます
(この記事をスマホを使って書いているという裏事情もあります 😅)

ARM テンプレートのデプロイ

デプロイに利用するテンプレートは前回の記事で紹介したストレージ アカウントのものにします

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    },
    "storageAccountName": {
      "type": "string",
      "defaultValue": "[format('toylaunch{0}', uniqueString(resourceGroup().id))]"
    }
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-06-01",
      "name": "[parameters('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "StorageV2",
      "properties": {
        "accessTier": "Hot"
      }
    }
  ]
}

今回は Cloud Shell から参照できる場所にファイルを置いてデプロイを実行します
どこでもいいんですが Github に置いておきました
https://github.com/NakayamaKento/Azure_ARM_template/tree/main/Blog/arm_bicep_02

次に Azure Portal を開いて, Cloud Shell を PowerShell で立ち上げます
そして以下のコマンドを実行します

1
2
3
4
5
New-AzResourceGroup -Name ARMGroup -Location "Central US"
New-AzResourceGroupDeployment `
  -DeploymentName ARM_Deployment `
  -ResourceGroupName ARMGroup `
  -TemplateUri https://raw.githubusercontent.com/NakayamaKento/Azure_ARM_template/main/Blog/arm_bicep_02/storage.json

1行目で “ARMGroup” という名前のリソースグループの作成をします
2行目で ARM テンプレートに沿ってリソースをデプロイします

実際に実行した結果が以下のスクリーンショットです
画面上部で ARMGroup というリソースグループ内にストレージアカウントが1つできているのが確認できます

portal01
ARM テンプレートの実行結果:

画面下部の Cloud Shell の実行結果を抜き出して,
DeploymentName というパラメータを見てみます
これは 今回のデプロイを表す名前です
もし, 同じ名前で異なる ARM テンプレートがデプロイされると今回の内容が上書きされます
場合によってはリソースが削除される場合があります
そのためこの DeployName は日付などを入れたりして, 誤って上書きされないようにします

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
DeploymentName          : ARM_Deployment
ResourceGroupName       : ARMGroup
ProvisioningState       : Succeeded
Timestamp               : 8/26/2023 2:41:29 PM
Mode                    : Incremental
TemplateLink            : 
                          Uri            : https://raw.githubusercontent.com/NakayamaKento/Azure_ARM_
                          template/Blog_arm_bicep_02/Blog/arm_bicep_02/storage.json
                          ContentVersion : 1.0.0.0
                          
Parameters              : 
                          Name                  Type                       Value     
                          ====================  =========================  ==========
                          location              String                     "centralus"
                          storageAccountName    String                     "toylaunch3tuniiohokv5g"
                          
Outputs                 : 
DeploymentDebugLogLevel : 

Bicep のデプロイ

デプロイに利用するテンプレートは ARM テンプレートと同様に, 前回の記事で紹介したストレージ アカウントのものにします

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
param location string = resourceGroup().location
param storageAccountName string = 'toylaunch${uniqueString(resourceGroup().id)}'

resource storageAccount 'Microsoft.Storage/storageAccounts@2021-06-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
  properties: {
    accessTier: 'Hot'
  }
}

Bicep も Cloud Shell から参照できる場所にファイルを置いてデプロイを実行します
執筆時点だと Cloud Shell を使って Bicep を実行するためには Cloud Shell のローカルフォルダに Bicep ファイルを保存しておく必要があります
使用するファイルは Github に ARM テンプレートとは別のレポジトリを作成して置いておきました
https://github.com/NakayamaKento/Azure_ARM_template/tree/main/Blog/arm_bicep_02

次に Azure Portal を開いて, Cloud Shell を PowerShell で立ち上げます
そして以下のコマンドを実行します

1
2
3
4
5
6
7
New-AzResourceGroup -Name BicepGroup -Location "Central US"
git clone https://github.com/NakayamaKento/Azure_Bicep.git
cd Azure_Bicep/Blog/arm_bicep_02
New-AzResourceGroupDeployment `
  -DeploymentName Bicep_Deployment `
  -ResourceGroupName BicepGroup `
  -TemplateFile storage.bicep

1行目で “BicepGroup” という名前のリソースグループの作成をします
2行目で Github からリポジトリをクローンします
3行目で Bicep ファイルのあるフォルダまで移動しています
そして 4行目で Bicep に沿ってリソースをデプロイします

実際に実行した結果が以下のスクリーンショットです
画面上部で BicepGroup というリソースグループ内にストレージアカウントが1つできているのが確認できます

portal02
Bicep の実行結果:

DeploymentName のくだりは ARM テンプレートと同じです

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
DeploymentName          : Bicep_Deployment
ResourceGroupName       : BicepGroup
ProvisioningState       : Succeeded
Timestamp               : 8/26/2023 3:45:31 PM
Mode                    : Incremental
TemplateLink            : 
Parameters              : 
                          Name                  Type                       Value     
                          ====================  =========================  ==========
                          location              String                     "centralus"
                          storageAccountName    String                     "toylaunchs6dhdyraxsavc"
                          
Outputs                 : 
DeploymentDebugLogLevel : 

まとめ

ARM テンプレートと Bicep のデプロイの違いを確認しました
ARM テンプレートはデプロイ可能なツールが多く,リモートに保存されているファイルを実行できます
一方 Bicep は実行できるツール ARM テンプレートと比較をすると少ないですが, 困るほどではないかなと思いました
どちらかというとツールの多さではなく, ローカルに保存されているファイルしか参照できないことが不便だなという印象です

デプロイ名などは共通する部分があるので, 片方を理解しておくともう片方の理解も捗りそうです

参考

共有

Kento
著者
Kento
2020年に新卒で IT 企業に入社. インフラエンジニア(主にクラウド)として活動中