A Helm chart deployed to AKS that stores TODOs in an Azure Cosmos DB MongoDB API | C#

View Code Deploy

Stands up an Azure Kubernetes Service (AKS) cluster and a MongoDB-flavored instance of Azure Cosmos DB. On top of the AKS cluster, we also deploy a Helm Chart with a simple Node.js TODO app bitnami/node, swapping out the usual in-cluster MongoDB instance with our managed Cosmos DB instance.


Running the Example

In this example we will provision a Kubernetes cluster running a public Apache web server, verify we can access it, and clean up when done.

  1. Get the code:

    $ git clone git@github.com:pulumi/examples.git
    $ cd examples/azure-cs-aks-cosmos-helm
  2. Create a new stack, which is an isolated deployment target for this example:

    $ pulumi stack init
  3. Set the required configuration variables for this program:

    $ pulumi config set azure-native:location westus2
  4. Deploy everything with the pulumi up command. This provisions all the Azure resources necessary, including an Active Directory service principal, AKS cluster, and then deploys the Apache Helm Chart, all in a single gesture (takes 5-10 min):

    $ pulumi up
         Type                                                          Name                          Status      Info
    +   pulumi:pulumi:Stack                                           azure-cs-aks-cosmos-helm-dev  created     1 warning
    +   ├─ kubernetes:helm.sh/v3:Chart                                node                          created     
    +   │  ├─ kubernetes:core/v1:Service                              node                          created     
    +   │  └─ kubernetes:apps/v1:Deployment                           node                          created     
    +   ├─ example:component:CosmosDBMongoDB                          mongo-todos                   created     
    +   │  ├─ azure-native:documentdb:DatabaseAccount                 cosmos-mongodb                created     
    +   │  └─ azure-native:documentdb:MongoDBResourceMongoDBDatabase  todos                         created     
    +   ├─ example:component:AksCluster                               demoaks                       created     
    +   │  ├─ azuread:index:Application                               app                           created     
    +   │  ├─ random:index:RandomPassword                             pw                            created     
    +   │  ├─ tls:index:PrivateKey                                    ssh-key                       created     
    +   │  ├─ azuread:index:ServicePrincipal                          service-principal             created     
    +   │  ├─ azuread:index:ServicePrincipalPassword                  sp-password                   created     
    +   │  ├─ azure-native:containerservice:ManagedCluster            demoaks                       created     
    +   │  └─ pulumi:providers:kubernetes                             k8s-provider                  created     
    +   ├─ azure-native:resources:ResourceGroup                       cosmosrg                      created     
    +   └─ kubernetes:core/v1:Secret                                  mongo-secrets                 created     
        Endpoint: ""
  5. Now your database, your cluster, and application are ready. An output variable will be printed to provide the application endpoint.

    $ curl $(pulumi stack output Endpoint)
    <!doctype html>
    <html ng-app="scotchTodo">
        <!-- META -->
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1"><!-- Optimize mobile viewport -->
        <title>Node/Angular Todo App</title>
  6. Once you are done, you can destroy all of the resources, and the stack:

    $ pulumi destroy
    $ pulumi stack rm
    $ rm kubeconfig.yaml