📄

Azure Cloud Shellだけで、BicepとARMを変換できる

2024/04/28に公開

はじめに

Bicepという、AzureでIaCを行う際の記法があります。簡単な使い方は以前記事にしました。
https://zenn.dev/arbr/articles/591fae714ed31f

内部では、Bicepの記法からAzure Resource Manager(ARM)のjson形式に変換してリソースをデプロイしているようです。なので相互変換が(完全ではないですが)でき、行うにはBicep CLIが必要です。

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

Bicep CLIはAzure Cloud Shellには既にインストールされていますので、準備不要で使えます。
今回は少し触ってみましたので記事にしました。

概要

Azure Cloud Shellで以下のことが出来ます。

  • BicepからARMに変換(Build)
  • ARMからBicepに変換(Decompile)
    • 保障されていないので、要確認

やってみた

使うコマンドはaz bicepです。詳細は--helpで確認できます。

準備

Cloud Shellを起動して、サンプルのBicepファイルを作成します。

touch main.bicep
# エディタでファイルを開きます
code main.bicep

コードは以前と同じものです。

main.bicep
targetScope = 'subscription'

resource newRG 'Microsoft.Resources/resourceGroups@2022-09-01' = {
  name: 'sampleResourceGroup'
  location: 'japaneast'
}

BicepからARMに変換(Build)

作成したBicepファイルをARMに変換するコマンドは以下です。

# main.jsonとして生成されます
az bicep build --file main.bicep

# ファイルを開きます
code main.json

変換結果は以下でした。

main.json
{
  "$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "metadata": {
    "_generator": {
      "name": "bicep",
      "version": "0.26.54.24096",
      "templateHash": "10182944597636828594"
    }
  },
  "resources": [
    {
      "type": "Microsoft.Resources/resourceGroups",
      "apiVersion": "2022-09-01",
      "name": "sampleResourceGroup",
      "location": "japaneast"
    }
  ]
}

ARMからBicepに変換(Decompile)

今度は生成されたARMのファイルをBicepに変換します。
コマンドは以下です、一度ファイル名をmain2.jsonにしています。

# 一旦ファイル名を変更
mv main.json main2.json

# main2.bicepとして生成されます
az bicep decompile --file main2.json

# ファイルを開きます
code main2.bicep

以下のようなファイルが生成されました。

main2.bicep
targetScope = 'subscription'
resource sampleResourceGroup 'Microsoft.Resources/resourceGroups@2022-09-01' = {
  name: 'sampleResourceGroup'
  location: 'japaneast'
}

おわりに

今回はCloud Shellを使って、準備不要でBicepとARMの変換をしてみました。
「Bicepで管理していたけど、急ぎだったからコンソールから作ってしまった」という場合には、大変有用かと思います。
この記事がどなたかのお役に立てれば幸いです。

Discussion