Crie suas primeiras funções em contêineres nos Aplicativos de Contêiner do Azure

Neste artigo, você cria um aplicativo funcional em execução em um contêiner Linux e o implanta em um ambiente de Aplicativos de Contêiner do Azure a partir de um registro de contêiner. Ao implantar em Container Apps, você pode integrar seus aplicativos funcionais em microsserviços nativos da nuvem. Para obter mais informações, consulte Aplicativos de contêiner do Azure hospedando o Azure Functions.

Este artigo mostra como criar funções em execução em um contêiner Linux e implantar o contêiner em um ambiente de aplicativos de contêiner.

Concluir este início rápido incorre em um pequeno custo de alguns centavos de dólar ou menos em sua conta do Azure, que você pode minimizar limpando recursos quando terminar.

Importante

O suporte para hospedar aplicativos de função em Aplicativos de Contêiner do Azure está atualmente em visualização.

Escolher a linguagem de programação

Primeiro, você usa as ferramentas do Azure Functions para criar seu código de projeto como um aplicativo de função em um contêiner do Docker usando uma imagem base Linux específica do idioma. Certifique-se de selecionar 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 sua linguagem de funções. Você deve atualizar regularmente seu contêiner a partir da imagem base mais recente e reimplantar a partir da versão atualizada do contêiner. Para obter mais informações, consulte Criando aplicativos de função em contêiner.

Pré-requisitos

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

  • Instale o SDK do .NET 6.
  • Azure CLI versão 2.4 ou uma versão posterior.

Se não tiver uma subscrição do Azure, crie uma conta gratuita do Azure antes de começar.

Para publicar a imagem do aplicativo de função em contêiner que você cria em um registro de contêiner, você precisa de um ID do Docker e do Docker em execução no computador local. Se você não tiver uma ID do Docker, poderá criar 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 seu servidor de login totalmente qualificado.

Criar e ativar um ambiente virtual

Em uma pasta adequada, execute os seguintes comandos para criar e ativar um ambiente virtual chamado .venv. Certifique-se de usar uma das versões do Python suportadas pelo Azure Functions.

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

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

sudo apt-get install python3-venv

Execute todos os comandos subsequentes neste ambiente virtual ativado.

Criar e testar o projeto de funções locais

Em um terminal ou prompt de comando, execute o seguinte comando para o idioma escolhido para criar um projeto de aplicativo de função 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 Functions a partir de um arquétipo Maven:

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

O -DjavaVersion parâmetro informa ao tempo de execução do Functions qual versão do Java usar. Se quiser que as suas funções sejam executadas no Java 11, utilize -DjavaVersion=11. Quando você não especifica -DjavaVersion, o Maven assume como padrão o Java 8. Para obter mais informações, consulte Versões Java.

Importante

A JAVA_HOME variável de ambiente deve ser definida como o local 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 as instruções e forneça as seguintes informações:

Pedido valor Description
groupId com.fabrikam Um valor que identifica exclusivamente seu projeto em todos os projetos, seguindo as regras de nomenclatura de pacotes para Java.
artifactId fabrikam-functions Um valor que é o nome do jar, sem um número de versão.
Versão 1.0-SNAPSHOT Selecione o valor padrão.
embalagem com.fabrikam.functions Um valor que é o pacote Java para o código de função gerado. Utilize a predefiniçã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 --docker opção gera um Dockerfile para o projeto, que define um contêiner adequado para uso com o Azure Functions e o tempo de execução selecionado.

Navegue até a pasta do projeto:

cd fabrikam-functions

Use o comando a seguir para adicionar uma função ao seu projeto, onde o --name argumento é o nome exclusivo da sua função e o --template argumento 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" --authlevel anonymous

Use o comando a seguir para adicionar uma função ao seu projeto, onde o --name argumento é o nome exclusivo da sua função e o --template argumento 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 function.json.

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

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

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

Depois de ver o HttpExample ponto de extremidade gravado na saída, navegue até esse ponto de extremidade. Você verá uma mensagem de boas-vindas na saída da resposta.

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

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

Crie a imagem do contêiner e verifique localmente

(Opcional) Examine o Dockerfile na raiz da pasta do projeto. O Dockerfile descreve o ambiente necessário para executar o aplicativo de função no Linux. A lista completa de imagens base suportadas para o Azure Functions pode ser encontrada na página de imagem base do Azure Functions.

Na pasta raiz do projeto, execute o comando docker build , forneça um nome como azurefunctionsimagee marque como v1.0.0. Substitua <DOCKER_ID> pelo ID da sua conta do Docker Hub. Este comando cria a imagem do Docker para o contentor.

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 a compilação, execute a imagem em um contêiner local usando o comando docker run, substitua <DOCKER_ID> novamente pelo ID da conta do Docker Hub e adicione o argumento ports como-p 8080:80:

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

Depois que a imagem for iniciada no contêiner local, navegue até http://localhost:8080/api/HttpExample, que deve exibir a mesma mensagem de saudação de antes. Como a função acionada HTTP que você criou usa autorização anônima, você pode chamar a função em execução no contêiner sem precisar obter uma chave de acesso. Para obter mais informações, consulte chaves de autorização.

