Criar um aplicativo de funções em um contêiner local do Linux

Este artigo mostra como usar as ferramentas do Azure Functions Core para criar sua primeira função em um contêiner do Linux no seu computador local, verificar a função localmente e publicar a função conteinerizada em um registro de contêiner. A partir de um registro de contêiner, você pode implantar facilmente suas funções conteinerizadas no Azure.

Para ver um exemplo completo de implantação de funções conteinerizadas no Azure, que inclui as etapas neste artigo, confira um dos seguintes artigos:

Você também pode criar um aplicativo de funções no portal do Azure usando um aplicativo de funções conteinerizado a partir de um registro de contêiner. Para saber mais, confira o Criação no portal do Azure usando contêineres.

Escolha a linguagem de desenvolvimento

Primeiro, você usa as ferramentas do Azure Functions para criar o código do projeto como um aplicativo de funções em um contêiner do Docker usando uma imagem base do Linux específica da linguagem. Selecione o idioma de sua escolha na parte superior do artigo.

O Core Tools gera automaticamente um Dockerfile para seu projeto que usa a versão mais atualizada da imagem base correta para a linguagem das suas funções. Você deve atualizar regularmente o contêiner a partir da imagem base mais recente e reimplantar a partir da versão atualizada do contêiner. Para mais informações, consulte Criação de aplicativos de funções em contêineres.

Pré-requisitos

Antes de começar, você precisa ter os seguintes requisitos em vigor:

Caso você não tenha uma assinatura do Azure, crie uma conta gratuita do Azure antes de começar.

Para publicar a imagem do aplicativo de funções em contêineres que você cria em um registro de contêiner, você precisa de uma ID do Docker e do Docker em execução no computador local. Se você não tiver uma ID do Docker, crie uma conta do Docker.

Você também precisa concluir a seção Criar um registro de contêiner do início rápido do Registro de Contêiner para criar uma instância do registro. Anote o nome do servidor de logon totalmente qualificado.

Criar e ativar um ambiente virtual

Em uma pasta adequada, execute os comandos a seguir para criar e ativar um ambiente virtual chamado .venv. Use uma das versões do Python com suporte no Azure Functions.

python -m venv .venv
source .venv/bin/activate

Se o Python não instalou o pacote venv na distribuição do Linux, execute o seguinte comando:

sudo apt-get install python3-venv

Você executará todos os comandos posteriores neste ambiente virtual ativado.

Criar e testar o projeto de funções local

Em um terminal ou prompt de comando, execute o comando a seguir referente à linguagem escolhida para criar um projeto de aplicativo de funções na pasta atual:

func init --worker-runtime dotnet-isolated --docker
func init --worker-runtime node --language javascript --docker
func init --worker-runtime powershell --docker
func init --worker-runtime python --docker
func init --worker-runtime node --language typescript --docker

Em uma pasta vazia, execute o seguinte comando para gerar o projeto do Functions com base em um arquétipo Maven:

mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype -DjavaVersion=8 -Ddocker

O parâmetro -DjavaVersion informa ao runtime do Functions a versão do Java a ser usada. Use -DjavaVersion=11 se desejar que as funções sejam executadas no Java 11. Quando você não especifica -DjavaVersion, o Maven assume o Java 8 como padrão. Para obter mais informações, confira Versões do Java.

Importante

A variável de ambiente JAVA_HOME precisa ser definida como a localização de instalação da versão correta do JDK para concluir este artigo.

O Maven solicita os valores necessários para concluir a geração do projeto na implantação. Siga os avisos e forneça as seguintes informações:

Prompt Valor Descrição
groupId com.fabrikam Um valor que identifica exclusivamente o projeto em todos os projetos, seguindo as regras de nomenclatura do pacote para Java.
artifactId fabrikam-functions Um valor que é o nome do jar, sem um número de versão.
version 1.0-SNAPSHOT Selecione o valor padrão.
package com.fabrikam.functions Um valor que é o pacote Java para o código de função gerado. Use o padrão.

Digite Y ou pressione Enter para confirmar.

O Maven cria os arquivos de projeto em uma nova pasta chamada artifactId, que, neste exemplo, é fabrikam-functions.

A opção --docker gera um Dockerfile para o projeto, que define um contêiner adequado para uso com o Azure Functions e com o runtime selecionado.

