Bicep のファイル関数

この記事では、外部ファイルからコンテンツを読み込むための Bicep 関数について説明します。

loadDirectoryFileInfo

loadDirectoryFileInfo(directoryPath, [searchPattern])

ディレクトリのファイルに関する基本情報をBicepオブジェクトとして読み込みます。 この関数は実行時ではなく、コンパイル中にファイルを読み込みます。

名前空間: sys。

パラメーター

パラメーター 必須 タイプ Description
directoryPath イエス 文字列 パスは、この関数を呼び出す Bicep ファイルに対する相対パスです。 コンパイル時の定数であれば変数は使えますが、パラメータは使えません。
searchPattern いいえ 文字列 ファイルを読み込むときに使用する検索パターン。 このパターンにはワイルドカードも含まれます。

戻り値

ディレクトリ内のファイルを表すオブジェクトの配列。 各オブジェクトには、次のプロパティが含まれています。

プロパティ タイプ Description
ベース 文字列 ファイルの名前。
拡張子 文字列 ファイルの拡張子。
relativePath (相対パス) 文字列 現在のテンプレートへの相対パス。

例示

次の例では、 ./modules/ ディレクトリ内のすべての Bicep ファイルのファイル情報を読み込みます。

var dirFileInfo = loadDirectoryFileInfo('./modules/', '*.bicep')

output dirFileInfoOutput object[] = dirFileInfo

フォルダーには、 appService.bicepという名前のファイルが 1 つだけ含まれています。 出力は次のようになります。

[{"relativePath":"modules/appService.bicep","baseName":"appService.bicep","extension":".bicep"}]

loadFileAsBase64

loadFileAsBase64(filePath)

ファイルを base64 文字列として読み込みます。

名前空間: sys。

パラメーター

パラメーター 必須 タイプ Description
filePath イエス 文字列 読み込むファイルへのパス。 パスは、デプロイされた Bicep ファイルに対する相対パスです。 変数を含めることはできません。

注釈

デプロイメントに含めたいバイナリコンテンツがある場合にこの関数を使ってください。 ファイルを手動でbase64文字列にエンコードしてBicepファイルに追加する代わりに、この関数を使ってファイルを読み込みます。 このファイルは、Bicep ファイルが JSON テンプレートにコンパイルされるときに読み込まれます。 ファイルパス内の変数は使えません。なぜなら、コンパイラがテンプレートにコンパイルする際に変数を解決しないからです。 デプロイ時に、JSON テンプレートには、ハードコーディングされた文字列としてファイルの内容が含まれます。

この関数には 、Bicep CLI バージョン 0.4.X 以降が必要です。

ファイルの最大許容サイズは 96 KBです。

戻り値

base64 文字列としてのファイル。

例示

以下の例では、PowerShellスクリプトをbase64文字列として読み込み、仮想マシン(VM)用のカスタムスクリプト拡張と組み合わせて使用しています。

param vmName string
param location string

resource vmExtension 'Microsoft.Compute/virtualMachines/extensions@2024-07-01' = {
  name: '${vmName}/CustomScriptExtension'
  location: location
  properties: {
    publisher: 'Microsoft.Compute'
    type: 'CustomScriptExtension'
    typeHandlerVersion: '1.10'
    autoUpgradeMinorVersion: true
    forceUpdateTag: 'true'
    protectedSettings: {
      commandToExecute: 'powershell.exe -ExecutionPolicy Unrestricted -Command "iex ""& { $([System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String(\'${loadFileAsBase64('vm-provisioning.ps1')}\'))) } -ParamX foo -ParamY bar"""'
    }
  }
}

Note

この例ではPowerShellの -EncodedCommand パラメータは使われていません。 -EncodedCommand UTF-16LEエンコードコマンドを期待します。 この例では、PowerShellにbase64文字列を渡し、UTF-8として明示的にデコードしてからスクリプトを呼び出します。

スクリプトファイルはBicepコンパイル中に読み込まれ、生成されたJSONテンプレートにbase64エンコードされた文字列として埋め込まれます。 デプロイメントが実行されると、PowerShellはその文字列を復号し、VM上でスクリプトを呼び出します。 この方法は、スクリプト内容を commandToExecuteに直接埋め込む際に有用であり、多行スクリプトコンテンツで起こりうる多くの引用、エスケープ、改行の問題を回避できます。

また、 base64() でインラインの多行文字列をエンコードし、デコードしたスクリプトに名前付きパラメータを渡すこともできます。 詳細は多 行文字列リテラルを参照してください。

