Skip to content

Geo-replicate app configuration store#

Reliability · App Configuration · 2022_09

Consider replication for app configuration store to ensure resiliency to region outages.

Description#

A app configuration store is stored and maintained by default in a single region.

The app configuration geo-replication feature allows you to replicate your configuration store at-will to the regions of your choice. Each new replica will be in a different region and creates a new endpoint for your applications to send requests to. The original endpoint of your configuration store is called the Origin. The origin can't be removed, but otherwise behaves like any replica.

Replicating your configuration store adds the following benefits:

  • Added resiliency for Azure outages.
  • Redistribution of request limits.
  • Regional compartmentalization.

Geo-replication is currently a preview feature. During the preview geo-replication has additional limitations including support and regional availability.

Recommendation#

Consider replication for app configuration store to ensure resiliency to region outages.

Examples#

Configure with Azure template#

To deploy App Configuration Stores that pass this rule:

  • Set sku.name to Standard (required for geo-replication).
  • Deploy a replica sub-resource (child resource).
  • Set location on replica sub-resource to a different location than the app configuration store.

For example:

Azure Template snippet
{
  "parameters": {
    "appConfigName": {
      "type": "string",
      "defaultValue": "configstore01",
      "metadata": {
        "description": "The name of the app configuration store."
      }
    },
    "replicaName": {
      "type": "string",
      "defaultValue": "replica01",
      "metadata": {
        "description": "The name of the replica."
      }
    },
    "appConfigLocation": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "The location resources will be deployed."
      }
    },
    "replicaLocation": {
      "type": "string",
      "defaultValue": "northeurope",
      "metadata": {
        "description": "The location where the replica will be deployed."
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.AppConfiguration/configurationStores",
      "apiVersion": "2022-05-01",
      "name": "[parameters('appConfigName')]",
      "location": "[parameters('appConfigLocation')]",
      "sku": {
        "name": "standard"
      },
      "properties": {
        "disableLocalAuth": true,
        "enablePurgeProtection": true
      }
    },
    {
      "type": "Microsoft.AppConfiguration/configurationStores/replicas",
      "apiVersion": "2022-03-01-preview",
      "name": "[format('{0}/{1}', parameters('appConfigName'), parameters('replicaName'))]",
      "location": "[parameters('replicaLocation')]",
      "dependsOn": [
        "[resourceId('Microsoft.AppConfiguration/configurationStores', parameters('appConfigName'))]"
      ]
    }
  ]
}

Configure with Bicep#

To deploy App Configuration Stores that pass this rule:

  • Set sku.name to Standard (required for geo-replication).
  • Deploy a replica sub-resource (child resource).
  • Set location on replica sub-resource to a different location than the app configuration store.

For example:

Azure Bicep snippet
@description('The name of the app configuration store.')
param appConfigName string = 'configstore01'

@description('The name of the replica.')
param replicaName string = 'replica01'

@description('The location resources will be deployed.')
param appConfigLocation string = resourceGroup().location

@description('The location where the replica will be deployed.')
param replicaLocation string = 'northeurope' 

resource store 'Microsoft.AppConfiguration/configurationStores@2022-05-01' = {
  name: appConfigName
  location: appConfigLocation
  sku: {
    name: 'standard'
  }
  properties: {
    disableLocalAuth: true
    enablePurgeProtection: true
  }
}

resource replica 'Microsoft.AppConfiguration/configurationStores/replicas@2022-03-01-preview' = {
  name: replicaName
  location: replicaLocation
  parent: store
}

Last update: 2022-12-03

Comments