Output Bindings

Output bindings allow your Azure Function to send data to other services or resources without requiring explicit SDK code. This simplifies your function's code and leverages the power of Azure's integration capabilities.

How Output Bindings Work

In Azure Functions, output bindings are defined in the function.json file (for C# script, JavaScript, PowerShell, Python, etc.) or through attributes (for C#, F#, Java). When your function executes successfully, the return value or a specified output parameter is automatically sent to the configured output binding.

Common Use Cases

Example: A function that writes a message to a Storage Queue.

Supported Output Binding Types

Azure Functions supports a wide range of output bindings. Here are some of the most commonly used:

Binding Type Description Example Services
queue Sends a message to a Storage Queue. Azure Storage Queue
blob Writes data to a Blob Storage container. Azure Blob Storage
table Inserts or updates an entity in a Storage Table. Azure Table Storage
serviceBus Sends a message to a Service Bus Queue or Topic. Azure Service Bus
eventHub Sends event data to an Event Hub. Azure Event Hubs
cosmosDB Inserts or updates documents in Cosmos DB. Azure Cosmos DB
sql Executes an SQL query to insert or update data. Azure SQL Database, SQL Server
http Returns an HTTP response to the caller. HTTP Trigger Functions

Defining Output Bindings

In function.json

For languages like JavaScript, Python, and PowerShell, output bindings are defined in the function.json file within the function's directory.

{
  "bindings": [
    {
      "name": "req",
      "type": "httpTrigger",
      "direction": "in",
      "methods": [ "get", "post" ]
    },
    {
      "name": "msg",
      "type": "queue",
      "direction": "out",
      "queueName": "my-output-queue",
      "connection": "AzureWebJobsStorage"
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    }
  ]
}
The $return special name is used for binding the function's return value directly to an output binding.

Using Attributes (C# / F#)

In C# and F#, attributes are used to define bindings.

using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;

public static class QueueOutputFunction
{
    [FunctionName("QueueOutputExample")]
    public static void Run(
        [HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequest req,
        [Queue("my-output-queue", Connection = "AzureWebJobsStorage")] out string msg,
        ILogger log)
    {
        log.LogInformation("HTTP trigger function processed a request.");
        string name = req.Query["name"];
        string requestBody = new StreamReader(req.Body).ReadToEnd();
        dynamic data = JsonConvert.DeserializeObject(requestBody);
        name = name ?? data?.name;

        msg = $"Hello, {name ?? "World"}!";
        log.LogInformation($"Message sent to queue: {msg}");
    }
}

Common Output Binding Configurations

Sending to Azure Storage Queue

Configure a queue output binding to send messages.

{
  "name": "outputQueueItem",
  "type": "queue",
  "direction": "out",
  "queueName": "my-output-queue",
  "connection": "MyStorageConnection"
}

In your function code (e.g., JavaScript):

context.bindings.outputQueueItem = "This is a message for the queue.";

Writing to Azure Blob Storage

Configure a blob output binding to write file content.

{
  "name": "outputBlob",
  "type": "blob",
  "direction": "out",
  "path": "output-container/{name}.txt",
  "connection": "AzureWebJobsStorage"
}

In your function code (e.g., Python):

import azure.functions as func

def main(req: func.HttpRequest, outputBlob: func.Out[str]) -> None:
    outputBlob.set("Content for the blob file.")
Use tokens like {name} or {rand-guid} in the path property to dynamically generate blob names.

Best Practices

Always refer to the official Azure Functions documentation for the most up-to-date information on specific binding types, configurations, and supported languages.