🦾

Azure Bicep について簡単にまとめ

2023/02/22に公開

Azure Bicep について

こんにちは、SeaOtterです。今回は、Azure Bicep というIaCツールについて簡単に紹介したいと思います。Azure Bicep は、Azure リソースを宣言的にデプロイするためのドメイン固有言語 (DSL) です。ARM テンプレートの JSON と比べて、より簡単で簡潔な構文で、Azure リソースの定義や再利用ができます。この記事では、以下の3つの項目について説明します。

  • ARM テンプレートと Bicep の違い
  • Bicep の便利な機能
  • Bicep の書き方と簡単なサンプルコード

ARM テンプレートと Bicep の違い

ARM テンプレートは、Azure リソースをデプロイするための JSON ファイルです。ARM テンプレートでは、リソースの種類、API バージョン、プロパティなどを指定して、Azure リソースの状態を定義します。ARM テンプレートは、Azure CLI や PowerShell などのツールでデプロイできます。

Bicep は、ARM テンプレートの JSON を抽象化した言語です。Bicep では、ARM テンプレートで有効なリソースの種類、API バージョン、プロパティなどを使用できますが、同等の JSON と比べて、より簡単で簡潔な構文で記述できます。Bicep ファイルは、Bicep CLI で ARM テンプレートの JSON にコンパイルできます。また、Bicep CLI は、既存の ARM テンプレートの JSON を Bicep ファイルに逆コンパイルすることもできます。Bicep ファイルは、ARM テンプレートと同じように、Azure CLI や PowerShell などのツールでデプロイできます。

Bicep の便利な機能

Bicep には、ARM テンプレートの JSON にはない便利な機能がいくつかあります。ここでは、その中からいくつかを紹介します。

  • 作成エクスペリエンス: VS Code の Bicep 拡張機能を使用すると、Bicep ファイルの作成にファーストクラスのエクスペリエンスが得られます。エディターには、豊富なタイプセーフ、IntelliSense、構文検証などの機能が用意されています。

  • モジュール: Bicep では、Bicep ファイルをモジュールとして再利用できます。モジュールは、他の Bicep ファイルから参照できる Bicep ファイルです。モジュールを使用すると、コードの重複を減らしたり、複雑なデプロイメントを分割したりできます

  • パラメーターと変数: Bicep では、パラメーターと変数を使用して、Bicep ファイルの値を動的に変更できます。パラメーターは、Bicep ファイルの外部から渡される値で、デプロイメントごとに異なる可能性があります。変数は、Bicep ファイルの内部で定義される値で、コードの可読性や再利用性を高めるために使用できます。パラメーターと変数は、Bicep の三項演算子や if 関数などの条件式と組み合わせることもできます。

Bicep の書き方と簡単なサンプルコード

Bicep の書き方は、ARM テンプレートの JSON とは異なります。Bicep では、リソースの種類、名前、プロパティなどを、カンマや波括弧などの余分な記号なしで記述できます。
ここでは、Bicep の簡単なサンプルコードを紹介します。このコードは、Azure にストレージ アカウントとコンテナーをデプロイするものです。

// パラメーターの定義
param storageAccountName string = 'test${uniqueString(resourceGroup().id)}'
param location string = resourceGroup().location
param containerName string = 'testcontainer'
// 変数の定義
var storageAccountSku = 'Standard_LRS'
// ストレージ アカウントのデプロイ
resource storageAccount 'Microsoft.Storage/storageAccounts@2021-04-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: storageAccountSku
  }
  kind: 'StorageV2'
}
// コンテナーのデプロイ
resource container 'Microsoft.Storage/storageAccounts/blobServices/containers@2021-04-01' = {
  name: '${storageAccount.name}/default/${containerName}'
  properties: {
    publicAccess: 'None'
  }
}

このコードを Bicep CLI で ARM テンプレートの JSON にコンパイルすると、以下のようになります。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageAccountName": {
      "type": "string",
      "defaultValue": "[format('test{0}', uniqueString(resourceGroup().id))]",
      "metadata": {
        "_generated": {
          "name": "storageAccountName",
          "condition": "[not(empty('test${uniqueString(resourceGroup().id)}'))]"
        }
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "_generated": {
          "name": "location",
          "condition": "[not(empty(resourceGroup().location))]"
        }
      }
    },
    "containerName": {
      "type": "string",
      "defaultValue": "testcontainer",
      "metadata": {
        "_generated": {
          "name": "containerName",
          "condition": "[not(empty('testcontainer'))]"
        }
      }
    }
  },
  "functions": [],
  "variables": {
    "storageAccountSku": "Standard_LRS"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-04-01",
      "name": "[parameters('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[variables('storageAccountSku')]"
      },
      "kind": "StorageV2",
      "properties": {},
      "dependsOn": []
    },
    {
      "type": "Microsoft.Storage/storageAccounts/blobServices/containers",
      "apiVersion": "2021-04-01",
      "name": "[format('{0}/default/{1}', parameters('storageAccountName'), parameters('containerName'))]",
      "properties": {
        "publicAccess": "None"
      },
      "dependsOn": [
        "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]"
      ]
    }
  ],
  "outputs": {}
}

Bicep ファイルと ARM テンプレートの JSON を比べると、Bicep ファイルの方が、より簡単で簡潔にリソースを定義できることがわかります。また、Bicep ファイルの方が、コードの可読性やメンテナンス性も高いと言えます。

まとめ

この記事では、Azure Bicep について紹介しました。
Azure Bicep は、ARM テンプレートの JSON を抽象化した言語で、より簡単で簡潔な構文で、Azure リソースの定義や再利用ができます。Bicep の書き方は、ARM テンプレートの JSON とは異なり、リソースの種類、名前、プロパティなどを、カンマや波括弧などの余分な記号なしで記述できます。また、リソースの依存関係を明示的に指定する必要はありません。Bicep は、リソースの参照から自動的に依存関係を解決します。Bicep ファイルは、Bicep CLI で ARM テンプレートの JSON にコンパイルでき、また既存の ARM テンプレートの JSON を Bicep ファイルに逆コンパイルすることもできます。Bicep ファイルは、ARM テンプレートと同じように、Azure CLI や PowerShell などのツールでデプロイできます。

Azure Bicep に興味がある方は、ぜひ試してみてください。Microsoft の公式ドキュメントGitHub リポジトリを参考にしてください。

以上、Azure Bicep についての記事でした。ありがとうございました。😊

GitHubで編集を提案

Discussion