Navegue até a pasta do projeto:

cd fabrikam-functions

Use o comando a seguir para adicionar uma função ao projeto, em que o argumento --name é o nome exclusivo da função e o argumento --template especifica o gatilho da função. func new cria um arquivo de código C# em seu projeto.

func new --name HttpExample --template "HTTP trigger"

Use o comando a seguir para adicionar uma função ao projeto, em que o argumento --name é o nome exclusivo da função e o argumento --template especifica o gatilho da função. func new cria uma subpasta correspondente ao nome da função que contém um arquivo de configuração chamado func new.

func new --name HttpExample --template "HTTP trigger"

Para testar a função localmente, inicie o host de runtime do Azure Functions local na raiz da pasta do projeto.

func start  
func start  
npm install
npm start
mvn clean package  
mvn azure-functions:run

Após ver o ponto de extremidade HttpExample gravado na saída, navegue até este ponto de extremidade. Você deverá ver uma mensagem de boas-vindas na saída da resposta.

Após ver o ponto de extremidade HttpExample gravado na saída, navegue até http://localhost:7071/api/HttpExample?name=Functions. O navegador deve exibir uma mensagem "olá" que ecoa de volta Functions, o valor fornecido para o parâmetro de consulta name.

Pressione Ctrl+C (Command+C no macOS) para interromper o host.

Compilar a imagem de contêiner e verificá-la localmente

(Opcional) Examine o Dockerfile na raiz da pasta do projeto. O Dockerfile descreve o ambiente necessário para executar o aplicativo de funções no Linux. A lista completa de imagens base com suporte para Azure Functions encontram-se na página de imagens de base do Azure Functions.

Na pasta do projeto raiz, execute o comando docker build e forneça um nome, como azurefunctionsimage, e uma marca, como v1.0.0. Substitua <DOCKER_ID> pela ID da conta do Hub do Docker. Esse comando compila a imagem do Docker para o contêiner.

docker build --tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 .

Quando o comando for concluído, você poderá executar o novo contêiner localmente.

Para verificar o build, execute a imagem em um contêiner local usando o comando docker run, substitua <DOCKER_ID> novamente pela ID da conta do Docker Hub e adicione o argumento de portas como -p 8080:80:

docker run -p 8080:80 -it <DOCKER_ID>/azurefunctionsimage:v1.0.0

Quando a imagem iniciar no contêiner local, navegue até http://localhost:8080/api/HttpExample, que deverá exibir a mesma mensagem de saudação anterior. Como a função disparada por HTTP que você criou usa autorização anônima, você ainda pode chamar a função em execução no contêiner sem ter que obter uma chave de acesso. Para obter mais informações, confira chaves de autorização.

Quando a imagem iniciar no contêiner local, navegue até http://localhost:8080/api/HttpExample?name=Functions, que deverá exibir a mesma mensagem "olá" que anteriormente. Como a função disparada por HTTP que você criou usa autorização anônima, você ainda pode chamar a função em execução no contêiner sem ter que obter uma chave de acesso. Para obter mais informações, confira chaves de autorização.

Depois de verificar o aplicativo de funções no contêiner, pressione Ctrl+C (Command+C no macOS) para interromper a execução.

Publicar a imagem de contêiner em um registro

Para disponibilizar sua imagem de contêiner para implantação em um ambiente de hospedagem, efetue o push dela para um registro de contêiner.

O Registro de Contêiner do Azure é um serviço de registro privado para gerar, armazenar e fornecer imagens de contêiner e artefatos relacionados. Você deve usar um serviço de registro privado para publicar seus contêineres nos serviços do Azure.

  1. Use este comando para entrar na instância do Registro usando suas credenciais atuais do Azure:

    az acr login --name <REGISTRY_NAME>
    

    No comando anterior, substitua <REGISTRY_NAME> pelo nome da instância do Registro de Contêiner.

  2. Use o seguinte comando para marcar sua imagem com o nome totalmente qualificado do servidor de logon do registro:

    docker tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 
    

    Substitua <LOGIN_SERVER> pelo nome totalmente qualificado do servidor de logon do registro e <DOCKER_ID> pela ID do Docker.

  3. Use este comando para enviar o contêiner por push para a instância do registro:

    docker push <LOGIN_SERVER>/azurefunctionsimage:v1.0.0
    

Próximas etapas