Setup Azure CosmosDB
Creating an Azure CosmosDB account
Follow the instructions from the Azure documentation on how to create an Azure CosmosDB account.
In order to setup CosmosDB as a state store, you will need the following properties:
- URL: the CosmosDB url. for example: https://**.documents.azure.com:443/
- Master Key: The key to authenticate to the CosmosDB account
- Database: The name of the database
- Collection: The name of the collection
Create a Dapr component
The next step is to create a Dapr component for CosmosDB.
Create the following YAML file named cosmos.yaml
:
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: <name>
spec:
type: state.azure.cosmosdb
metadata:
- name: url
value: <REPLACE-WITH-URL>
- name: masterKey
value: <REPLACE-WITH-MASTER-KEY>
- name: database
value: <REPLACE-WITH-DATABASE>
- name: collection
value: <REPLACE-WITH-COLLECTION>
The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described here
The following example uses the Kubernetes secret store to retrieve the secrets:
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: <name>
spec:
type: state.azure.cosmosdb
metadata:
- name: url
value: <REPLACE-WITH-URL>
- name: masterKey
secretKeyRef:
name: <KUBERNETES-SECRET-NAME>
key: <KUBERNETES-SECRET-KEY>
- name: database
value: <REPLACE-WITH-DATABASE>
- name: collection
value: <REPLACE-WITH-COLLECTION>
Apply the configuration
In Kubernetes
To apply the CosmosDB state store to Kubernetes, use the kubectl
CLI:
kubectl apply -f cosmos.yaml
Running locally
The Dapr CLI will automatically create a directory named components
in your current working directory with a Redis component.
To use CosmosDB, replace the redis.yaml file with cosmos.yaml file above.
Partition keys
The Azure CosmosDB state store will use the key
property provided in the requests to the Dapr API to determine the partition key.
For example, the following operation will use the key nihilus
as the partition key:
curl -X POST http://localhost:3500/v1.0/state \
-H "Content-Type: application/json"
-d '[
{
"key": "nihilus",
"value": "darth"
}
]'