📝

Bicep で Azure Files のディレクトリを作る

2022/08/20に公開

はじめに

Azure Files のリソース作成時にディレクトリまで作るメモ。

Bicep

リファレンスを見てもそれらしい定義はありません。

https://docs.microsoft.com/en-us/azure/templates/microsoft.storage/storageaccounts/fileservices/shares?pivots=deployment-language-bicep

Azure Portal の「テンプレートのダウンロード」でも、ディレクトリは含まれていません。
そもそも ARM Template が対応していない?

Azure CLI

Azure CLI ではディレクトリ作成がサポートされています。

https://docs.microsoft.com/ja-jp/cli/azure/storage/directory?view=azure-cli-latest

az storage directory create --name <directory_name> --account-name <storage_account_name> --share-name <file_share_name> --account-key <storage_account_key>

従って、デプロイスクリプトでこのコマンドを実行すれば実現できそうです。

https://docs.microsoft.com/en-us/azure/templates/microsoft.resources/deploymentscripts?pivots=deployment-language-bicep

デプロイスクリプト

必要最小限の定義は以下のようになります。

resource script 'Microsoft.Resources/deploymentScripts@2020-10-01' = {
  name: 'CreateFileShareDirectory'
  location: location
  kind: 'AzureCLI'
  properties: {
    azCliVersion: '2.39.0'
    retentionInterval: 'P1D'
    scriptContent: 'az storage directory create --name <directory_name> --account-name <storage_account_name> --share-name <file_share_name> --account-key <storage_account_key>'
  }
}

アカウントキーなどは環境変数や引数として Azure CLI に渡すことができます。

@description('location')
param location string = resourceGroup().location

@description('Storage account name')
param storageAccountName string = 'fileshare${uniqueString(resourceGroup().id)}'

// Create storage Account
resource sa 'Microsoft.Storage/storageAccounts@2021-09-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
}

// Create file share
param shareName string = 'share'
resource share 'Microsoft.Storage/storageAccounts/fileServices/shares@2021-09-01' = {
  name: '${sa.name}/default/${shareName}'
}

// Create file share directory.
// ${shareName}/foo/bar
param dir1 string = 'foo'
param dir2 string = 'bar'
var accountKey = listKeys(sa.id, sa.apiVersion).keys[0].value

resource script 'Microsoft.Resources/deploymentScripts@2020-10-01' = {
  name: 'CreateFileShareDir'
  location: location
  kind: 'AzureCLI'
  properties: {
    azCliVersion: '2.29.0'
    retentionInterval: 'P1D'
    arguments: '${dir1} ${dir2}'
    environmentVariables: [
      {
        name: 'accountName'
        value: sa.name
      }
      {
        name: 'shareName'
        value: shareName
      }
      {
        name: 'accountKey'
        value: accountKey
      }
    ]
    scriptContent: '''
      az storage directory create --name $1 --account-name $accountName --share-name $shareName --account-key $accountKey
      az storage directory create --name $1/$2 --account-name $accountName --share-name $shareName --account-key $accountKey
    '''
  }
}

デプロイします。

az deployment group create -g bicep -f share.bicep

できました。

おわりに

カスタムスクリプトを使って、Azure Files のファイル共有ディレクトリを作ることができました。

Discussion