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
}
}