Mount Azure File Share to Azure App Service or Azure Functions Linux Container Apps
insights Stats
Code description
This code snippet shows you how to mount Azure Storage file share as a local drive in a Linux container app hosted in Azure App Service or Azure Functions.
Outline of the code
The code snippet does the following:
Create a storage account
Create file service
Create a file share
Create an App Service resource with Linux container
Mount the file share to the app
For .NET 8 containers
If you use .NET 8 images that runs without root permissions, please mount the file share to path under /home
. Otherwise, you may encounter errors like the following when deploying to Azure:
"message":"The resource write operation failed to complete successfully, because it reached terminal provisioning state 'Failed'.","details":[{"code":"DeploymentFailed","target":"/subscriptions/***/resourceGroups/***/providers/Microsoft.Resources/deployments/kontext-web","message":"At least one resource deployment operation failed. Please list deployment operations for details. Please see https://aka.ms/arm-deployment-operations for usage details.","details":[{"code":"InternalServerError","message":"There was an unexpected InternalServerError. Please try again later. x-ms-correlation-request-id: ***"}
Code snippet
param location string = 'australiaeast' param storageAccountName string = 'mystorageaccount' resource storageAccount 'Microsoft.Storage/storageAccounts@2023-01-01' = { kind: 'StorageV2' location: location name: storageAccountName properties: { accessTier: 'Cool' allowBlobPublicAccess: true encryption: { keySource: 'Microsoft.Storage' services: { blob: { enabled: true keyType: 'Account' } file: { enabled: true keyType: 'Account' } } } minimumTlsVersion: 'TLS1_2' supportsHttpsTrafficOnly: true } sku: { name: 'Standard_LRS' } } // File share for sharing data across services. resource storageAccountFileService 'Microsoft.Storage/storageAccounts/fileServices@2023-01-01' = { parent: storageAccount name: 'default' } resource storageAccountFileShareMain 'Microsoft.Storage/storageAccounts/fileServices/shares@2023-01-01' = { parent: storageAccountFileService name: 'fs-main' properties: { shareQuota: 5 // Set the quota for the file share in GiB. Adjust as needed. } } resource appServicePlan 'Microsoft.Web/serverfarms@2023-01-01' = { name: 'myAsp' location: location sku: { name: 'B1' tier: 'Basic' size: 'B1' family: 'B1' capacity: 1 } properties: { reserved: true // This is for Linux } } resource myApp 'Microsoft.Web/sites@2023-01-01' = { name: 'myApp' location: location // For function app, change kind to functionapp,linux kind: 'linux' properties: { serverFarmId: appServicePlan.id siteConfig: { linuxFxVersion: 'Docker|***:latest' appSettings: [ ] connectionStrings: [ ] azureStorageAccounts: { myFileShare: { type: 'AzureFiles' accountName: storageAccount.name shareName: storageAccountFileShareMain.name accessKey: storageAccount.listKeys().keys[0].value mountPath: '/home/fs-main' } } } httpsOnly: true } }