【Bicep入門 #1】ストレージアカウントを展開する

この記事の内容

  • Azure Portalでストレージアカウントを作成し、必須パラメータと設定項目を確認します
  • Bicepファイルの基本的な書き方(resourceブロック)を解説します
  • ARM テンプレートと Bicep の関係性を理解します
  • デプロイスコープ(リソースグループ・サブスクリプション等)の概念を説明します
  • Azure CLI および Azure PowerShell を使ったデプロイコマンドを紹介します

まずはポータルで同じものを作ってみよう

Bicep を学ぶ際の最初のステップとして、まず Azure Portal で同じリソースを手動作成することをおすすめします。 ポータルで作成することで、どのパラメータが必須でどれがオプションなのかを視覚的に確認できるからです。

Azure Portal でストレージアカウントを作成する際に必須となる項目は以下の通りです。

  • サブスクリプション
  • リソースグループ
  • ストレージアカウント名(Azureグローバルで一意である必要があります。3〜24文字で、既存のすべてのストレージアカウントと重複してはいけません)
  • リージョン
  • パフォーマンス(Standard または Premium)
  • 冗長性(LRS・ZRS・GRS・GZRSなど)
  • ネットワーク接続方法
  • ネットワークルーティングの優先度
  • 暗号化の種類

ストレージアカウント名はAzure全体でユニークである必要があります。同名のアカウントがすでに存在するとエラーになるため、自動化する際は名前の重複に注意が必要です。

冗長性については、パラメータ指定時に短縮形の略語(例:LRSGRSZRS)を使います。略語とその意味を把握しておくことが前提となりますので、事前に確認しておきましょう。


ARM テンプレートと Bicep の関係

Azure Portal でデプロイを実行する直前の画面で、ARM テンプレート(JSON形式)が自動生成されていることを確認できます。 これは非常に重要なポイントです。

ポータルから操作しても、Bicepで記述しても、最終的には裏側でこのJSONが生成され、Azureに送信されてリソースが作成される仕組みになっています。つまり、Bicepはこのジェイソンへコンパイルされる「上位の記述言語」と理解しておくと良いでしょう。

デプロイ後にリソースの「テンプレートのエクスポート」機能を使うと、作成されたリソースのJSONテンプレートを確認できます。Bicepで書き方がわからなくなったときは、一度ポータルで手動作成してこのJSONを参照すると、必要なプロパティ名や値のヒントが得られます。


Bicepファイルの基本的な書き方

VS Code に Bicep 拡張機能をインストールすると、補完機能が非常に強力に働きます。必須プロパティを自動で提示してくれるため、何を書けばよいかすぐわかります。

.bicep という拡張子でファイルを作成し、以下のような構文でリソースを定義します。

resource storage 'Microsoft.Storage/storageAccounts@2023-01-01' = {
  name: 'yourstorageaccountname'
  location: resourceGroup().location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
}

VS Code でリソースの種類を入力する際、Microsoft.Storage/storageAccounts のように入力すると補完候補が表示されます。バージョン(APIバージョン)も候補から選択できます。

必須プロパティを確認する方法

required-properties スニペットを使うと、必須プロパティだけを一覧表示してくれます。ストレージアカウントの場合、必須プロパティは以下の4つです。

  • name:ストレージアカウント名
  • location:リージョン
  • sku:パフォーマンスと冗長性の組み合わせ(例:Standard_LRS
  • kind:ストレージアカウントの種類(例:StorageV2

ドキュメントに記載されているプロパティは非常に多いように見えますが、必須のプロパティだけ入力すれば、残りは既定値が自動的に適用されます。

ストレージアカウント名の重複を避けるテクニック

名前の重複を避けたい場合は、uniqueString() 関数を使ってユニークな文字列を生成できます。

name: 'yourstorage${uniqueString(resourceGroup().id)}'

これにより、リソースグループIDに基づいたユニークな文字列が名前に付加されます。

リソースの種類の確認方法

Bicepでどのリソース種別(Type)を指定すればよいかわからない場合は、以下の方法で確認できます。

  1. ポータルでリソースを作成後、JSONビューを開くtype プロパティに Microsoft.Storage/storageAccounts と記載されています
  2. テンプレートのエクスポート機能から確認する
  3. Microsoft公式ドキュメントの Bicep/ARM テンプレートリファレンスを参照する

デプロイスコープの概念

Bicepでデプロイする際に理解しておきたい重要な概念がデプロイスコープです。

Azureのリソースは、以下の階層構造を持っています。

作成したいリソースがどの階層に属するかによって、使用するデプロイコマンドが変わります。

スコープ用途の例
リソースグループストレージアカウント、VMなど一般的なリソース
サブスクリプションリソースグループ自体の作成など
管理グループポリシーやRBACの管理
テナントテナントレベルの設定

ストレージアカウントはリソースグループの中に作成するため、リソースグループスコープでデプロイする必要があります。


デプロイの実行方法

Azure CLI の場合

まず Azure にサインインし、使用するサブスクリプションを設定します。

az login
az account set --subscription "サブスクリプション名またはID"
az account show  # 現在の設定を確認

リソースグループスコープでデプロイするには az deployment group create を使用します。

az deployment group create \
  --resource-group <リソースグループ名> \
  --template-file storage.bicep

サブスクリプションスコープでデプロイする場合は az deployment sub create を使います。

Azure PowerShell の場合

Connect-AzAccount
Set-AzContext -Subscription "サブスクリプションID"

リソースグループスコープでのデプロイは以下のコマンドです。

New-AzResourceGroupDeployment `
  -ResourceGroupName "<リソースグループ名>" `
  -TemplateFile "storage.bicep"

サブスクリプションスコープには New-AzSubscriptionDeployment、管理グループスコープには New-AzManagementGroupDeployment を使用します。

冪等性について

Bicepのデプロイは**冪等性(べきとうせい)**を持っています。すでに同じ状態のリソースが存在する場合でも、同じコマンドを何度実行しても問題ありません。「この状態にしてください」という宣言的な指示であるため、すでにその状態であれば何も変更せず成功として完了します。


まとめ

今回はBicep入門として、ストレージアカウントのデプロイを通じて基本的な流れを確認しました。

  • まずポータルで手動作成し、必須パラメータと設定値を理解してからBicepに落とし込む方法が効果的です
  • BicepファイルはコンパイルされてARMテンプレート(JSON)になり、Azureに送信されます
  • VS CodeのBicep拡張機能が必須プロパティの補完を行ってくれるため、ドキュメントをすべて読まなくても記述を始められます
  • デプロイにはスコープの概念があり、作成するリソースの階層に応じたコマンドを使い分ける必要があります
  • デプロイは冪等性を持つため、同じコマンドを繰り返し実行しても安全です

Bicepは最初こそ難しそうに見えますが、必須プロパティだけを把握すれば非常にシンプルに書き始められます。まずはストレージアカウントのような基本的なリソースから試してみてください。