Azure Table Storage

Detailed information on the Azure Table Storage state store component which can be used to connect to Cosmos DB Table API and Azure Tables

Component format

To setup Azure Tablestorage state store create a component of type state.azure.tablestorage. See this guide on how to create and apply a state store configuration.

  1. apiVersion: dapr.io/v1alpha1
  2. kind: Component
  3. metadata:
  4. name: <NAME>
  5. spec:
  6. type: state.azure.tablestorage
  7. version: v1
  8. metadata:
  9. - name: accountName
  10. value: <REPLACE-WITH-ACCOUNT-NAME>
  11. - name: accountKey
  12. value: <REPLACE-WITH-ACCOUNT-KEY>
  13. - name: tableName
  14. value: <REPLACE-WITH-TABLE-NAME>
  15. # - name: cosmosDbMode
  16. # value: false

Warning

The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described here.

Spec metadata fields

FieldRequiredDetailsExample
accountNameYThe storage account name“mystorageaccount”.
accountKeyYPrimary or secondary storage key“key”
tableNameYThe name of the table to be used for Dapr state. The table will be created for you if it doesn’t exist“table”
cosmosDbModeNIf enabled, connects to Cosmos DB Table API instead of Azure Tables (Storage Accounts). Defaults to false.“false”
serviceURLNThe full storage service endpoint URL. Useful for Azure environments other than public cloud.https://mystorageaccount.table.core.windows.net/
skipCreateTableNSkips the check for and, if necessary, creation of the specified storage table. This is useful when using active directory authentication with minimal privileges. Defaults to false.“true”

Azure Active Directory (Azure AD) authentication

The Azure Cosmos DB state store component supports authentication using all Azure Active Directory mechanisms. For further information and the relevant component metadata fields to provide depending on the choice of Azure AD authentication mechanism, see the docs for authenticating to Azure.

You can read additional information for setting up Cosmos DB with Azure AD authentication in the section below.

Option 1: Setup Azure Table Storage

Follow the instructions from the Azure documentation on how to create an Azure Storage Account.

If you wish to create a table for Dapr to use, you can do so beforehand. However, Table Storage state provider will create one for you automatically if it doesn’t exist, unless the skipCreateTable option is enabled.

In order to setup Azure Table Storage as a state store, you will need the following properties:

  • AccountName: The storage account name. For example: mystorageaccount.
  • AccountKey: Primary or secondary storage key. Skip this if using Azure AD authentication.
  • TableName: The name of the table to be used for Dapr state. The table will be created for you if it doesn’t exist, unless the skipCreateTable option is enabled.
  • cosmosDbMode: Set this to false to connect to Azure Tables.

Option 2: Setup Azure Cosmos DB Table API

Follow the instructions from the Azure documentation on creating a Cosmos DB account with Table API.

If you wish to create a table for Dapr to use, you can do so beforehand. However, Table Storage state provider will create one for you automatically if it doesn’t exist, unless the skipCreateTable option is enabled.

In order to setup Azure Cosmos DB Table API as a state store, you will need the following properties:

  • AccountName: The Cosmos DB account name. For example: mycosmosaccount.
  • AccountKey: The Cosmos DB master key. Skip this if using Azure AD authentication.
  • TableName: The name of the table to be used for Dapr state. The table will be created for you if it doesn’t exist, unless the skipCreateTable option is enabled.
  • cosmosDbMode: Set this to true to connect to Azure Tables.

Partitioning

The Azure Table Storage state store uses the key property provided in the requests to the Dapr API to determine the row key. Service Name is used for partition key. This provides best performance, as each service type stores state in it’s own table partition.

This state store creates a column called Value in the table storage and puts raw state inside it.

For example, the following operation coming from service called myservice

  1. curl -X POST http://localhost:3500/v1.0/state \
  2. -H "Content-Type: application/json"
  3. -d '[
  4. {
  5. "key": "nihilus",
  6. "value": "darth"
  7. }
  8. ]'

will create the following record in a table:

PartitionKeyRowKeyValue
myservicenihilusdarth

Concurrency

Azure Table Storage state concurrency is achieved by using ETags according to the official documentation.

Last modified October 12, 2023: Update config.toml (#3826) (0ffc2e7)