Bicep とは

完了

チームが Azure Resource Manager のしくみを理解したところで、リソース プロビジョニングに ARM テンプレートを使用することにしました。 ARM テンプレートは、JSON または Bicep の使用という 2 つの異なる方法で記述できることを理解しています。 あなたは、使用する言語を情報に基づいて決めることができるように、Bicep テンプレートについて詳しく知りたいと考えています。

このユニットでは、Bicep テンプレート言語と、それがテンプレート作成にもたらす利点について学習します。

Bicep 言語

Bicep は、Azure リソースを宣言によってデプロイするときに使用される Resource Manager テンプレート言語です。 Bicep は、特定のシナリオまたは "ドメイン" 向けに設計されているため、ドメイン固有言語となります。 Bicep は、アプリケーションを作成するための標準プログラミング言語として使用するものではありません。 Bicep は Resource Manager テンプレートを作成するためにのみ使用されます。 Bicep は、他のプログラミング言語の経験に関係なく、理解しやすく、簡単に習得できるように設計されています。 すべてのリソースの種類、API バージョン、プロパティが Bicep テンプレートで有効です。

Note

以前に JSON テンプレートの使用について調べたことがある方は、Bicep によってテンプレートの作成エクスペリエンスが簡略化されていることにお気づきかもしれません。 理解しやすい構文が用意され、モジュール性や再利用可能なコードのサポートが強化されているほか、タイプ セーフが向上しています。 JSON ARM テンプレートを作成するには複雑な式が必要で、最終的な結果が詳細になる可能性があります。

Bicep の利点

Bicep では、テンプレート作成において JSON よりも多くの点が強化されています。

  • シンプルな構文: Bicep が提供するテンプレート作成構文はよりシンプルです。 複雑な関数を使用せずに、パラメーターと変数を直接参照できます。 名前や他の項目の値の結合には、連結の代わりに文字列補間が使用されます。 リソースのプロパティは、複雑な参照ステートメントではなくシンボリック名を使用して、直接参照することができます。 こうした構文改善は、Bicep テンプレートの作成と読み取りの両方に役立ちます。

  • モジュール性: 複雑なテンプレート デプロイを小さなモジュール ファイルに分割し、メイン テンプレート内で参照できます。 これらのモジュールにより、管理が容易になり、再利用性が向上します。 自分のモジュールを、チームと共有することもできます。

  • 依存関係の自動管理: リソース間の依存関係は、ほとんどの場合、Bicep によって自動検出されます。 このプロセスにより、テンプレート作成に伴う作業の一部が削除されます。

  • 種類の検証と IntelliSense: Visual Studio Code 用 Bicep 拡張機能は、Azure リソースの種類の API 定義すべてを対象とした豊富な検証機能と IntelliSense を備えています。 この機能は、より簡単な作成エクスペリエンスを提供するのに役立ちます。

次の例を見てみましょう。これは Azure ストレージ アカウントを定義する Bicep テンプレートの例です。 ストレージ アカウントの名前は、テンプレートによって自動的に生成されます。 デプロイ後、リソース ID は、テンプレートを実行するユーザーに出力として返されます。

param location string = resourceGroup().location
param namePrefix string = 'storage'

var storageAccountName = '${namePrefix}${uniqueString(resourceGroup().id)}'
var storageAccountSku = 'Standard_RAGRS'

resource storageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = {
  name: storageAccountName
  location: location
  kind: 'StorageV2'
  sku: {
    name: storageAccountSku
  }
  properties: {
    accessTier: 'Hot'
    supportsHttpsTrafficOnly: true
  }
}

output storageAccountId string = storageAccount.id