1. Packages
  2. Azure Classic
  3. How-to Guides
  4. Reusable Component to Create Globally-distributed Applications with Azure Cosmos DB

We recommend using Azure Native.

Azure Classic v5.80.0 published on Monday, Jun 10, 2024 by Pulumi

Reusable Component to Create Globally-distributed Applications with Azure Cosmos DB

azure logo

We recommend using Azure Native.

Azure Classic v5.80.0 published on Monday, Jun 10, 2024 by Pulumi

    View Code Deploy this example with Pulumi

    This example demonstrates the usage of Pulumi to create globally-distributed applications with Azure Cosmos DB as the backend and pluggable infrastrustructure as the web tier.

    The application shows several notable features:

    1. Easy global deployments - a config setting provides a list of all the regions to deploy and a single execution deploys across them all.
    2. Abstraction - the CosmosApp component - abstracts away all the common logic for a global app with Cosmos DB multi-region data distribution and Traffic Manager for routing the traffic.
    3. Multi-model - examples are provided for serverless functions, containers, and virtual machines, all fitting to the above abstraction.

    CosmosApp component

    The CosmosApp defines a skeleton for the application. While not limiting the type of compute resources, it creates the multi-regional pieces of the infrastructure:

    Cosmos App

    The application has three example of using this component with the following compute services:

    • Azure Functions
    • Azure Container Instances
    • Azure VM Scale Sets + Azure Load Balancer

    Prerequisites

    1. Install Pulumi
    2. Configure Azure credentials

    Steps

    Step 1: Create a new stack

    $ pulumi stack init dev
    

    Step 2: Log in to the Azure CLI

    You will be prompted to do this during deployment if you forget this step.

    $ az login
    

    Step 3: Install NPM dependencies

    $ npm install
    

    Step 4: Deploy your changes

    Run pulumi up to preview and deploy changes:

    $ pulumi up
    Previewing changes:
    +  azure-ts-cosmosapp-component-dev  create
    +  examples:azure:CosmosApp vms create
    +  azure:network:VirtualNetwork vnet-westeurope create
    +  azure:network:PublicIp pip-westeurope create
    +  azure:trafficmanager:Profile tmvms create
    +  azure:trafficmanager:Endpoint tmvmswesteurope create
    +  azure:cosmosdb:Account cosmos-vms
    ...
    

    Step 5: Check the deployed website endpoints

    Three endpoints are now available. For example,

    $ pulumi stack output functionsEndpoint
    http://functionscosmosfunc-rgcc15ea50.trafficmanager.net/api/cosmos
    
    $ curl "$(pulumi stack output functionsEndpoint)"
    Document 'cosmos' not found
    

    Go to the Azure portal and add a document with the ID “cosmos” to receive a non-empty response.

    Running Unit Tests

    The unittests.ts file contains two sample unit tests that can be run with Mocha:

    mocha -r ts-node/register unittests.ts
    

    Running Policy Pack

    The policy folder contains two sample policies that can be applied with the policy-pack argument:

    pulumi up --policy-pack policy
    
    azure logo

    We recommend using Azure Native.

    Azure Classic v5.80.0 published on Monday, Jun 10, 2024 by Pulumi