DEV Community

Kenichiro Nakamura
Kenichiro Nakamura

Posted on

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!

Top comments (0)