var scriptContent = '''
param(
  [string] $Name
)

Write-Host "Hello $Name!"
'''

var scriptArgs = {
  Name: 'MyValue'
}

// Builds a string of the form '-ArgA ValA -ArgB ValB'
var argumentString = join(map(items(scriptArgs), i => '-${i.key} ${i.value}'), ' ')

var commandToExecute = 'powershell.exe -ExecutionPolicy Unrestricted -Command "iex \\"& { $([System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String(\'${base64(scriptContent)}\'))) } ${argumentString}\\""'

Note

この例が成立するのは、引数値(MyValue)に特殊文字が含まれていないためです。 単純な join/map ビルダーは価格を逃げたり見積もったりしません。 もし値にスペース(引用符で囲まれる必要がある)や、シングルクォート、ダブルクォート、またはPowerShellのコマンドライン引数パーサ専用の文字( replace()で脱出しなければならない)が含まれていると失敗します。

ブール、整数、文字列、配列、オブジェクトを正しく扱う完全な例については、「 複雑な入力と出力を持つデプロイメントスクリプトを作成」を参照してください。

loadJsonContent

loadJsonContent(filePath, [jsonPath], [encoding])

指定した JSON ファイルを Any オブジェクトとして読み込みます。

名前空間: sys。

パラメーター

パラメーター 必須 タイプ Description
filePath イエス 文字列 読み込むファイルへのパス。 パスは、デプロイされた Bicep ファイルに対する相対パスです。 変数を含めることはできません。
jsonPath いいえ 文字列 ファイルの一部のみが読み込まれるよう指定する JSONPath 式。
エンコード いいえ 文字列 ファイル エンコード。 既定値は utf-8 です。 使用できるオプションは、 iso-8859-1、 us-ascii、 utf-16、 utf-16BE、または utf-8です。

注釈

JSONコンテンツや縮小されたJSONコンテンツを別ファイルに保存する場合は、この関数を使ってください。 BicepファイルでJSONコンテンツを複製する代わりに、この関数を使ってコンテンツを読み込みましょう。 JSON パスを指定することで、JSON ファイルの一部を読み込むことができます。 Bicepコンパイラは、BicepファイルをJSONテンプレートにコンパイルする際にファイルを読み込みます。 ファイルパスに変数を含めることはできません。なぜなら、コンパイラがテンプレートにコンパイルする際に変数を解決できないからです。 デプロイ時に、JSON テンプレートには、ハードコーディングされた文字列としてファイルの内容が含まれます。

VS Codeでは、読み込まれたオブジェクトのプロパティに対してIntelliSenseが利用可能です。 たとえば、多くの Bicep ファイル間で共有する値を持つファイルを作成できます。 この記事の例を示します。

この関数には 、Bicep CLI バージョン 0.7.X 以降が必要です。

ファイルの最大許容サイズは、行末を含めて 1,048,576 文字です。

戻り値

Any オブジェクトとしてのファイルの内容。

例示

次の例では、ネットワーク セキュリティ グループの値を含む JSON ファイルを作成します。

{
  "description": "Allows SSH traffic",
  "protocol": "Tcp",
  "sourcePortRange": "*",
  "destinationPortRange": "22",
  "sourceAddressPrefix": "*",
  "destinationAddressPrefix": "*",
  "access": "Allow",
  "priority": 100,
  "direction": "Inbound"
}

そのファイルを読み込み、JSON オブジェクトに変換します。 このオブジェクトを使用して、リソースに値を割り当てます。

param location string = resourceGroup().location

var nsgconfig = loadJsonContent('nsg-security-rules.json')

resource newNSG 'Microsoft.Network/networkSecurityGroups@2025-01-01' = {
  name: 'example-nsg'
  location: location
  properties: {
    securityRules: [
      {
        name: 'SSH'
        properties: nsgconfig
      }
    ]
  }
}

ネットワーク セキュリティ グループをデプロイする他の Bicep ファイル内の値のファイルを再利用できます。

loadYamlContent

loadYamlContent(filePath, [pathFilter], [encoding])

指定した YAML ファイルを Any オブジェクトとして読み込みます。

名前空間: sys。

パラメーター

パラメーター 必須 タイプ Description
filePath イエス 文字列 読み込むファイルへのパス。 パスは、デプロイされた Bicep ファイルに対する相対パスです。 変数を含めることはできません。
pathFilter いいえ 文字列 パス フィルターは、ファイルの一部のみが読み込まれるよう指定する JSONPath 式です。
エンコード いいえ 文字列 ファイル エンコード。 既定値は utf-8 です。 使用できるオプションは、 iso-8859-1、 us-ascii、 utf-16、 utf-16BE、または utf-8です。

