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:

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:

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.

  1. 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
    
  2. 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.

  3. 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

  1. 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.

  2. 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.

  3. 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.

  1. Se você ainda não tiver feito isso, entre no Azure:

    az login
    

    O comando az login conecta você à conta do Azure.

  2. 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>.

  3. 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.

  1. 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 sucesso o aplicativo de funções no Azure, você estará pronto para implantar um projeto local de funções usando o comando func azure functionapp publish.

No exemplo a seguir, substitua <APP_NAME> pelo nome do aplicativo.

func azure functionapp publish <APP_NAME>

O comando de publicação mostra resultados semelhantes à seguinte saída (truncado para fins de simplicidade):

...

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

Próximas etapas