DEV Community

Kenichiro Nakamura
Kenichiro Nakamura

Posted on

4 1

Azure Functions: Use imperative binding to control output target

Azure Function is great, especially binding feature is awesome. But we need to control how binding work in run time, rather than compiled time.

Scenario

I want to save file to different blob storage depending on contents. The target path varies depending on file content.

Solution

Use Binder. You can find example here.

  • Pass Binder as argument
  • Instantiate appropriate binding attribute, such as BlobAttribute, StorageAccountAttribute, etc
  • Instantiate binder.BindAsync
  • Write output
public static class IBinderExampleMultipleAttributes
{
    [FunctionName("CreateBlobInDifferentStorageAccount")]
    public async static Task RunAsync(
            [QueueTrigger("myqueue-items-source-binder2")] string myQueueItem,
            Binder binder,
            ILogger log)
    {
        log.LogInformation($"CreateBlobInDifferentStorageAccount function processed: {myQueueItem}");
        var attributes = new Attribute[]
        {
        new BlobAttribute($"samples-output/{myQueueItem}", FileAccess.Write),
        new StorageAccountAttribute("MyStorageAccount")
        };
        using (var writer = await binder.BindAsync<TextWriter>(attributes))
        {
            await writer.WriteAsync("Hello World!!");
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

Summary

I love this feature as we can still use binding feature but more dynamic way!

Heroku

Simplify your DevOps and maximize your time.

Since 2007, Heroku has been the go-to platform for developers as it monitors uptime, performance, and infrastructure concerns, allowing you to focus on writing code.

Learn More

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs