Docker + Serverless? Sim, é possível com Azure Functions!

Renato Groffe
Azure na Pratica
Published in
2 min readOct 8, 2020

Embora na Web discussões como Docker versus Serverless ocorram com alguma frequência, essas 2 abordagens não devem ser consideradas como excludentes entre si. E um caso que exemplifica bem essa possibilidade de combinação de containers com aplicações serverless envolve as Azure Functions: o uso de imagens Docker está atualmente entre as opções para deployment de uma Function App no Microsoft Azure.

E este suporte a Docker nos abre ainda outras oportunidades: com o projeto KEDA (Kubernetes-based Event Driven Autoscaling) há agora a possibilidade de se executarem Azure Functions num cluster Kubernetes, independentemente de estarmos trabalhando num ambiente de orquestração on-premise ou em outra nuvem que não o Azure. Superamos assim o temido lock-in, em que muitas vezes ficamos aprisionados a uma tecnologia proprietária oferecida por um cloud provider.

Outro ponto a destacar ainda é o suporte oferecido para desenvolvimento multiplataforma de Azure Functions com .NET Core, Java, Node.js, TypeScript, PowerShell e Python, valendo-se para isto da utilização do Visual Studio Code em ambientes Windows, Linux e Mac. O Visual Studio 2019 e o Visual Studio for Mac também constituem alternativas para a implementação de projetos serverless baseados em Azure Functions.

Podemos gerar um novo projeto para a implementação de uma Function App através da seguinte linha de comando:

func init FunctionAppDadosCadastrais --worker-runtime dotnet --docker

Em que o valor dotnet para o parâmetro --worker-runtime indica o uso do .NET Core 3.1, ao passo que o parâmetro --docker determina que um arquivo Dockerfile será gerado durante a criação do projeto FunctionAppDadosCadastrais.

Como resultado teremos um Dockerfile similar ao conteúdo da listagem:

As imagens geradas poderão ser disponibilizadas no Azure Container Registry ou até mesmo no Docker Hub (ou qualquer outro Container Registry). Para testes com containers o mapeamento se baseará na porta 80 caso haja a necessidade de execução local.

Demonstrei recentemente durante o Azure Weekend Online #2 todos esses pontos na prática, concluindo com o deployment no Azure (clique aqui para abrir o vídeo no YouTube):

--

--

Renato Groffe
Azure na Pratica

Microsoft Most Valuable Professional (MVP), Multi-Plataform Technical Audience Contributor (MTAC), Software Engineer, Technical Writer and Speaker