注釈

YAMLコンテンツや縮小されたYAMLコンテンツが別ファイルに保存されている場合にこの関数を使ってください。 BicepファイルにYAML内容を複製する代わりに、この関数を使ってコンテンツを読み込みましょう。 パス フィルターを指定することで、YAML ファイルの一部を読み込むことができます。 Bicepコンパイラは、BicepファイルをYAMLテンプレートにコンパイルする際にファイルを読み込みます。 ファイルパスに変数を含めることはできません。なぜなら、コンパイラがテンプレートにコンパイルする際に変数を解決できないからです。 デプロイ中、YAML テンプレートには、ハードコーディングされた文字列としてファイルの内容が含まれます。

VS Codeでは、読み込まれたオブジェクトのプロパティに対してIntelliSenseが利用可能です。 たとえば、多くの Bicep ファイル間で共有する値を持つファイルを作成できます。 この記事の例を示します。

この関数には 、Bicep CLI バージョン 0.16.X 以降が必要です。

ファイルの最大許容サイズは、行末を含めて 1,048,576 文字です。

戻り値

Any オブジェクトとしてのファイルの内容。

例示

次の例では、ネットワーク セキュリティ グループの値を含む YAML ファイルを作成します。

description: "Allows SSH traffic"
protocol: "Tcp"
sourcePortRange: "*"
destinationPortRange: "22"
sourceAddressPrefix: "*"
destinationAddressPrefix: "*"
access: "Allow"
priority: 100
direction: "Inbound"

そのファイルを読み込み、JSON オブジェクトに変換します。 このオブジェクトを使用して、リソースに値を割り当てます。

param location string = resourceGroup().location

var nsgconfig = loadYamlContent('nsg-security-rules.yaml')

resource newNSG 'Microsoft.Network/networkSecurityGroups@2025-01-01' = {
  name: 'example-nsg'
  location: location
  properties: {
    securityRules: [
      {
        name: 'SSH'
        properties: nsgconfig
      }
    ]
  }
}

ネットワーク セキュリティ グループをデプロイする他の Bicep ファイル内の値のファイルを再利用できます。

loadTextContent

loadTextContent(filePath, [encoding])

指定したファイルの内容を文字列として読み込みます。

名前空間: sys。

パラメーター

パラメーター 必須 タイプ Description
filePath イエス 文字列 読み込むファイルへのパス。 パスは、デプロイされた Bicep ファイルに対する相対パスです。 変数を含めることはできません。
エンコード いいえ 文字列 ファイル エンコード。 既定値は utf-8 です。 使用できるオプションは、 iso-8859-1、 us-ascii、 utf-16、 utf-16BE、または utf-8です。

注釈

この関数は、別のファイルに格納されているコンテンツがある場合に使用します。 コンテンツを Bicep ファイルに複製するのではなく、読み込むことができます。 たとえば、ファイルからデプロイ スクリプトを読み込むことができます。 このファイルは、Bicep ファイルが JSON テンプレートにコンパイルされるときに読み込まれます。 テンプレートにコンパイルしても解決されない変数なので、ファイルパスに変数を含めることはできません。 デプロイ時に、JSON テンプレートには、ハードコーディングされた文字列としてファイルの内容が含まれます。

JSONファイルを読み込むには、 loadJsonContent() 関数を使ってください。

この関数には 、Bicep CLI バージョン 0.4.X 以降が必要です。

ファイルの最大許容サイズは 131,072 文字 (行末を含む) です。

戻り値

文字列としてのファイルの内容。

例示

以下の例は、ファイルからスクリプトを読み込み、デプロイスクリプトとして使う方法を示しています。

resource exampleScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
  name: 'exampleScript'
  location: resourceGroup().location
  kind: 'AzurePowerShell'
  identity: {
    type: 'UserAssigned'
    userAssignedIdentities: {
      '/subscriptions/{sub-id}/resourcegroups/{rg-name}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{id-name}': {}
    }
  }
  properties: {
    azPowerShellVersion: '14.0'
    scriptContent: loadTextContent('myscript.ps1')
    retentionInterval: 'P1D'
  }
}

次のステップ

Bicep ファイルのセクションの説明は、Bicep ファイルの構造と構文に関する記事をご覧ください。