Redimensionando Imagens com Azure Functions e Blob Trigger

Olá, tudo bem?

No post + vídeo de hoje, demonstro como criar uma Azure Functions para redimensionar images. Para isto precisamos apenas de:

1-Uma conta no Azure;
2-Duas contas de armazenamento (Uma para logs e a outra para armazenar as imagens);
3-Uma Azure Function;
4-Imagens :)

Como funciona?

Para resolver este cenário, nossa Azure Function utilizará Blob Triggers, isto é, para cada novo blob criado, a Azure Function será disparada. Após o processamento, a nova imagem será armazenada em um blob.

A grande sacada é utilizar Consumption plan, desta maneira você só será cobrado quando a função for executada. Vale lembrar que usando Consumption Plan (até o momento), não é possível especificar o tamanho / características da instância.
Isto é, o próprio Azure irá escalar e setar um tamanho baseado na sua demanda. Se esperar até 10 segundos entre armazenar a primeira imagem, redimensionar e gravar a nova é um tempo absurdo para o seu cenário, vale à pena continuar usando App Service Plan, onde é possível especificar o tamanho da instância (Basic, Standard, Premium).

Código necessário:

project.json

{
    "frameworks": 
    {
        "net46":
        {
            "dependencies": 
            {
                "ImageResizer": "4.0.5"
            }
        }
    }
}

run.csx

using ImageResizer;
using ImageResizer.ExtensionMethods;

public static void Run(Stream myBlob, 
                       string blobname, 
                       string blobextension, 
                       Stream outputBlob, 
                       TraceWriter log)
{
    log.Info($"C# Blob trigger function Processed blob\n Name:{blobname} 
                \n Size: {myBlob.Length} Bytes");

    var instructions = new Instructions
    {
        Width = 200,
        Mode = FitMode.Carve,
        Scale = ScaleMode.Both
    };
    ImageBuilder.Current.Build(new ImageJob(myBlob, outputBlob, instructions));
}

Por fim, basta usar o Blob Trigger e Azure Blob Storage como output e especificar o Path da imagem (container/imagem) de entrada e de saída.

Confira o vídeo com o passo a passo no canal Azure Channel Brasil:

https://youtu.be/_20SqMTD_7A

Abraços e até o próximo post!

Compartilhar