Crie seu primeiro Azure Functions em contêiner
Neste artigo, você cria um aplicativo funcional em execução em um contêiner Linux e o implanta no Azure Functions.
Implantar seu código de função no Azure Functions em um contêiner requer hospedagem de plano Premium ou Dedicado (Serviço de Aplicativo). Concluir este artigo incorre em custos de alguns dólares americanos em sua conta do Azure, que você pode minimizar limpando recursos quando terminar.
Outras opções para implantar seu contêiner de aplicativo de função no Azure incluem:
Aplicativos de Contêiner do Azure: para saber mais, consulte Implantar um contêiner em aplicativos de Contêiner do Azure.
Azure Arc (atualmente em visualização): para saber mais, consulte Implantar um contêiner no Azure Arc.
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 8.0.
Instale o Azure Functions Core Tools versão 4.0.5198 ou uma versão posterior.
- Instale o Azure Functions Core Tools versão 4.x.
- Instale uma versão do Node.js suportada pelo Azure Functions.
- Instale uma versão do Python suportada pelo Azure Functions.
- Instale o SDK do .NET 6.
Instale uma versão do Java Developer Kit suportada pelo Azure Functions.
Instale o Apache Maven versão 3.0 ou superior.
- 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"
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"
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 azurefunctionsimage
e 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.
Use este comando para entrar em sua 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.Use este 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.Use este comando para enviar o contêiner para sua instância do Registro:
docker push <LOGIN_SERVER>/azurefunctionsimage:v1.0.0
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 aplicativo de função, que fornece o ambiente para executar seu código de função. Um aplicativo de função mapeia para seu projeto de função local e permite agrupar funções como uma unidade lógica para facilitar o gerenciamento, a implantação e o compartilhamento de recursos.
Use os comandos a seguir para criar esses itens. A CLI do Azure e o PowerShell são suportados. Para criar seus recursos do Azure usando o Azure PowerShell, você também precisa do módulo Az PowerShell, versão 5.9.0 ou posterior.
Se ainda não o fez, inicie sessão no Azure.
az login
O
az login
comando inicia sessão na sua conta do Azure.Crie um grupo de recursos nomeado
AzureFunctionsContainers-rg
na região escolhida.az group create --name AzureFunctionsContainers-rg --location <REGION>
O
az group create
comando cria um grupo de recursos. No comando acima, substitua<REGION>
por uma região perto de você, usando um código de região disponível retornado do comando az account list-locations .Crie uma conta de armazenamento de uso geral em seu grupo de recursos e região.
az storage account create --name <STORAGE_NAME> --location <REGION> --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.Use o comando para criar um plano Premium para o Azure Functions nomeado
myPremiumPlan
na camada de preços do Elastic Premium 1 (--sku EP1
), em seu<REGION>
e em um contêiner Linux (--is-linux
).az functionapp plan create --resource-group AzureFunctionsContainers-rg --name myPremiumPlan --location <REGION> --number-of-workers 1 --sku EP1 --is-linux
Usamos o plano Premium aqui, que pode ser dimensionado conforme necessário. Para obter mais informações sobre hospedagem, consulte Comparação de planos de hospedagem do Azure Functions. Para obter mais informações sobre como calcular custos, consulte a página de preços de funções.
O comando também cria uma instância associada do Azure Application Insights no mesmo grupo de recursos, com a qual você pode monitorar seu aplicativo de função e exibir logs. Para obter mais informações, consulte Monitorar o Azure Functions. A instância não incorre em custos até que você a ative.
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 plano de hospedagem do Azure Functions. 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 e configurá-lo com uma cadeia de conexão para o Armazenamento do Azure.
Crie um aplicativo de função usando o seguinte comando, dependendo do seu registro de contêiner:
az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --resource-group AzureFunctionsContainers-rg --plan myPremiumPlan --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --registry-username <USERNAME> --registry-password <SECURE_PASSWORD>
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ê e<DOCKER_ID>
/ou<LOGIN_SERVER>
pelo ID da conta do Docker Hub ou servidor do Registro de Contêiner, respectivamente. Quando você está implantando a partir de um registro de contêiner personalizado, o nome da imagem indica a URL do registro.Quando você cria o aplicativo de função pela primeira vez, ele extrai a imagem inicial do seu Docker Hub. Você também pode Habilitar a implantação contínua no Azure a partir do seu registro de contêiner.
Gorjeta
Você pode usar a
DisableColor
configuração no arquivo host.json para impedir que caracteres de controle ANSI sejam gravados nos logs de contêiner.Use o seguinte comando para obter a cadeia de conexão para a conta de armazenamento que você criou:
az storage account show-connection-string --resource-group AzureFunctionsContainers-rg --name <STORAGE_NAME> --query connectionString --output tsv
A cadeia de conexão para a conta de armazenamento é retornada usando o
az storage account show-connection-string
comando.Substitua
<STORAGE_NAME>
pelo nome da conta de armazenamento criada anteriormente.Use o seguinte comando para adicionar a configuração ao aplicativo de função:
az functionapp config appsettings set --name <APP_NAME> --resource-group AzureFunctionsContainers-rg --settings AzureWebJobsStorage=<CONNECTION_STRING>
O
az functionapp config appsettings set
comando cria a configuração.Neste comando, substitua
<APP_NAME>
pelo nome do seu aplicativo de função e<CONNECTION_STRING>
pela cadeia de conexão da etapa anterior. A conexão deve ser uma cadeia de caracteres longa codificada que começa comDefaultEndpointProtocol=
.A função agora pode usar essa cadeia de conexão para acessar a conta de armazenamento.
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.
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.
- 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
.
- 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.
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. Como você criou um Plano Premium para o Azure Functions, incorrerá em um ou dois USD por dia em custos contínuos.
Para evitar custos contínuos, exclua o AzureFunctionsContainers-rg
grupo de recursos para limpar todos os recursos desse grupo:
az group delete --name AzureFunctionsContainers-rg