Depois que a imagem for iniciada no contêiner local, navegue até http://localhost:8080/api/HttpExample?name=Functions, que deve exibir a mesma mensagem de "olá" que antes. Como a função acionada HTTP que você criou usa autorização anônima, você pode chamar a função em execução no contêiner sem precisar obter uma chave de acesso. Para obter mais informações, consulte chaves de autorização.

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

Publicar a imagem do contêiner em um registro

Para disponibilizar sua imagem de contêiner para implantação em um ambiente de hospedagem, você deve enviá-la por push para um registro de contêiner.

O Registro de Contêiner do Azure é um serviço de registro privado para criar, armazenar e gerenciar 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 o seguinte comando para entrar na sua instância do Registro:

    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 seu servidor de login do registro:

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

    Substitua <LOGIN_SERVER> pelo nome totalmente qualificado do seu servidor de login do Registro e <DOCKER_ID> pelo seu ID do Docker.

  3. Use o seguinte comando para enviar o contêiner para sua instância do Registro:

    docker push <LOGIN_SERVER>/azurefunctionsimage:v1.0.0
    
  4. Use o seguinte comando para habilitar a conta de administrador interna para que o Functions possa se conectar ao registro com um nome de usuário e senha:

    az acr update -n <REGISTRY_NAME> --admin-enabled true
    
  1. Use o seguinte comando para recuperar o nome de usuário e a senha do administrador, que o Functions precisa para se conectar ao registro:

    az acr credential show -n <REGISTRY_NAME> --query "[username, passwords[0].value]" -o tsv
    

    Importante

    O nome de usuário e a senha da conta de administrador são credenciais importantes. Certifique-se de armazená-los de forma segura e nunca em um local acessível, como um repositório público.

Criar recursos de suporte do Azure para sua função

Antes de implantar seu contêiner no Azure, você precisa criar três recursos:

  • Um grupo de recursos, que é um contêiner lógico para recursos relacionados.
  • Uma conta de armazenamento, que é usada para manter o estado e outras informações sobre suas funções.
  • Um ambiente de Aplicativos de Contêiner do Azure com um espaço de trabalho do Log Analytics.

Use os comandos a seguir para criar esses itens.

  1. Se ainda não o fez, inicie sessão no Azure.

    O az login comando inicia sessão na sua conta do Azure. Use az account set quando tiver mais de uma assinatura associada à sua conta.

  2. Execute o seguinte comando para atualizar a CLI do Azure para a versão mais recente:

    az upgrade
    

    Se a sua versão da CLI do Azure não for a versão mais recente, uma instalação será iniciada. A forma de atualização depende do seu sistema operacional. Você pode prosseguir após a conclusão da atualização.

  3. Execute os seguintes comandos que atualizam a extensão Aplicativos de Contêiner do Azure e registram namespaces exigidos pelos Aplicativos de Contêiner:

    az extension add --name containerapp --upgrade -y
    az provider register --namespace Microsoft.Web 
    az provider register --namespace Microsoft.App 
    az provider register --namespace Microsoft.OperationalInsights 
    
  4. Crie um grupo de recursos chamado AzureFunctionsContainers-rg.

    az group create --name AzureFunctionsContainers-rg --location eastus
    

    Este az group create comando cria um grupo de recursos na região Leste dos EUA. Se, em vez disso, você quiser usar uma região perto de você, usando um código de região disponível retornado do comando az account list-locations . Você deve modificar os comandos subsequentes para usar sua região personalizada em vez de eastus. Só pode utilizar regiões atualmente suportadas na pré-visualização.

  5. Crie o ambiente do Aplicativo de Contêiner do Azure com perfis de carga de trabalho habilitados.

    az containerapp env create --name MyContainerappEnvironment --enable-workload-profiles --resource-group AzureFunctionsContainers-rg --location eastus
    

    Este comando pode levar até 10 minutos para ser concluído.

  6. Crie uma conta de armazenamento de uso geral em seu grupo de recursos e região.

    az storage account create --name <STORAGE_NAME> --location eastus --resource-group AzureFunctionsContainers-rg --sku Standard_LRS
    

    O az storage account create comando cria a conta de armazenamento.

    No exemplo anterior, substitua <STORAGE_NAME> por um nome apropriado para você e exclusivo no Armazenamento do Azure. Os nomes de armazenamento devem conter apenas números de 3 a 24 caracteres e letras minúsculas. Standard_LRS especifica uma conta de uso geral suportada pelo Functions.

  7. Antes de continuar, use este comando para verificar se seu ambiente está pronto.

    az containerapp env show -n MyContainerappEnvironment -g AzureFunctionsContainers-rg
    

Criar e configurar um aplicativo de função no Azure com a imagem

Um aplicativo de função no Azure gerencia a execução de suas funções em seu ambiente de Aplicativos de Contêiner do Azure. Nesta seção, você usa os recursos do Azure da seção anterior para criar um aplicativo de função a partir de uma imagem em um registro de contêiner em um ambiente de Aplicativos de Contêiner. Você também configura o novo ambiente com uma cadeia de conexão para a conta de Armazenamento do Azure necessária.

