Início rápido: criar uma função C# no Azure da linha de comando
Neste artigo, você usará ferramentas de linha de comando para criar uma função C# que responde a solicitações HTTP. Após testar o código localmente, implante-o no ambiente sem servidor do Azure Functions.
Este artigo cria uma função de gatilho HTTP que é executada no .NET 8 em um processo de trabalho isolado. Para obter informações sobre as versões do .NET com suporte para funções C#, confira Versões com suporte. Há também uma versão baseada no Visual Studio Code deste artigo.
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.
Configurar o ambiente local
Antes de começar, você deverá ter o seguinte:
Uma das seguintes ferramentas para a criação de recursos do Azure:
CLI do Azure versão 2.4 ou posterior.
O módulo PowerShell Az do Azure, versão 5.9.0 ou posterior.
Você também precisa de uma conta do Azure com uma assinatura ativa. Crie uma conta gratuitamente.
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 instalador do Windows (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 instalador do Windows (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 um projeto de função local
No Azure Functions, um projeto de função é um contêiner para uma ou mais funções individuais que respondem, cada uma, a um gatilho específico. Todas as funções em um projeto compartilham as configurações locais e de hospedagem. Nesta seção, você cria um projeto de função que contém apenas uma função.
Execute o comando
func init
da seguinte maneira para criar um projeto de funções em uma pasta chamada LocalFunctionProj com o runtime especificado:func init LocalFunctionProj --worker-runtime dotnet-isolated --target-framework net8.0
Navegue até a pasta do projeto:
cd LocalFunctionProj
Essa pasta contém vários arquivos do 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.
Adicione uma função ao projeto usando o comando a seguir, em que o argumento
--name
é o nome exclusivo da função (HttpExample) e o argumento--template
especifica o gatilho da função (HTTP).func new --name HttpExample --template "HTTP trigger" --authlevel "anonymous"
func new
cria um arquivo de código HttpExample.cs.
(Opcional) Examinar o conteúdo do arquivo
Se preferir, você poderá ir diretamente para Executar a função localmente e examinar o conteúdo do arquivo mais tarde.
HttpExample.cs
O HttpExample.cs contém um método Run
que recebe os dados de solicitação na variável req
como um objeto HttpRequest. Esse parâmetro é decorado com HttpTriggerAttribute para definir o comportamento do gatilho.
using System.Net;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace Company.Function
{
public class HttpExample
{
private readonly ILogger<HttpExample> _logger;
public HttpExample(ILogger<HttpExample> logger)
{
_logger = logger;
}
[Function("HttpExample")]
public IActionResult Run([HttpTrigger(AuthorizationLevel.AuthLevelValue, "get", "post")] HttpRequest req)
{
_logger.LogInformation("C# HTTP trigger function processed a request.");
return new OkObjectResult("Welcome to Azure Functions!");
}
}
}
O objeto de retorno é um objeto IActionResult que contém os dados que são devolvidos para a resposta HTTP.
Para saber mais, confira Gatilhos e associações HTTP do Azure Functions.
Executar a função localmente
Execute sua função iniciando o host de runtime do Azure Functions local da pasta LocalFunctionProj:
func start
Perto 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 ...
Observação
Se HttpExample não aparece conforme mostrado acima, é provável que você tenha iniciado o host 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
HttpExample
dessa saída para um navegador e navegue até a URL da função e você deverá receber uma mensagem Bem-vindo ao Azure Functions.Quando você concluir, use Ctrl+C e escolha
y
para interromper o host de funções.
Criar recursos de suporte do Azure para a função
Antes de poder implantar o código da função 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çõ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 a seguir para criar esses itens. Tanto a CLI do Azure quanto o PowerShell são compatíveis.
Se você ainda não tiver feito isso, entre no Azure:
az login
O comando az login conecta você à conta do Azure.
Crie um grupo de recursos chamado
AzureFunctionsQuickstart-rg
na região de sua escolha:az group create --name AzureFunctionsQuickstart-rg --location <REGION>
O comando az group create 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<REGION>
.Crie uma conta de armazenamento para uso geral no grupo de recursos e na região:
az storage account create --name <STORAGE_NAME> --location <REGION> --resource-group AzureFunctionsQuickstart-rg --sku Standard_LRS --allow-blob-public-access false
O comando az storage account create cria a conta de armazenamento.
No exemplo anterior, substitua
<STORAGE_NAME>
por um nome que seja 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_LRS
especifica uma conta de uso geral, que é compatível com o Functions.
Importante
A conta de armazenamento é usada para armazenar dados importantes do aplicativo, às vezes incluindo o próprio código do aplicativo. Você deve limitar o acesso de outros aplicativos e usuários à conta de armazenamento.
Criar o aplicativo de funções no Azure:
az functionapp create --resource-group AzureFunctionsQuickstart-rg --consumption-plan-location <REGION> --runtime dotnet-isolated --functions-version 4 --name <APP_NAME> --storage-account <STORAGE_NAME>
O comando az functionapp create cria o aplicativo de funções no Azure.
No exemplo anterior, substitua
<STORAGE_NAME>
pelo nome da conta usada na etapa anterior e substitua<APP_NAME>
por um nome globalmente exclusivo que seja apropriado para você. O<APP_NAME>
também é o domínio do DNS padrão para o aplicativo de funções.Este comando cria um aplicativo de funções que executa o runtime da linguagem especificada no Plano de Consumo do Azure Functions, que é gratuito para o uso que você fará aqui. O comando também cria uma instância associada do Azure Application Insights no mesmo grupo de recursos, com o qual será possível monitorar o aplicativo de funções e exibir os logs. Para saber mais, consulte Monitorar Azure Functions. A instância não gera nenhum custo até você ativá-la.
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 este 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
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 fazer isso 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. Quando você navega para essa URL, o navegador deve exibir uma saída semelhante à de quando você executou a função localmente.
Execute o seguinte comando para ver os logs de streaming quase em tempo real:
func azure functionapp logstream <APP_NAME>
Em uma janela de terminal separada ou no navegador, chame a função remota novamente. Um log detalhado da execução da função no Azure é mostrado no terminal.
Limpar 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