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 guia de início rápido, você usará as ferramentas de linha de comando do Azure Developer para criar uma API Web escalável com pontos de extremidade de função que respondem a solicitações HTTP. Após testar o código localmente, você o implantará em um novo aplicativo de funções sem servidor que você cria e executa em um plano de Consumo Flex no Azure Functions.
O código-fonte do projeto usa o Azure Developer CLI (azd) para simplificar a implantação do seu código no Azure. Esta implantação segue as melhores práticas atuais para implantações seguras e escaláveis do Azure Functions.
Por padrão, o plano de Consumo Flexível segue um modelo de cobrança pague pelo que usar, o que significa que a conclusão deste início rápido gera um pequeno custo de alguns centavos de dólar ou menos na sua conta do Azure.
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
- Uma ferramenta de teste HTTP segura para enviar solicitações com payloads JSON aos ponto de extremidades da sua função. Este artigo usa
curl.
Inicializar o projeto
Use o azd init comando para criar um projeto de código local do Azure Functions a partir de um modelo.
No seu terminal ou prompt de comando local, execute esse
azd initcomando em uma pasta vazia:azd init --template functions-quickstart-dotnet-azd -e httpendpoint-dotnetEsse comando extrai os arquivos de projeto do repositório de modelos e inicializa o projeto na pasta atual. O sinalizador
-edefine um nome para o ambiente atual. Emazd, o ambiente mantém um contexto de implantação exclusivo para seu aplicativo e você pode definir mais de um. Ele também é utilizado no nome do grupo de recursos que você cria no Azure.Execute esse comando para navegar até a pasta do
httpaplicativo:cd httpCrie um arquivo chamado local.settings.json na pasta
httpque contenha esses dados JSON:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated" } }Este arquivo é necessário ao executar localmente.
No seu terminal ou prompt de comando local, execute esse
azd initcomando em uma pasta vazia:azd init --template azure-functions-java-flex-consumption-azd -e httpendpoint-javaEsse comando extrai os arquivos de projeto do repositório de modelos e inicializa o projeto na pasta atual. O sinalizador
-edefine um nome para o ambiente atual. Emazd, o ambiente mantém um contexto de implantação exclusivo para seu aplicativo e você pode definir mais de um. Ele também é utilizado no nome do grupo de recursos que você cria no Azure.Execute esse comando para navegar até a pasta do
httpaplicativo:cd httpCrie um arquivo chamado local.settings.json na pasta
httpque contenha esses dados JSON:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "java" } }Este arquivo é necessário ao executar localmente.
No seu terminal ou prompt de comando local, execute esse
azd initcomando em uma pasta vazia:azd init --template functions-quickstart-javascript-azd -e httpendpoint-jsEsse comando extrai os arquivos de projeto do repositório de modelos e inicializa o projeto na pasta raiz. O sinalizador
-edefine um nome para o ambiente atual. Emazd, o ambiente mantém um contexto de implantação exclusivo para seu aplicativo e você pode definir mais de um. Ele também é utilizado no nome do grupo de recursos que você cria no Azure.Crie um arquivo chamado local.settings.json na pasta raiz que contenha estes dados JSON:
{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "node" } }Este arquivo é necessário ao executar localmente.
No seu terminal ou prompt de comando local, execute esse
azd initcomando em uma pasta vazia:azd init --template functions-quickstart-powershell-azd -e httpendpoint-psEsse comando extrai os arquivos de projeto do repositório de modelos e inicializa o projeto na pasta raiz. O sinalizador
-edefine um nome para o ambiente atual. Emazd, o ambiente mantém um contexto de implantação exclusivo para seu aplicativo e você pode definir mais de um. Ele também é utilizado no nome do grupo de recursos que você cria no Azure.Execute esse comando para navegar até a pasta do
srcaplicativo:cd srcCrie um arquivo chamado local.settings.json na pasta
srcque contenha esses dados JSON:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "powershell", "FUNCTIONS_WORKER_RUNTIME_VERSION": "7.2" } }Este arquivo é necessário ao executar localmente.
No seu terminal ou prompt de comando local, execute esse
azd initcomando em uma pasta vazia:azd init --template functions-quickstart-typescript-azd -e httpendpoint-tsEsse comando extrai os arquivos de projeto do repositório de modelos e inicializa o projeto na pasta raiz. O sinalizador
-edefine um nome para o ambiente atual. Emazd, o ambiente mantém um contexto de implantação exclusivo para seu aplicativo e você pode definir mais de um. O nome do ambiente também é usado no nome do grupo de recursos que você cria no Azure.Crie um arquivo chamado local.settings.json na pasta raiz que contenha estes dados JSON:
{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "node" } }Este arquivo é necessário ao executar localmente.
No seu terminal ou prompt de comando local, execute esse
azd initcomando em uma pasta vazia:azd init --template functions-quickstart-python-http-azd -e httpendpoint-pyEsse comando extrai os arquivos de projeto do repositório de modelos e inicializa o projeto na pasta raiz. O sinalizador
-edefine um nome para o ambiente atual. Emazd, o ambiente mantém um contexto de implantação exclusivo para seu aplicativo e você pode definir mais de um. O nome do ambiente também é usado no nome do grupo de recursos que você cria no Azure.Crie um arquivo chamado local.settings.json na pasta raiz que contenha estes dados JSON:
{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "python" } }Este arquivo é necessário ao executar localmente.
Criar e ativar um ambiente virtual
Na pasta raiz, execute estes comandos para criar e ativar um ambiente virtual chamado .venv:
python3 -m venv .venv
source .venv/bin/activate
Se o Python não instalar o pacote venv na distribuição do Linux, execute o seguinte comando:
sudo apt-get install python3-venv
Executar no seu ambiente local
Execute este comando da pasta do seu aplicativo em um terminal ou prompt de comando:
func startmvn clean package mvn azure-functions:runnpm install func startnpm install npm startQuando o host do Functions é iniciado na pasta do projeto local, ele grava os pontos de extremidade de URL das funções disparadas por HTTP na saída do terminal.
Note
Como a autorização da chave de acesso não é imposta ao ser executada localmente, a URL da função retornada não inclui o valor da chave de acesso e você não precisa dela para chamar sua função.
No seu navegador, acesse o ponto de extremidade
httpget, que deve ter a seguinte URL:De um novo terminal ou janela de prompt de comando, execute este comando
curlpara enviar uma solicitação POST com um payload JSON para o ponto de extremidadehttppost:curl -i http://localhost:7071/api/httppost -H "Content-Type: text/json" -d @testdata.jsoncurl -i http://localhost:7071/api/httppost -H "Content-Type: text/json" -d "@src/functions/testdata.json"Este comando lê os dados do payload JSON a partir do arquivo de projeto
testdata.json. Você pode encontrar exemplos de ambas as solicitações HTTP no arquivo de projetotest.http.Quando terminar, pressione Ctrl+C na janela do terminal para interromper o processo do host
func.exe.
- Execute
deactivatepara desligar o ambiente virtual.
Examinar o código (opcional)
Você pode revisar o código que define os dois pontos de extremidade da função de gatilho HTTP:
[Function("httpget")]
public IActionResult Run([HttpTrigger(AuthorizationLevel.Function, "get")]
HttpRequest req,
string name)
{
var returnValue = string.IsNullOrEmpty(name)
? "Hello, World."
: $"Hello, {name}.";
_logger.LogInformation($"C# HTTP trigger function processed a request for {returnValue}.");
return new OkObjectResult(returnValue);
}
@FunctionName("httpget")
public HttpResponseMessage run(
@HttpTrigger(
name = "req",
methods = {HttpMethod.GET},
authLevel = AuthorizationLevel.FUNCTION)
HttpRequestMessage<Optional<String>> request,
final ExecutionContext context) {
context.getLogger().info("Java HTTP trigger processed a request.");
// Parse query parameter
String name = Optional.ofNullable(request.getQueryParameters().get("name")).orElse("World");
return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + name).build();
}
const { app } = require('@azure/functions');
app.http('httpget', {
methods: ['GET'],
authLevel: 'function',
handler: async (request, context) => {
context.log(`Http function processed request for url "${request.url}"`);
const name = request.query.get('name') || await request.text() || 'world';
return { body: `Hello, ${name}!` };
}
});
import { app, HttpRequest, HttpResponseInit, InvocationContext } from "@azure/functions";
export async function httpGetFunction(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
context.log(`Http function processed request for url "${request.url}"`);
const name = request.query.get('name') || await request.text() || 'world';
return { body: `Hello, ${name}!` };
};
app.http('httpget', {
methods: ['GET'],
authLevel: 'function',
handler: httpGetFunction
});
Este arquivo function.json define a função httpget:
{
"bindings": [
{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "Request",
"methods": [
"get"
],
"route": "httpget"
},
{
"type": "http",
"direction": "out",
"name": "Response"
}
]
}
Este arquivo run.ps1 implementa o código da função:
using namespace System.Net
# Input bindings are passed in via param block.
param($Request, $TriggerMetadata)
# Write to the Azure Functions log stream.
Write-Host "PowerShell HTTP trigger function processed a request."
# Interact with query parameters
$name = $Request.Query.name
$body = "This HTTP triggered function executed successfully. Pass a name in the query string for a personalized response."
if ($name) {
$body = "Hello, $name. This HTTP triggered function executed successfully."
}
# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
StatusCode = [HttpStatusCode]::OK
Body = $body
})
@app.route(route="httpget", methods=["GET"])
def http_get(req: func.HttpRequest) -> func.HttpResponse:
name = req.params.get("name", "World")
logging.info(f"Processing GET request. Name: {name}")
return func.HttpResponse(f"Hello, {name}!")
Você pode examinar o projeto de modelo completo aqui.
Você pode examinar o projeto de modelo completo aqui.
Você pode examinar o projeto de modelo completo aqui.
Você pode examinar o projeto de modelo completo aqui.
Você pode examinar o projeto de modelo completo aqui.
Você pode examinar o projeto de modelo completo aqui.
Depois de verificar suas funções localmente, é hora de publicá-las no Azure.
Implantar no Azure
Este projeto está configurado para usar o comando azd up para implantar este projeto em um novo aplicativo de funções em um plano de Consumo Flex no Azure.
Tip
O projeto inclui um conjunto de arquivos Bicep (na pasta infra ) que azd utiliza para criar uma implantação segura em um plano de consumo Flex que segue as melhores práticas.
Execute este comando para que
azdcrie os recursos necessários do Azure no Azure e implante seu projeto de código no novo aplicativo de funções:azd upA pasta raiz contém o arquivo de definição
azure.yamlnecessário paraazd.Se você ainda não estiver conectado, será solicitado que você se autentique com sua conta do Azure.
Quando solicitado, forneça esses parâmetros de implantação obrigatórios:
Parameter Description Assinatura do Azure Assinatura na qual seus recursos serão criados. Localização do Azure Região do Azure na qual criar o grupo de recursos que contém os novos recursos do Azure. Somente regiões que atualmente dão suporte para o plano de Consumo Flex são mostradas. vnetEnabled Escolha False. Quando definido como True , a implantação cria seu aplicativo de funções em uma nova rede virtual. O
azd upcomando usa suas respostas a esses prompts com os arquivos de configuração do Bicep para concluir estas tarefas de implantação:Criar e configurar esses recursos do Azure necessários (equivalente a
azd provision):- plano de Consumo Flex e aplicativo de funções
- Armazenamento do Microsoft Azure (obrigatório) e Application Insights (recomendado)
- Políticas de acesso e funções para sua conta
- Conexões de serviço a serviço usando identidades gerenciadas (em vez de cadeias de conexão armazenadas)
- (Opção) Rede virtual para executar com segurança o aplicativo de funções e os outros recursos do Azure
Empacotar e implantar seu código para o contêiner de implantação (equivalente a
azd deploy). O aplicativo é então iniciado e executa no pacote implantado.
Após o comando ser concluído com sucesso, você verá links para os recursos que criou.
Invocar a função no Azure
Agora você pode invocar os endpoints de função no Azure enviando solicitações HTTP para suas URLs, usando sua ferramenta de teste HTTP ou a partir do navegador (para solicitações GET). Quando suas funções forem executadas no Azure, a autorização por chave de acesso será aplicada e você deverá fornecer uma chave de acesso da função com sua solicitação.
Você pode usar as Ferramentas do Núcleo para obter os endpoints de URL de suas funções em execução no Azure.
No seu terminal ou prompt de comando local, execute estes comandos para obter os valores dos ponto de extremidades de URL:
$APP_NAME = azd env get-value AZURE_FUNCTION_NAME func azure functionapp list-functions $APP_NAME --show-keysO comando
azd env get-valueobtém o nome do seu aplicativo de funções do ambiente local. Ao usar a opção--show-keyscomfunc azure functionapp list-functions, o valor de URL de invocação retornado para cada endpoint inclui uma chave de acesso em nível de função.Como antes, use sua ferramenta de teste HTTP para validar essas URLs no seu aplicativo de funções executando no Azure.
Reimplantar seu código
Execute o azd up comando quantas vezes precisar para provisionar seus recursos do Azure e implantar atualizações de código em seu aplicativo de funções.
Note
Os arquivos de código implantados são sempre sobrescritos pelo pacote de implantação mais recente.
Suas respostas iniciais aos prompts azd e quaisquer variáveis de ambiente geradas por azd são armazenadas localmente no seu ambiente nomeado. Use o azd env get-values comando para examinar todas as variáveis em seu ambiente usadas ao criar recursos do Azure.
Limpar os recursos
Quando terminar de trabalhar com seu aplicativo de funções e recursos relacionados, use este comando para excluir o aplicativo de funções e seus recursos relacionados do Azure e evitar incorrer em custos adicionais:
azd down --no-prompt
Note
A opção --no-prompt instrui azd a excluir seu grupo de recursos sem uma confirmação sua.
Este comando não afeta seu projeto de código local.