字幕テキストを解析して記事を作成します。
【Bicep 入門 #3】スコープについて
この記事の内容
- Azure Bicep における「スコープ(Scope)」の概念を解説します
targetScopeの設定によってリソースの展開先レベルが変わることを説明します- サブスクリプションレベルのスコープとリソースグループレベルのスコープの違いを紹介します
- 異なるスコープのリソースを一緒に扱うために「モジュール」を活用する方法を説明します
- 実際にリソースグループとストレージアカウントを2つのファイルで作成するデモを紹介します
スコープとは何か
Azure Bicep では、リソースをどのレベルに展開するかを「スコープ」という概念で管理します。スコープには主に以下のレベルがあります。
- サブスクリプション(subscription)
- リソースグループ(resourceGroup)
Bicep ファイルの先頭で targetScope を指定することで、そのファイルが対象とするスコープを宣言できます。
targetScope = 'subscription'
targetScope = 'resourceGroup'
デフォルトでは resourceGroup スコープになっています。
スコープの違いによる制約
targetScope を subscription に設定したファイルでは、リソースグループそのものを作成できます。しかし、ストレージアカウントのようにリソースグループレベルでしか作成できないリソースを同じファイルに書こうとすると、Bicep がエラーを出力します。
このようなエラーが発生したとき、「スコープが合っていない」ことが原因です。サブスクリプションスコープのファイルにリソースグループレベルのリソースをそのまま書くことはできません。
モジュールを使って別スコープのリソースを展開する
この問題を解決するのが**モジュール(module)**です。モジュールを使うことで、別の Bicep ファイルを呼び出し、呼び出し先ファイルに異なるスコープを指定することができます。
ファイル構成例
main.bicep(サブスクリプションスコープ)
targetScope = 'subscription'
// リソースグループを作成する
resource rg 'Microsoft.Resources/resourceGroups@2021-04-01' = {
name: 'youtube-rg'
location: 'japaneast'
}
// モジュールを呼び出してストレージを作成する
module storageDeploy 'storage.bicep' = {
name: 'storageDeployment'
scope: rg // リソースグループのスコープを渡す
params: {
location: rg.location
}
}
storage.bicep(リソースグループスコープ)
targetScope = 'resourceGroup'
param location string
resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
name: 'youtubestorage123'
location: location
sku: {
name: 'Standard_LRS'
}
kind: 'StorageV2'
}
module ブロックの scope プロパティに、先ほど作成したリソースグループオブジェクト(rg)を渡すことで、そのリソースグループのスコープ内でストレージアカウントを展開できます。
デプロイを実行する
サブスクリプションレベルのデプロイは az deployment sub create コマンドで実行します。
az deployment sub create \
--location japaneast \
--template-file main.bicep
デプロイ結果の確認
デプロイが完了すると、以下のリソースが作成されます。
- リソースグループ(
youtube-rg) - ストレージアカウント(
youtubestorage123)— リソースグループ内に展開
Azure ポータルで確認すると、youtube-rg というリソースグループが存在し、その中にストレージアカウントが作成されていることがわかります。
モジュールのデプロイには「展開名(deployment name)」が付きます。name: 'storageDeployment' と指定した場合、ポータルのデプロイ履歴にその名前で記録されます。
モジュールの考え方まとめ
モジュールは「別のファイルに処理を委任する」仕組みです。以下の点を押さえておきましょう。
| 概念 | 説明 |
|---|---|
targetScope | そのファイル全体が対象とするスコープ |
module | 別の Bicep ファイルを呼び出す仕組み |
scope(moduleのプロパティ) | 呼び出し先を展開するスコープを指定する |
name(moduleのプロパティ) | デプロイ履歴に表示される展開名 |
サブスクリプションレベルでリソースグループを作り、そのリソースグループの中身は別ファイルに任せる、という構造が Bicep では一般的なパターンです。
まとめ
今回は Bicep のスコープとモジュールについて解説しました。
- Bicep では
targetScopeでリソースの展開先レベルを指定します - サブスクリプションスコープのファイルには、リソースグループレベルのリソースを直接書けません
moduleを使って別ファイルを呼び出し、scopeプロパティでリソースグループを渡すことで、異なるスコープのリソースを一緒に管理できます- リソースグループの作成とその中のリソース展開を別ファイルに分離することで、構造が整理された Bicep テンプレートを作成できます
モジュールはスコープの問題を解決するだけでなく、テンプレートの再利用性を高める重要な機能です。ぜひ活用してみてください。