name | description | languages | products | page_type | urlFragment | |||||
---|---|---|---|---|---|---|---|---|---|---|
Cosmos DB SDK-Type Bindings with Azure Functions (Python) |
Bind to rich SDK types when using Cosmos input. |
|
|
sample |
cosmosdb-sdk-type-bindings-with-azure-functions |
This sample demonstrates how to use the Azure Functions Cosmos DB SDK-type bindings in Python. The supported SDK types includes CosmosClient, DatabaseProxy, and ContainerProxy.
You can learn more about SDK-type bindings for Cosmos DB in the SDK-type Bindings for Python Reference.
Before running the sample, you need the following:
-
Azure Subscription: An Azure account is required.
-
Azure Functions Core Tools: Install Azure Functions Core Tools to run and test functions locally.
-
Python 3.x: Ensure Python 3.9 or later is installed on your machine.
-
Azure Storage Account: Create a storage account via the Azure Portal and get the connection string.
The code in the sample folder has already been updated to support use of SDK-type bindings for Cosmos DB. Let's walk through the changed files.
The requirements.txt
file has an additional dependency of the azurefunctions-extensions-bindings-cosmosdb
module:
azure-functions
azurefunctions-extensions-bindings-cosmosdb
Each cosmosdb_samples_* folder contains function_app.py
which imports the azurefunctions-extensions-bindings-cosmosdb
module.
import azure.functions as func
import azurefunctions.extensions.bindings.cosmosdb as cosmosdb
In each function_app.py
file, there is a function that is an HTTP trigger and Cosmos DB input. This function specifies an arg named client
and defines the type as an SDK-type.
The cosmosdb_samples_cosmosclient directory shows the type defined as CosmosClient
.
@app.cosmos_db_input(arg_name="client",
connection="CosmosDBConnection",
database_name=None,
container_name=None)
def get_docs(req: func.HttpRequest, client: cosmos.CosmosClient):
The cosmosdb_samples_databaseproxy directory shows the type defined as DatabaseProxy, and the cosmosdb_samples_containerproxy directory shows the type defined as ContainerProxy.
- Clone the repository:
git clone https://github.com/Azure-Samples/azure-functions-cosmosdb-sdk-bindings-python.git
- Navigate to the project directory:
cd cosmosdb_samples_cosmosclient
- Create a Python virtual environment and activate it.
- Install the required dependencies:
pip install -r requirements.txt
- Update
local.settings.json
: replaceCosmosDBConnection
with your Cosmos DB connection string. - Update the database and/or container name (if needed): in
function_app.py
, some Cosmos SDK types require a database name and/or a container name. Replace depending on the SDK type used that reflects that is in your Cosmos DB instance. For example, usingContainerProxy
will require a valid database name and container name. - Start the function: If you are using VS Code for development, click the "Run and Debug" button or follow the instructions for running a function locally. Outside of VS Code, follow these instructions for using Core Tools commands directly to run the function locally.
Functions: get_docs: http://localhost:7071/api/cosmos
- Execute the function:
- HTTP trigger: execute the httpTrigger by pinging the endpoint. You should see the log below printed in the terminal, where the database IDs are printed.
Found database with ID: ...
There are three main ways to deploy this to Azure:
- Deploy with the VS Code Azure Functions extension.
- Deploy with the Azure CLI.
- Deploy with the Azure Developer CLI: After installing the
azd
tool, runazd up
in the root of the project. You can also runazd pipeline config
to set up a CI/CD pipeline for deployment.
All approaches will provision a Function App, Storage account (to store the code), and a Log Analytics workspace.
Visit the SDK-type bindings in Python reference documentation to learn more about how to use SDK-type bindings in a Python Function App and the API reference documentation to learn more about what you can do with the Azure Cosmos DB library.