How to enable your own persistent storage in Azure Spring Apps with the Standard consumption and dedicated plan
Note
The Basic, Standard, and Enterprise plans will be deprecated starting from mid-March, 2025, with a 3 year retirement period. We recommend transitioning to Azure Container Apps. For more information, see the Azure Spring Apps retirement announcement.
The Standard consumption and dedicated plan will be deprecated starting September 30, 2024, with a complete shutdown after six months. We recommend transitioning to Azure Container Apps. For more information, see Migrate Azure Spring Apps Standard consumption and dedicated plan to Azure Container Apps.
This article applies to: ✅ Standard consumption and dedicated (Preview) ❎ Basic/Standard ❎ Enterprise
This article describes how to enable your own persistent storage in Azure Spring Apps.
Your own storage and the built-in persistent storage in Azure Spring Apps differ in the following ways:
In built-in storage, artifacts generated by your application get uploaded into Azure Storage accounts. In your own storage, artifacts generated by your application get uploaded into a storage account that you control.
In built-in storage, Microsoft Azure controls the encryption-at-rest and the lifetime management policies for those artifacts. In your own storage, you control the encryption-at-rest policy, the lifetime management policy, and network access.
You can also mount your own persistent storage not only to Azure Spring Apps but to other service instances in the environment such as Azure Container Apps. This capability is possible because your Azure Spring Apps instance is deployed in the Azure Container Apps environment.
Prerequisites
- An Azure subscription. If you don't have a subscription, create a free account before you begin.
- Azure CLI version 2.45.0 or higher.
- An Azure Spring Apps Standard consumption and dedicated plan service instance. For more information, see Quickstart: Provision an Azure Spring Apps Standard consumption and dedicated plan service instance.
- A Spring app deployed to Azure Spring Apps.
Set up the environment
Use the following commands to set the following variables to the names of your resources and current region setting.
export RESOURCE_GROUP="<resource-group-name>"
export LOCATION="eastus"
export AZURE_CONTAINER_APPS_ENVIRONMENT="<Azure-Container-Apps-environment-name>"
export AZURE_SPRING_APPS_INSTANCE="<Azure-Spring-Apps-instance-name>"
export APP_NAME="<Spring-app-name>"
Set up a storage account
Use the following steps to create a storage account and establish a file share to mount to the Spring app.
Create an Azure Storage account by using the following commands. The
STORAGE_ACCOUNT_NAME
variable includes a randomly generated suffix to ensure uniqueness.export STORAGE_ACCOUNT_NAME="myasastorageaccount$RANDOM" az storage account create \ --resource-group $RESOURCE_GROUP \ --name $STORAGE_ACCOUNT_NAME \ --location "$LOCATION" \ --kind StorageV2 \ --sku Standard_LRS \ --query provisioningState \ --enable-large-file-share
This command returns a success message upon successful completion.
Create the Azure Storage file share by using the following commands:
export FILE_SHARE_NAME="<file-share-name>" az storage share-rm create \ --resource-group $RESOURCE_GROUP \ --storage-account $STORAGE_ACCOUNT_NAME \ --name $FILE_SHARE_NAME \ --quota 1024 \ --enabled-protocols SMB \ --output table
Get the Storage Account key by using the following command:
export STORAGE_ACCOUNT_KEY=$(az storage account keys list \ --account-name $STORAGE_ACCOUNT_NAME \ --query "[0].value" \ --output tsv)
The storage account key is required to create the storage link in your Azure Container Apps environment.
Link the storage to the Azure Container Apps environment
Create the storage link in the Azure Container Apps environment by using the following commands. The az containerapp env storage set
command creates a link between the environment and the file share created with the az storage share-rm
command.
export STORAGE_MOUNT_NAME="<storage-account-name>"
az containerapp env storage set \
--resource-group $RESOURCE_GROUP \
--name $AZURE_CONTAINER_APPS_ENVIRONMENT \
--storage-name $STORAGE_MOUNT_NAME \
--azure-file-account-name $STORAGE_ACCOUNT_NAME \
--azure-file-account-key $STORAGE_ACCOUNT_KEY \
--azure-file-share-name $FILE_SHARE_NAME \
--access-mode ReadWrite \
--output table
Now that the storage account and environment are linked, you can use the storage mount in your Azure Spring Apps instance.
Add storage to an app
Add the persistent storage to your existing app by using the following command:
az spring app append-persistent-storage \
--resource-group $RESOURCE_GROUP \
--service $AZURE_SPRING_APPS_INSTANCE \
--name $APP_NAME \
--persistent-storage-type AzureFileVolume \
--mount-path /var/log/nginx \
--storage-name $STORAGE_MOUNT_NAME
Clean up resources
Be sure to delete the resources you created in this article when you no longer need them. To delete the resources, just delete the resource group that contains them. You can delete the resource group using the Azure portal. Alternatively, to delete the resource group by using Azure CLI, use the following commands:
echo "Enter the Resource Group name:" &&
read resourceGroupName &&
az group delete --name $resourceGroupName &&
echo "Press [ENTER] to continue ..."