Azure Functions

Prerequisites

Install the following software:

Before you begin, you’ll need to login to Azure:

az login

Note

If you deploy to Azure Functions using a different method, you should be able to adapt the instructions accordingly.

Files

The following files are part of Azure functions setup and may need to be tweaked:

  • host.json

  • local.settings.json

  • function_app.py

  • .funcignore

Deployment

In the commands below, we’re going to use the following parameters that you should adjust to match your preferences:

  • The function app: xlwings-server

  • The resource group: xlwings-server-rg

  • The storage account: xlwingsserversa

  • Region: westeurope

You may also want to skip some of the steps, e.g., if you already have an existing resource group or storage account to deploy to.

  1. Create a resource group:

    az group create --name xlwings-server-rg --location westeurope
    
  2. Create storage account:

    az storage account create --name xlwingsserversa --location westeurope --resource-group xlwings-server-rg --sku Standard_LRS
    
  3. Create the function app (if possible, use the same Python version locally as the one specified in this command):

    az functionapp create --resource-group xlwings-server-rg --consumption-plan-location westeurope --runtime python --runtime-version 3.11 --functions-version 4 --name xlwings-server --os-type linux --storage-account xlwingsserversa
    
  4. Set the required environment variables. Make sure to provide your own license key at the end of this command (you can get a free trial key here). You’ll also need to adjust the XLWINGS_ENVIRONMENT if this is not the prod environment:

    az functionapp config appsettings set --name xlwings-server --resource-group xlwings-server-rg --settings XLWINGS_ENVIRONMENT=prod XLWINGS_ENABLE_SOCKETIO=false XLWINGS_LICENSE_KEY=<YOUR_LICENSE_KEY>
    
  5. Run the following to enable the worker process to index the functions:

    az functionapp config appsettings set --name xlwings-server --resource-group xlwings-server-rg --settings AzureWebJobsFeatureFlags=EnableWorkerIndexing
    
  6. Deploy the function app (this is also the command to deploy an update):

    func azure functionapp publish xlwings-server
    

    It should terminate with the following message:

    Remote build succeeded!
    [...] Syncing triggers...
    Functions in xlwings-server:
       http_app_func - [httpTrigger]
          Invoke url: https://xlwings-server.azurewebsites.net//{*route}
    

Logging

For app logs, in Azure portal go to: Function App > My Function App. Then, under http_app_func, click on Invocations and more.

Cleanup

After running this tutorial you can get rid of all the resources again by running:

az group delete --name xlwings-server-rg

Limitations