Use o az functionapp create comando para criar um aplicativo de função no novo ambiente gerenciado apoiado pelos Aplicativos de Contêiner do Azure:

az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --workload-profile-name "Consumption" --resource-group AzureFunctionsContainers-rg --functions-version 4 --runtime dotnet-isolated --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --registry-server <LOGIN_SERVER> --registry-username <REGISTRY_NAME> --registry-password <ADMIN_PASSWORD> 
az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --workload-profile-name "Consumption" --resource-group AzureFunctionsContainers-rg --functions-version 4 --runtime node --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --registry-server <LOGIN_SERVER> --registry-username <REGISTRY_NAME> --registry-password <ADMIN_PASSWORD> 
az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --workload-profile-name "Consumption" --resource-group AzureFunctionsContainers-rg --functions-version 4 --runtime java --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --registry-server <LOGIN_SERVER> --registry-username <REGISTRY_NAME> --registry-password <ADMIN_PASSWORD> 
az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --workload-profile-name "Consumption" --resource-group AzureFunctionsContainers-rg --functions-version 4 --runtime powershell --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --registry-server <LOGIN_SERVER> --registry-username <REGISTRY_NAME> --registry-password <ADMIN_PASSWORD> 
az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --workload-profile-name "Consumption" --resource-group AzureFunctionsContainers-rg --functions-version 4 --runtime python --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --registry-server <LOGIN_SERVER> --registry-username <REGISTRY_NAME> --registry-password <ADMIN_PASSWORD> 
az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --workload-profile-name "Consumption" --resource-group AzureFunctionsContainers-rg --functions-version 4 --runtime node --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --registry-server <LOGIN_SERVER> --registry-username <REGISTRY_NAME> --registry-password <ADMIN_PASSWORD> 

az functionapp create No comando, o --environment parâmetro especifica o ambiente Container Apps e o --image parâmetro especifica a imagem a ser usada para o aplicativo de função. Neste exemplo, substitua <STORAGE_NAME> pelo nome usado na seção anterior para a conta de armazenamento. Além disso, substitua <APP_NAME> por um nome globalmente exclusivo apropriado para você, <LOGIN_SERVER> com seu servidor de Registro de Contêiner totalmente qualificado, <REGISTRY_NAME> com seu nome de registro para a conta e <ADMIN_PASSWORD> com a senha para sua conta de administrador.

Importante

O nome de usuário e a senha da conta de administrador são credenciais importantes. Certifique-se de armazená-los de forma segura e nunca em um local acessível, como um repositório público.

A especificação --workload-profile-name "Consumption" cria seu aplicativo em um ambiente usando o perfil de carga de trabalho padrão Consumption , que custa o mesmo que a execução em um plano de Consumo de Aplicativos de Contêiner. Quando você cria o aplicativo de função pela primeira vez, ele extrai a imagem inicial do seu registro.

Neste ponto, suas funções estão sendo executadas em um ambiente de aplicativos de contêiner, com as configurações de aplicativo necessárias já adicionadas. Quando necessário, você pode adicionar outras configurações em seu aplicativo de funções da maneira padrão para Funções. Para obter mais informações, consulte Usar configurações do aplicativo.

Gorjeta

Ao fazer alterações subsequentes no código da função, você precisa reconstruir o contêiner, publicar novamente a imagem no Registro e atualizar o aplicativo de função com a nova versão da imagem. Para obter mais informações, consulte Atualizar uma imagem no Registro

Verificar suas funções no Azure

Com a imagem implantada em seu aplicativo de função no Azure, agora você pode invocar a função por meio de solicitações HTTP.

  1. Execute o seguinte az functionapp function show comando para obter o URL da sua nova função:

    az functionapp function show --resource-group AzureFunctionsContainers-rg --name <APP_NAME> --function-name HttpExample --query invokeUrlTemplate 
    

    Substitua <APP_NAME> pelo nome do seu aplicativo de função.

  1. Use a URL que você acabou de obter para chamar o ponto de extremidade da HttpExample função, anexando a cadeia de caracteres de consulta ?name=Functions.
  1. Use a URL que você acabou de obter para chamar o ponto de extremidade da HttpExample função.

Quando você navega para essa URL, o navegador deve exibir uma saída semelhante à de quando você executou a função localmente.

O URL da solicitação deve ter esta aparência:

https://myacafunctionapp.kindtree-796af82b.eastus.azurecontainerapps.io/api/httpexample?name=functions

https://myacafunctionapp.kindtree-796af82b.eastus.azurecontainerapps.io/api/httpexample

Clean up resources (Limpar recursos)

Se quiser continuar a trabalhar com o Azure Function utilizando os recursos que criou neste artigo, pode deixar todos esses recursos no lugar.

Quando terminar de trabalhar com essa implantação de aplicativo de função, exclua o AzureFunctionsContainers-rg grupo de recursos para limpar todos os recursos desse grupo:

az group delete --name AzureFunctionsContainers-rg

Próximos passos