---
title: "Globally Distributed Serverless URL Shortener Using Azure Functions and Cosmos DB"
description: "Multi-region deployment of Azure Functions and Cosmos DB with Traffic Manager"
url: "https://www.pulumi.com/dev/examples/classic-azure-ts-serverless-url-shortener-global/"
image: "https://www.pulumi.com/assets/og/dev/examples/classic-azure-ts-serverless-url-shortener-global.png"
---

# Globally Distributed Serverless URL Shortener Using Azure Functions and Cosmos DB

Multi-region deployment of Azure Functions and Cosmos DB with Traffic Manager

- Source on GitHub: https://github.com/pulumi/examples/tree/master/classic-azure-ts-serverless-url-shortener-global
- Deploy with Pulumi: https://app.pulumi.com/new?template=https%3A%2F%2Fgithub.com%2Fpulumi%2Fexamples%2Ftree%2Fmaster%2Fclassic-azure-ts-serverless-url-shortener-global

## Get started with this example

This example lives in the [pulumi/examples](https://github.com/pulumi/examples/tree/master/classic-azure-ts-serverless-url-shortener-global) repo. Pull down just this directory to follow along:

```bash
git clone --filter=blob:none --sparse https://github.com/pulumi/examples pulumi-examples
git -C pulumi-examples sparse-checkout set classic-azure-ts-serverless-url-shortener-global
cd pulumi-examples/classic-azure-ts-serverless-url-shortener-global
```

Multi-region deployment of Azure Functions and Cosmos DB with Traffic Manager

## Running the App

1. Create a new stack:

    ```bash
    pulumi stack init dev
    ```

1. Login to Azure CLI (you will be prompted to do this during deployment if you forget this step):

    ```bash
    az login
    ```

1. Restore NPM dependencies:

    ```bash
    npm install
    ```

1. Specify the Azure subscription and regions to deploy the application:

    ```bash
    pulumi config set locations westus,westeurope
    pulumi config set azure:subscriptionId <YOUR_SUBSCRIPTION_ID>
    ```

1. Run `pulumi up` to preview and deploy changes:

    ```console
    $ pulumi up
    Previewing changes:
    ...

    Performing changes:
    ...
    info: 23 changes performed:
        + 23 resources created
    Update duration: 21m33.3252322s
    ```

1. Add a short URL:

    ```console
    $ pulumi stack output addEndpoint
    https://urlshort-add94ac80f8.azurewebsites.net/api/urlshort-add
    $ curl -H "Content-Type: application/json" \
        --request POST \
        -d '{"id":"pulumi","url":"https://pulumi.com"}' \
        "$(pulumi stack output addEndpoint)"
    Short URL saved
    ```

1. Query a short URL:

    ```console
    $ pulumi stack output endpoint
    http://urlshort-tm.trafficmanager.net/api/
    $ curl -L $(pulumi stack output endpoint)pulumi
    <!doctype html>
    <html lang="en-US" prefix="og: http://ogp.me/ns#">
        <head>
        <title>
            Pulumi
        </title>
    ...
    ```
