Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Neste artigo, você usa ferramentas de linha de comando locais para criar uma função que responde a solicitações HTTP. Depois de verificar seu código localmente, você o implanta em um plano de hospedagem de Consumo Flex sem servidor no Azure Functions.
A realização deste início rápido gera um pequeno custo de alguns centavos de dólar ou menos em sua conta do Azure.
Selecione seu idioma de desenvolvimento preferido na parte superior do artigo.
Prerequisites
- Uma conta do Azure com uma assinatura ativa. Crie uma conta gratuitamente.
-
Kit do Desenvolvedor Java 17
- Se você usar outra versão com suporte do Java, será necessário atualizar o arquivo pom.xml do projeto.
- A
JAVA_HOMEvariável de ambiente deve ser definida como o local de instalação da versão correta do JDK (Java Development Kit).
- Apache Maven 3.8.x
O
jqprocessador JSON da linha de comando, usado para analisar a saída JSON e também está disponível no Azure Cloud Shell.
Instalação das ferramentas básicas do Azure Functions
A maneira recomendada de instalar o Core Tools depende do sistema operacional do computador de desenvolvimento local.
As etapas a seguir usam um Windows Installer (MSI) para instalar o Core Tools v4.x. Para obter mais informações sobre outros instaladores baseados em pacote, confira o arquivo leiame do Core Tools.
Baixe e execute o instalador do Core Tools, com base em sua versão do Windows:
- v4.x – Windows de 64 bits (recomendado. A depuração do Visual Studio Code requer 64 bits)
- v4.x – Windows 32 bits
Se você usou anteriormente o Windows Installer(MSI) para instalar o Core Tools no Windows, desinstale a versão antiga em Adicionar ou Remover Programas antes de instalar a versão mais recente.
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 do 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 um projeto de código local e uma função
No Azure Functions, seu projeto de código é um aplicativo que contém uma ou mais funções individuais que cada uma responde a um gatilho específico. Todas as funções em um projeto compartilham as mesmas configurações e são implantadas como uma unidade no Azure. Nesta seção, você criará um projeto de código que contém uma única função.
Em um terminal ou prompt de comando, execute este
func initcomando para criar um projeto de aplicativo de funções na pasta atual:func init --worker-runtime dotnet-isolated
Em um terminal ou prompt de comando, execute este
func initcomando para criar um projeto de aplicativo de funções na pasta atual:func init --worker-runtime node --language javascript
Em um terminal ou prompt de comando, execute este
func initcomando para criar um projeto de aplicativo de funções na pasta atual:func init --worker-runtime powershell
Em um terminal ou prompt de comando, execute este
func initcomando para criar um projeto de aplicativo de funções na pasta atual:func init --worker-runtime python
Em um terminal ou prompt de comando, execute este
func initcomando para criar um projeto de aplicativo de funções na pasta atual:func init --worker-runtime node --language typescript
Em uma pasta vazia, execute este
mvncomando para gerar o projeto de código de um arquétipo maven do Azure Functions:mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype -DjavaVersion=17Important
- Use
-DjavaVersion=11se desejar que as funções sejam executadas no Java 11. Para saber mais, confira as versões do Java. - A variável de ambiente
JAVA_HOMEprecisa ser definida como a localização de instalação da versão correta do JDK para concluir este artigo.
- Use
O Maven solicita os valores necessários para concluir a geração do projeto na implantação.
Forneça os seguintes valores quando solicitado:Prompt Value Description groupId com.fabrikamUm valor que identifica exclusivamente o projeto em todos os projetos, seguindo as regras de nomenclatura do pacote para Java. artifactId fabrikam-functionsUm valor que é o nome do jar, sem um número de versão. version 1.0-SNAPSHOTEscolha o valor padrão. package com.fabrikamUm valor que é o pacote Java para o código de função gerado. Use o padrão. Digite
You pressione Enter para confirmar.O Maven cria os arquivos de projeto em uma nova pasta com um nome de artifactId, que neste exemplo é
fabrikam-functions.Navegue até a pasta do projeto:
cd fabrikam-functionsVocê pode examinar o código gerado pelo modelo para sua nova função de gatilho HTTP em Function.java no diretório do projeto \src\main\java\com\fabrikam .
Use este
func newcomando para adicionar uma função ao seu projeto:func new --name HttpExample --template "HTTP trigger" --authlevel "anonymous"Um novo arquivo de código é adicionado ao seu projeto. Nesse caso, o
--nameargumento é o nome exclusivo da função (HttpExample) e o--templateargumento especifica um gatilho HTTP.
A pasta raiz do projeto contém vários arquivos para o projeto, incluindo arquivos de configurações chamados local.settings.json e host.json. Como local.settings.json pode conter segredos baixados do Azure, o arquivo é excluído do controle do código-fonte por padrão no arquivo .gitignore .
Executar a função localmente
Verifique sua nova função executando o projeto localmente e chamando o endpoint da função.
Use este comando para iniciar o host local do runtime do Azure Functions na raiz da pasta do projeto:
func startfunc startnpm install npm startmvn clean package mvn azure-functions:runPerto do fim da saída, devem aparecer as seguintes linhas:
... Now listening on: http://0.0.0.0:7071 Application started. Press Ctrl+C to shut down. Http Functions: HttpExample: [GET,POST] http://localhost:7071/api/HttpExample ...Note
Se o ponto de extremidade HttpExample não aparece conforme o esperado, você pode ter iniciado o host de fora da pasta raiz do projeto. Nesse caso, use Ctrl+C para parar o host, navegue até a pasta raiz do projeto e execute o comando anterior novamente.
Copie a URL da função
HttpExampledessa saída para um navegador e navegue até ela para receber uma resposta de sucesso com uma mensagem "olá, mundo".Quando terminar, use Ctrl+C e escolha
ypara interromper o host de funções.
Criar recursos de suporte do Azure para a função
Antes de implantar seu código de função no Azure, você precisa criar esses recursos:
- Um grupo de recursos, que é um contêiner lógico para recursos relacionados.
- Uma conta de Armazenamento padrão, que é usada pelo host do Functions para manter o estado e outras informações sobre suas funções.
- Uma identidade gerenciada atribuída pelo usuário, que o host do Functions usa para se conectar à conta de armazenamento padrão.
- Um aplicativo de funções, que fornece o ambiente para a execução do código de função. Um aplicativo de funções é mapeado 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 da CLI do Azure nestas etapas para criar os recursos necessários.
Se você ainda não tiver feito isso, entre no Azure:
az loginO comando
az loginconecta você à sua conta do Azure. Ignore esta etapa ao executar no Azure Cloud Shell.Se você ainda não fez isso, use este
az extension addcomando para instalar a extensão do Application Insights:az extension add --name application-insightsUse este comando az group create para criar um grupo de recursos nomeado
AzureFunctionsQuickstart-rgna região escolhida:az group create --name "AzureFunctionsQuickstart-rg" --___location "<REGION>"Neste exemplo, substitua
<REGION>por uma região próxima a você que dê suporte ao plano de consumo flex. Use o comando az functionapp list-flexconsumption-locations para exibir a lista de regiões com suporte no momento.Use este comando de criação de conta de armazenamento az para criar 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 "AzureFunctionsQuickstart-rg" \ --sku "Standard_LRS" --allow-blob-public-access false --allow-shared-key-access falseNeste exemplo, substitua
<STORAGE_NAME>por um nome apropriado para você e exclusivo no Armazenamento do Azure. Os nomes devem conter de 3 a 24 caracteres e podem conter somente números e letras minúsculas.Standard_LRSespecifica uma conta de uso geral, que é compatível com o Functions. Essa nova conta só pode ser acessada usando identidades autenticadas do Microsoft Entra que receberam permissões para recursos específicos.Use esse script para criar uma identidade gerenciada atribuída pelo usuário, analisar as propriedades JSON retornadas do objeto usando
jqe concederStorage Blob Data Ownerpermissões na conta de armazenamento padrão:output=$(az identity create --name "func-host-storage-user" --resource-group "AzureFunctionsQuickstart-rg" --___location <REGION> \ --query "{userId:id, principalId: principalId, clientId: clientId}" -o json) userId=$(echo $output | jq -r '.userId') principalId=$(echo $output | jq -r '.principalId') clientId=$(echo $output | jq -r '.clientId') storageId=$(az storage account show --resource-group "AzureFunctionsQuickstart-rg" --name <STORAGE_NAME> --query 'id' -o tsv) az role assignment create --assignee-object-id $principalId --assignee-principal-type ServicePrincipal \ --role "Storage Blob Data Owner" --scope $storageIdSe você não tiver o
jqutilitário no shell do Bash local, ele estará disponível no Azure Cloud Shell. Neste exemplo, substitua<STORAGE_NAME>e<REGION>pela região e o nome da conta de armazenamento padrão, respectivamente.O comando az identity create cria uma identidade chamada
func-host-storage-user. O retornadoprincipalIdé usado para atribuir permissões a essa nova identidade na conta de armazenamento padrão usando oaz role assignment createcomando. Oaz storage account showcomando é usado para obter a ID da conta de armazenamento.Use este comando az functionapp create para criar o aplicativo de funções no Azure:
az functionapp create --resource-group "AzureFunctionsQuickstart-rg" --name <APP_NAME> --flexconsumption-___location <REGION> \ --runtime dotnet-isolated --runtime-version <LANGUAGE_VERSION> --storage-account <STORAGE_NAME> \ --deployment-storage-auth-type UserAssignedIdentity --deployment-storage-auth-value "func-host-storage-user"az functionapp create --resource-group "AzureFunctionsQuickstart-rg" --name <APP_NAME> --flexconsumption-___location <REGION> \ --runtime java --runtime-version <LANGUAGE_VERSION> --storage-account <STORAGE_NAME> \ --deployment-storage-auth-type UserAssignedIdentity --deployment-storage-auth-value "func-host-storage-user"az functionapp create --resource-group "AzureFunctionsQuickstart-rg" --name <APP_NAME> --flexconsumption-___location <REGION> \ --runtime node --runtime-version <LANGUAGE_VERSION> --storage-account <STORAGE_NAME> \ --deployment-storage-auth-type UserAssignedIdentity --deployment-storage-auth-value "func-host-storage-user"az functionapp create --resource-group "AzureFunctionsQuickstart-rg" --name <APP_NAME> --flexconsumption-___location <REGION> \ --runtime python --runtime-version <LANGUAGE_VERSION> --storage-account <STORAGE_NAME> \ --deployment-storage-auth-type UserAssignedIdentity --deployment-storage-auth-value "func-host-storage-user"az functionapp create --resource-group "AzureFunctionsQuickstart-rg" --name <APP_NAME> --flexconsumption-___location <REGION> \ --runtime python --runtime-version <LANGUAGE_VERSION> --storage-account <STORAGE_NAME> \ --deployment-storage-auth-type UserAssignedIdentity --deployment-storage-auth-value "func-host-storage-user"Neste exemplo, substitua esses espaços reservados pelos valores apropriados:
-
<APP_NAME>: um nome globalmente exclusivo apropriado para você. O<APP_NAME>também é o domínio do DNS padrão para o aplicativo de funções. -
<STORAGE_NAME>: o nome da conta usada na etapa anterior. -
<REGION>: sua região atual. -
<LANGUAGE_VERSION>: use a mesma versão de pilha de idiomas aceita que você verificou localmente.
Esse comando cria um aplicativo de função que é executado na linguagem runtime especificada no Linux no Plano de Consumo Flex, que é gratuito para a quantidade de uso que você realiza aqui. O comando também cria uma instância associada do Azure Application Insights no mesmo grupo de recursos, com a qual você pode usar para monitorar as execuções do aplicativo de funções e exibir logs. Para saber mais, consulte Monitorar Azure Functions. A instância não gera nenhum custo até você ativá-la.
-
Use esse script para adicionar sua identidade gerenciada atribuída pelo usuário à função Editor de Métricas de Monitoramento na instância do Application Insights:
appInsights=$(az monitor app-insights component show --resource-group "AzureFunctionsQuickstart-rg" \ --app <APP_NAME> --query "id" --output tsv) principalId=$(az identity show --name "func-host-storage-user" --resource-group "AzureFunctionsQuickstart-rg" \ --query principalId -o tsv) az role assignment create --role "Monitoring Metrics Publisher" --assignee $principalId --scope $appInsightsNeste exemplo, substitua
<APP_NAME>pelo nome de seu aplicativo de funções. O comando az role assignment create adiciona o usuário à função. Para ter acesso à ID do recurso da instância do Application Insights e à ID da entidade de segurança do usuário, use os comandos az monitor app-insights component show eaz identity show, respectivamente.
Atualizar as configurações do aplicativo
Para permitir que o host do Functions se conecte à conta de armazenamento padrão usando segredos compartilhados, substitua a configuração da cadeia de conexão AzureWebJobsStorage por várias configurações com o prefixo AzureWebJobsStorage__. Essas configurações definem uma configuração complexa que seu aplicativo usa para se conectar ao armazenamento e ao Application Insights com uma identidade gerenciada atribuída pelo usuário.
Use esse script para obter a ID do cliente da identidade gerenciada atribuída pelo usuário e usá-la para definir conexões de identidade gerenciada para o armazenamento e o Application Insights:
clientId=$(az identity show --name func-host-storage-user \ --resource-group AzureFunctionsQuickstart-rg --query 'clientId' -o tsv) az functionapp config appsettings set --name <APP_NAME> --resource-group "AzureFunctionsQuickstart-rg" \ --settings AzureWebJobsStorage__accountName=<STORAGE_NAME> \ AzureWebJobsStorage__credential=managedidentity AzureWebJobsStorage__clientId=$clientId \ APPLICATIONINSIGHTS_AUTHENTICATION_STRING="ClientId=$clientId;Authorization=AAD"Nesse script, substitua
<APP_NAME>e<STORAGE_NAME>pelos nomes do aplicativo de funções e da conta de armazenamento, respectivamente.Execute o comando az functionapp config appsettings delete para remover a configuração de cadeia de conexão existente
AzureWebJobsStorage, que contém uma chave secreta compartilhada:az functionapp config appsettings delete --name <APP_NAME> --resource-group "AzureFunctionsQuickstart-rg" --setting-names AzureWebJobsStorageNeste exemplo, substitua
<APP_NAME>pelos nomes do aplicativo de funções.
Neste ponto, o host do Functions é capaz de se conectar à conta de armazenamento com segurança usando identidades gerenciadas em vez de segredos compartilhados. Agora você pode implantar o código do projeto nos recursos do Azure.
Implantar o projeto de funções no Azure
Depois de criar com êxito o seu aplicativo de funções no Azure, agora você estará pronto para implantar seu projeto de funções local usando o comando func azure functionapp publish.
Na pasta raiz do projeto, execute esse comando func azure functionapp publish:
func azure functionapp publish <APP_NAME>
Nesse exemplo, substitua <APP_NAME> pelo nome de seu aplicativo. Uma implantação bem-sucedida mostra resultados semelhantes à seguinte saída (truncada para simplificar):
...
Getting site publishing info...
Creating archive for current directory...
Performing remote build for functions project.
...
Deployment successful.
Remote build succeeded!
Syncing triggers...
Functions in msdocs-azurefunctions-qs:
HttpExample - [httpTrigger]
Invoke url: https://msdocs-azurefunctions-qs.azurewebsites.net/api/httpexample
Atualizar o arquivo pom.xml
Depois de criar com êxito seu aplicativo de funções no Azure, você deve atualizar o arquivo pom.xml para que o Maven possa implantar em seu novo aplicativo. Caso contrário, ele criará um novo conjunto de recursos do Azure durante a implantação.
No Azure Cloud Shell, use este
az functionapp showcomando para obter a URL e a ID do contêiner de implantação da nova identidade gerenciada atribuída pelo usuário:az functionapp show --name <APP_NAME> --resource-group AzureFunctionsQuickstart-rg \ --query "{userAssignedIdentityResourceId: properties.functionAppConfig.deployment.storage.authentication.userAssignedIdentityResourceId, \ containerUrl: properties.functionAppConfig.deployment.storage.value}"Neste exemplo, substitua
<APP_NAME>pelos nomes do aplicativo de funções.No diretório raiz do projeto, abra o arquivo pom.xml em um editor de texto, localize o
propertieselemento e faça atualizações para estes valores de propriedade específicos:Nome da propriedade Value java.versionUse a mesma versão de stack de idiomas suportada que você verificou localmente, como 17.azure.functions.maven.plugin.version1.37.1azure.functions.java.library.version3.1.0functionAppNameO nome do aplicativo de funções no Azure. Encontre a seção
configurationdoazure-functions-maven-plugine substitua-a por este fragmento XML:<configuration> <appName>${functionAppName}</appName> <resourceGroup>AzureFunctionsQuickstart-rg</resourceGroup> <pricingTier>Flex Consumption</pricingTier> <region>....</region> <runtime> <os>linux</os> <javaVersion>${java.version}</javaVersion> </runtime> <deploymentStorageAccount>...</deploymentStorageAccount> <deploymentStorageResourceGroup>AzureFunctionsQuickstart-rg</deploymentStorageResourceGroup> <deploymentStorageContainer>...</deploymentStorageContainer> <storageAuthenticationMethod>UserAssignedIdentity</storageAuthenticationMethod> <userAssignedIdentityResourceId>...</userAssignedIdentityResourceId> <appSettings> <property> <name>FUNCTIONS_EXTENSION_VERSION</name> <value>~4</value> </property> </appSettings> </configuration>No novo elemento
configuration, faça essas substituições específicas dos valores de reticências (...):Configuration Value regionO código de região do aplicativo de funções existente, como eastus.deploymentStorageAccountO nome da sua conta de armazenamento. deploymentStorageContainerO nome do compartilhamento de implantação, que vem após \no valorcontainerUrlacessado.userAssignedIdentityResourceIdA ID de recurso totalmente qualificada da identidade gerenciada, a que você teve acesso. Salve suas alterações no arquivo pom.xml .
Agora você pode usar o Maven para implantar seu projeto de código em seu aplicativo existente.
Implantar o projeto de funções no Azure
No prompt de comando, execute este comando:
mvn clean package azure-functions:deployDepois da implantação, use
az functionapp function showpara ter acesso à URL do ponto de extremidade da função remotaHttpExample:az functionapp function show --name <APP_NAME> --resource-group "AzureFunctionsQuickstart-rg" \ --function-name HttpExample --query invokeUrlTemplate -o tsvNeste exemplo, substitua
<APP_NAME>pelos nomes do aplicativo de funções.Copie a URL do ponto de extremidade retornado, que você usará em seguida para invocar o ponto de extremidade da função.
Invocar a função no Azure
Como a função usa um gatilho HTTP e dá suporte a solicitações GET, você a invoca fazendo uma solicitação HTTP para sua URL. É mais fácil executar uma solicitação GET em um navegador.
Copie a URL de Invocação completa mostrada na saída do comando de publicação na barra de endereços de um navegador.
Cole a URL copiada em uma barra de endereços do navegador.
A URL do ponto de extremidade deve ser parecida com o seguinte:
https://contoso-app.azurewebsites.net/api/httpexample
Quando você navega para essa URL, o navegador deve exibir uma saída semelhante à de quando você executou a função localmente.
Limpar os recursos
Se você prosseguir para a próxima etapa e adicionar uma associação de saída da fila do Armazenamento do Azure, mantenha todos os recursos, pois você se baseará no que já fez.
Caso contrário, use o comando a seguir para excluir o grupo de recursos e todos os recursos contidos nele para evitar custos adicionais.
az group delete --name AzureFunctionsQuickstart-rg