Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Neste artigo, você usa ferramentas de linha de comando local para criar uma função que responde a solicitações HTTP. Depois de verificar seu código localmente, implante-o em um plano de hospedagem do Flex Consumption sem servidor no Funções do Azure.
A conclusão deste tutorial rápido implica um pequeno custo de alguns cêntimos de dólar ou menos na sua conta do Azure.
Certifique-se de selecionar sua linguagem de desenvolvimento preferida na parte superior do artigo.
Important
O suporte do Go para Funções do Azure está atualmente em pré-visualização pública. Durante a pré-visualização, as aplicações da função Go são suportadas apenas no plano Flex Consumption.
Prerequisites
- Uma conta do Azure com uma assinatura ativa. Crie uma conta gratuitamente.
-
Kit de desenvolvimento Java 17
- Se você usar outra versão suportada do Java, deverá atualizar o arquivo pom.xml do projeto.
- A
JAVA_HOMEvariável de ambiente deve ser definida para o local de instalação da versão correta do Java Development Kit (JDK).
- Apache Maven 3.8.x
Vai para 1.24 ou mais tarde.
Funções do Azure Core Tools versão
4.12ou posterior. Correfunc --versionpara verificar a versão instalada.CLI do Azure versão
2.87.0ou posterior. Correaz versionpara verificar a versão instalada.
- Conjunto de ferramentas do Rust usando rustup. Use o
rustc --versioncomando para verificar sua versão.
- O
jqprocessador JSON de linha de comando, usado para analisar a saída JSON, também está disponível no Azure Cloud Shell.
Instalar as Ferramentas de Núcleo de Funções do Azure
A maneira recomendada de instalar o Core Tools depende do sistema operacional do seu computador de desenvolvimento local.
As etapas a seguir usam um instalador do Windows (MSI) para instalar o Core Tools v4.x. Para obter mais informações sobre outros instaladores baseados em pacotes, consulte o readme das Ferramentas Core.
Transfira e execute o instalador das Ferramentas Principais, com base na sua versão do Windows:
- v4.x - Windows de 64 bits (Recomendado. A depuração de código do Visual Studio requer 64 bits.)
- v4.x - Windows de 32 bits
Se você usou anteriormente o instalador do Windows (MSI) para instalar o Core Tools no Windows, você deve desinstalar a versão antiga de Adicionar remover programas antes de instalar a versão mais recente.
Sugestão
Para instalar o Core Tools no Subsistema Windows para Linux (WSL), siga as instruções no separador Linux.
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 Funções do Azure.
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 um projeto e uma função de código local
No Funções do Azure, o seu projeto de código é uma aplicação que contém uma ou mais funções individuais, cada uma respondendo a um disparador 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ê cria um projeto de código que contém uma única função.
Execute o
func initcomando para criar um projeto de funções Go:func init MyGoFunctionApp --worker-runtime goEste comando cria uma pasta de projeto chamada
MyGoFunctionAppque inclui os seguintes ficheiros:Ficheiro Description host.jsonConfiguração do host para a aplicação de funções. local.settings.jsonDefinições usadas quando executado localmente. main.goPonto de entrada com uma função ativada por HTTP de exemplo. go.modFicheiro de módulo Go para gestão de dependências. go.sumFicheiro de soma de verificação do módulo Go. Navegue até a pasta do projeto:
cd MyGoFunctionAppAbra
main.gopara rever o código gerado. Contém uma função de exemplo desencadeada por HTTP:package main import ( "log" "net/http" "github.com/azure/azure-functions-golang-worker/sdk" "github.com/azure/azure-functions-golang-worker/worker" ) // HTTPTriggerHandler handles standard HTTP requests func HTTPTriggerHandler(w http.ResponseWriter, r *http.Request) { log.Printf("Processing HTTP Trigger for %s", r.URL.Path) w.WriteHeader(http.StatusOK) w.Write([]byte("Hello from Go Worker!")) } func main() { app := sdk.FunctionApp() app.HTTP("hello", HTTPTriggerHandler, sdk.WithMethods("GET", "POST"), sdk.WithAuth("anonymous"), ) worker.Start(app) }As funções Go usam os tipos padrão
net/http(http.ResponseWritere*http.Request) para acionadores HTTP. As funções são registadasmain()usando o Go worker SDK e opções funcionais, e não são necessários ficheirosfunction.json.
Em um terminal ou prompt de comando, execute este
func initcomando para criar um projeto de aplicativo de função 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ção 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ção 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ção 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ção na pasta atual:func init --worker-runtime node --language typescript
Em um terminal ou prompt de comando, execute este
func initcomando para criar um projeto de aplicativo de função na pasta atual:func init --worker-runtime custom
Em uma pasta vazia, execute este
mvncomando para gerar o projeto de código de um arquétipo do Funções do Azure Maven:mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype -DjavaVersion=17Important
- Se quiser que as suas funções sejam executadas no Java 11, utilize
-DjavaVersion=11. Para saber mais, consulte Versões Java. - Defina a
JAVA_HOMEvariável ambiente para a localização de instalação da versão correta do JDK para completar este artigo.
- Se quiser que as suas funções sejam executadas no Java 11, utilize
O Maven solicita os valores necessários para concluir a geração do projeto durante a implantação.
Forneça os seguintes valores quando solicitado:Prompt Value Description groupId com.fabrikamUm valor que identifica exclusivamente o seu projeto em relação a todos os outros, seguindo as regras de nomenclatura de pacotes 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. Utilize a predefinição. Digite
You pressione Enter para confirmar.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 revisar o código gerado por 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 "function"Um novo arquivo de código é adicionado ao seu projeto. Nesse caso, o
--nameargumento é o nome exclusivo da sua função (HttpExample) e o argumento especifica um gatilho--templateHTTP.
A pasta raiz do projeto contém vários arquivos para o projeto, incluindo arquivos de configuração 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 .
Crie e construa a sua função
O arquivo function.json na pasta HttpExample declara uma função de gatilho HTTP. Você conclui a função adicionando um manipulador e compilando-o em um executável.
Pressione Ctrl + Shift + ' ou selecione Novo Terminal no menu Terminal para abrir um novo terminal integrado no VS Code.
Na função raiz do aplicativo (a mesma pasta que host.json), inicialize um projeto Rust chamado
handler.cargo init --name handlerNo Cargo.toml, adicione as seguintes dependências necessárias para concluir este início rápido. O exemplo usa a estrutura do servidor Web warp .
[dependencies] warp = "0.3" tokio = { version = "1", features = ["rt", "macros", "rt-multi-thread"] }Em src/main.rs, adicione o seguinte código e salve o arquivo. Este é o seu manipulador personalizado Rust.
use std::collections::HashMap; use std::env; use std::net::Ipv4Addr; use warp::{http::Response, Filter}; #[tokio::main] async fn main() { let example1 = warp::get() .and(warp::path("api")) .and(warp::path("HttpExample")) .and(warp::query::<HashMap<String, String>>()) .map(|p: HashMap<String, String>| match p.get("name") { Some(name) => Response::builder().body(format!("Hello, {}. This HTTP triggered function executed successfully.", name)), None => Response::builder().body(String::from("This HTTP triggered function executed successfully. Pass a name in the query string for a personalized response.")), }); let port_key = "FUNCTIONS_CUSTOMHANDLER_PORT"; let port: u16 = match env::var(port_key) { Ok(val) => val.parse().expect("Custom Handler port is not a number!"), Err(_) => 3000, }; warp::serve(example1).run((Ipv4Addr::LOCALHOST, port)).await }Compile um binário para seu manipulador personalizado. Um arquivo executável chamado
handler(handler.exeno Windows) é gerado na pasta raiz do aplicativo de função.cargo build --release cp target/release/handler .
Configurar seu aplicativo de função
O host da função precisa ser configurado para executar o binário do manipulador personalizado quando ele é iniciado.
Abra host.json.
customHandler.descriptionNa seção , defina o valor dedefaultExecutablePathcomohandler(no Windows, defina-o comohandler.exe).customHandlerNa seção , adicione uma propriedade chamadaenableForwardingHttpRequeste defina seu valor comotrue. Para funções que consistem apenas num acionador HTTP, esta configuração simplifica a programação, permitindo-lhe trabalhar com um pedido HTTP típico em vez do payload do pedido do processador personalizado.Confirme se a secção
customHandlercorresponde a este exemplo. Salve o arquivo."customHandler": { "description": { "defaultExecutablePath": "handler", "workingDirectory": "", "arguments": [] }, "enableForwardingHttpRequest": true }
O aplicativo de função está configurado para iniciar o executável do manipulador personalizado.
Executar a função localmente
Verifique a sua nova função executando o projeto localmente e chamando o endpoint da função.
Use este comando para iniciar o host de tempo de execução local do Funções do Azure na raiz da pasta do projeto:
func startnpm install npm startmvn clean package mvn azure-functions:runPerto do final da saída, aparecem 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 ...Perto do final da saída, o endpoint HTTP da sua função é exibido:
Functions: hello: [GET,POST] http://localhost:7071/api/helloChame o endpoint da função para verificar se funciona:
Copie o URL da função
HttpExampledesta saída para um navegador e abra o URL da função no navegador. Deves receber uma resposta de sucesso com uma mensagem de "olá mundo".Note
Como a autorização da chave de acesso não é aplicada quando se executa localmente, o URL da função devolvido não inclui o valor da chave de acesso e não precisa dele para chamar a sua função.
Com a função a correr localmente, abra um navegador e navegue até ao seguinte URL:
http://localhost:7071/api/helloVocê verá a seguinte resposta:
Hello from Go Worker!Quando terminar, use Ctrl+C e opte por
yparar o host de funções.
Criar recursos de suporte do Azure para sua função
Antes de implantar seu código de função no Azure, você precisa criar estes recursos:
- Um grupo de recursos, que é um contêiner lógico para recursos relacionados.
- Uma conta de armazenamento padrão, que é usada pelo host 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ção, que fornece o ambiente para executar seu código de função. Uma aplicação de funções corresponde ao seu projeto de funções local e permite-lhe 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 ainda não o fez, inicie sessão no Azure:
az loginO
az logincomando inicia sessão na sua conta do Azure. Ignore esta etapa ao executar no Azure Cloud Shell.Se você ainda não tiver feito 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 perto de você que ofereça suporte ao plano Flex Consumption. Use o comando az functionapp list-flexconsumption-locations para exibir a lista de regiões atualmente suportadas.Use este comando az storage account create 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 três a 24 caracteres, números e letras minúsculas apenas.Standard_LRSespecifica uma conta de uso geral, que é suportada pelo Functions. Essa nova conta só pode ser acessada usando identidades autenticadas pelo Microsoft Entra, que receberam permissões para recursos específicos.Use este 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 em seu shell Bash local, ele estará disponível no Azure Cloud Shell. Neste exemplo, substitua<STORAGE_NAME>e<REGION>pelo nome e região 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 o ID da conta de armazenamento.Use este comando az functionapp create para criar o aplicativo de função 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"az functionapp create --resource-group "AzureFunctionsQuickstart-rg" --name <APP_NAME> --flexconsumption-location <REGION> \ --runtime other --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 DNS predefinido para a aplicação de funções. -
<STORAGE_NAME>: o nome da conta que você usou na etapa anterior. -
<REGION>: a sua região atual. -
<LANGUAGE_VERSION>: usar a mesma versão suportada da pilha de linguagem que verificou localmente, quando aplicável.
Este comando cria um aplicativo funcional em execução em seu tempo de execução de linguagem especificado no Linux no Plano de Consumo Flex, que é gratuito para a quantidade de uso que você incorre aqui. O comando também cria uma instância associada do Aplicação Azure Insights no mesmo grupo de recursos, com a qual você pode usar para monitorar suas execuções de aplicativo de função e exibir logs. Para obter mais informações, consulte Monitorizar Funções do Azure. A instância não incorre em custos até que você a ative.
-
Use este script para adicionar sua identidade gerenciada atribuída pelo usuário à função Monitoring Metrics Publisher em sua 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 do seu aplicativo de função. O comando az role assignment create adiciona seu usuário à função. O ID de recurso da sua instância do Application Insights e o ID principal do seu utilizador são obtidos usando os comandos az monitor app-insights component show eaz identity show, respetivamente.
Atualizar configurações do aplicativo
Para permitir que o host de Funções se ligue à conta de armazenamento predefinida usando segredos partilhados, substitua a definição da string de ligação AzureWebJobsStorage por várias definições que tenham 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 este script para obter a ID de cliente da identidade gerida atribuída pelo utilizador e utilizá-la para definir conexões de identidades geridas tanto para o armazenamento como para 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"Neste script, substitua
<APP_NAME>e<STORAGE_NAME>pelos nomes do seu aplicativo de função e conta de armazenamento, respectivamente.Execute o comando az functionapp config appsettings delete para remover a configuração da cadeia de conexão existente
AzureWebJobsStorage, que contém uma chave de segredo compartilhado:az functionapp config appsettings delete --name <APP_NAME> --resource-group "AzureFunctionsQuickstart-rg" --setting-names AzureWebJobsStorageNeste exemplo, substitua
<APP_NAME>pelos nomes do seu aplicativo de função.
Neste ponto, o anfitrião de Funções pode ligar-se à conta de armazenamento de forma segura usando identidades geridas em vez de segredos partilhados. Agora você pode implantar seu código de projeto nos recursos do Azure.
Criar recursos de suporte do Azure para sua função
Antes de poderes implementar o teu código de função no Azure, precisas de criar um grupo de recursos, uma conta de armazenamento e uma aplicação de funções. Use os comandos da CLI do Azure nestas etapas para criar os recursos necessários.
Se ainda não o fez, inicie sessão no Azure:
az loginO
az logincomando inicia sessão na sua conta do Azure. Ignore esta etapa ao executar no Azure Cloud Shell.Use o
az group createcomando para criar um grupo de recursos nomeadoAzureFunctionsQuickstart-rgna região escolhida:az group create --name AzureFunctionsQuickstart-rg --location <REGION>Neste exemplo, substitua
<REGION>por uma região perto de você que ofereça suporte ao plano Flex Consumption. Use oaz functionapp list-flexconsumption-locationscomando para ver a lista de regiões atualmente suportadas.Use o
az storage account createcomando para criar uma conta de armazenamento de uso geral no seu grupo de recursos e região:az storage account create --name <STORAGE_NAME> --location <REGION> --resource-group AzureFunctionsQuickstart-rg --sku Standard_LRSNeste exemplo, substitua
<STORAGE_NAME>por um nome globalmente único. Os nomes devem conter de três a 24 caracteres e apenas letras minúsculas e números.Crie o aplicativo de função no Azure:
az functionapp create --resource-group AzureFunctionsQuickstart-rg --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime go --runtime-version 1.0 --functions-version 4Substitua
<APP_NAME>por um nome globalmente único e<STORAGE_NAME>pelo nome de conta que usou na etapa anterior. Este comando também cria uma instância associada do Aplicação Azure Insights no mesmo grupo de recursos, com a qual pode monitorizar a sua aplicação de funções e visualizar registos. Para obter mais informações, consulte Monitorizar Funções do Azure.Desative o HTTP/2 na aplicação de funções, que é obrigatório durante a pré-visualização pública do Go:
az resource update --resource-group AzureFunctionsQuickstart-rg --resource-type Microsoft.Web/sites --name <APP_NAME> --set properties.siteConfig.http20Enabled=false
Implantar o projeto de função no Azure
Depois de criar com êxito seu aplicativo de função no Azure, você está pronto para implantar seu projeto de funções locais usando o func azure functionapp publish comando.
Na pasta raiz do projeto, execute este
func azure functionapp publishcomando:func azure functionapp publish <APP_NAME>Neste exemplo, substitua
<APP_NAME>pelo nome do 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/httpexampleNo seu terminal local ou no prompt de comandos, execute este comando para obter o valor do endpoint URL, incluindo a chave de acesso:
func azure functionapp list-functions <APP_NAME> --show-keysNeste exemplo, substitua
<APP_NAME>novamente pelo nome da sua aplicação.Copie o URL e a chave do endpoint devolvidos, que usa para invocar o endpoint da função.
Atualizar o arquivo pom.xml
Depois de criares com sucesso a tua app de funções no Azure, atualiza o ficheiro pom.xml para que o Maven possa ser implementado na tua nova aplicação. Caso contrário, o Maven cria um novo conjunto de recursos Azure durante a implementaçã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 seu aplicativo de função.No diretório raiz do projeto, abra o ficheiro pom.xml num editor de texto, localize o
propertieselemento e atualize estes valores específicos de propriedade:Nome da propriedade Value java.versionUse a mesma versão da pilha de idiomas suportada que você verificou localmente, como 17.azure.functions.maven.plugin.version1.37.1azure.functions.java.library.version3.1.0functionAppNameO nome do seu aplicativo de função no Azure. Encontre a
configurationseção doazure-functions-maven-plugine substitua-a por este fragmento XMLazure-functions-maven-plugin.<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
configurationelemento, faça estas substituições específicas dos valores de elipses (...):Configuration Value regionO código de região do seu aplicativo de função existente, como eastus.deploymentStorageAccountO nome da sua conta de armazenamento. deploymentStorageContainerO nome da partilha de implementação, que vem depois do \no valorcontainerUrlque obtiveste.userAssignedIdentityResourceIdO ID de recurso totalmente qualificado da sua identidade gerenciada, que você obteve. Salve as 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ção no Azure
Na linha de comandos, execute este comando:
mvn clean package azure-functions:deployDepois de a sua implementação ter sucesso, execute este comando Core Tools para obter o valor do endpoint URL, incluindo a chave de acesso:
func azure functionapp list-functions <APP_NAME> --show-keysNeste exemplo, substitua
<APP_NAME>novamente pelo nome da sua aplicação.Copie o URL e a chave do endpoint devolvidos, que usa para invocar o endpoint da função.
Implantar o projeto de função no Azure
Depois de criar com sucesso a sua aplicação de funções no Azure, está pronto para implementar o seu projeto de funções locais. Use o comando func azure functionapp publish para implementar o seu projeto em Azure:
func azure functionapp publish <APP_NAME>
Substitua <APP_NAME> pelo nome do seu aplicativo de função.
Invoque a função no Azure
Como a sua função usa um gatilho HTTP e suporta pedidos GET, invoca-a fazendo um pedido HTTP ao seu URL usando a chave de acesso ao nível da função. É mais fácil executar um pedido GET num navegador.
Cola o URL e a chave de acesso que copiaste numa barra de endereços do navegador.
A URL do endpoint deve ser semelhante a este exemplo:
https://contoso-app.azurewebsites.net/api/httpexample?code=aabbccdd...
Neste caso, deve também fornecer uma chave de acesso na cadeia de consulta ao fazer um pedido GET à URL do endpoint. Recomenda-se o uso de uma chave de acesso para limitar o acesso de clientes aleatórios. Ao fazer um pedido POST usando um cliente HTTP, deve em vez disso fornecer a chave de acesso no x-functions-key cabeçalho.
Quando você navega para esse URL, o navegador deve exibir uma saída semelhante à de quando você executou a função localmente.
Invoque a função no Azure
Após a conclusão da implementação, abra o seguinte URL num navegador para verificar se a função está a correr no Azure:
https://<APP_NAME>.azurewebsites.net/api/hello
Deves ver a mesma Hello from Go Worker! resposta que viste quando executaste a função localmente.
Limpeza de recursos
Se continuares para a próxima etapa e adicionares uma ligação de saída de fila do Armazenamento do Azure, mantém todos os teus recursos no lugar, porque assim aproveitarás o que já fizeste.
Caso contrário, use o comando a seguir para excluir o grupo de recursos e todos os recursos contidos para evitar incorrer em custos adicionais.
az group delete --name AzureFunctionsQuickstart-rg
Limpeza de recursos
Se continuares para o próximo passo, mantém todos os recursos no lugar à medida que desenvolves o que já criaste.
Caso contrário, use o comando a seguir para excluir o grupo de recursos e todos os recursos contidos para evitar incorrer em custos adicionais.
az group delete --name AzureFunctionsQuickstart-rg
Próximos passos
Próximos passos
Para mais informações sobre o desenvolvimento de funções Go, consulte os seguintes recursos: