Guia de início rápido: criar uma função C# no Azure a partir da linha de comando

Neste artigo, você usa ferramentas de linha de comando para criar uma função C# que responde a solicitações HTTP. Depois de testar o código localmente, vai implementá-lo no ambiente sem servidor das Funções do Azure.

Este artigo cria uma função acionada por HTTP que é executada no .NET 8 em um processo de trabalho isolado. Para obter informações sobre as versões do .NET suportadas para funções C#, consulte Versões suportadas. Há também uma versão baseada em código do Visual Studio deste artigo.

A conclusão deste início rápido incorre num pequeno custo de alguns cêntimos USD ou menos na sua conta do Azure.

Configure seu ambiente local

Antes de começar, você deve ter o seguinte:

  • SDK do .NET 8.0.

  • Uma das seguintes ferramentas para criar recursos do Azure:

Você também precisa de uma conta do Azure com uma assinatura ativa. Crie uma conta gratuitamente.

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 Leiame das Ferramentas Principais.

Transfira e execute o instalador das Ferramentas Principais, com base na sua versão do Windows:

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.

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 a um gatilho específico. Todas as funções em um projeto compartilham as mesmas configurações locais e de hospedagem. Nesta seção, você cria um projeto de função que contém uma única função.

  1. Execute o comando, da seguinte forma, para criar um projeto de funções em uma pasta chamada LocalFunctionProj com o func init tempo de execução especificado:

    func init LocalFunctionProj --worker-runtime dotnet-isolated --target-framework net8.0
    
  2. Navegue até a pasta do projeto:

    cd LocalFunctionProj
    

    Esta pasta 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 .

  3. Adicione uma função ao seu projeto usando o seguinte comando, onde o argumento é o nome exclusivo da sua função (HttpExample) e o argumento especifica o --name--template 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 desejar, você pode pular para Executar a função localmente e examinar o conteúdo do arquivo mais tarde.

HttpExample.cs

HttpExample.cs contém um método que recebe dados de req solicitação na variável como um Runobjeto HttpRequest. Esse parâmetro é decorado com o 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 return é um objeto IActionResult que contém os dados que são devolvidos à resposta HTTP.

Para saber mais, consulte Gatilhos e associações HTTP do Azure Functions.

Executar a função localmente

  1. Execute sua função iniciando o host de tempo de execução local do Azure Functions a partir da pasta LocalFunctionProj :

    func start
    

    No final da saída, as seguintes linhas devem aparecer:

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

    Nota

    Se HttpExample não aparecer como mostrado acima, você provavelmente iniciou 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.

  2. Copie a URL da sua HttpExample função dessa saída para um navegador e navegue até a URL da função e você deve receber uma mensagem Bem-vindo ao Azure Functions .

  3. Quando terminar, use Ctrl+C e escolha y parar 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 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ção, que fornece o ambiente para executar seu código de função. Um aplicativo de função mapeia 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. A CLI do Azure e o PowerShell são suportados.

  1. Se ainda não o fez, inicie sessão no Azure:

    az login
    

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

  2. Crie um grupo de recursos nomeado AzureFunctionsQuickstart-rg na região escolhida:

    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 az account list-locations .

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

    O comando az storage account create cria a conta de armazenamento.

    No exemplo anterior, 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_LRS especifica uma conta de uso geral, que é suportada pelo 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. Crie o aplicativo de função 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ção no Azure.

    No exemplo anterior, substitua pelo nome da conta usada na etapa anterior e substitua <STORAGE_NAME><APP_NAME> por um nome globalmente exclusivo apropriado para você. O <APP_NAME> também é o domínio DNS predefinido para a aplicação de funções.

    Este comando cria um aplicativo de função em execução em seu tempo de execução de idioma especificado no Plano de Consumo do Azure Functions, que é gratuito para a quantidade de uso que você incorre aqui. O comando também cria uma instância associada do Azure Application Insights no mesmo grupo de recursos, com a qual você pode monitorar seu aplicativo de função e exibir logs. Para obter mais informações, consulte Monitorar o Azure Functions. A instância não incorre em custos até que você a ative.

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 comando func azure functionapp publishing .

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

func azure functionapp publish <APP_NAME>

O comando publish 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

Invoque a função no Azure

Como sua função usa um gatilho HTTP e suporta solicitações GET, você a invoca fazendo uma solicitação HTTP para sua URL. É mais fácil fazer isso em um navegador.

Copie o URL Invoke completo mostrado na saída do comando publish em uma barra de endereço do navegador. Quando você navega para esse URL, o navegador deve exibir uma saída semelhante à de quando você executou a função localmente.


Execute o seguinte comando para visualizar 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.

Clean up resources (Limpar recursos)

Se você continuar para a próxima etapa e adicionar uma vinculação de saída de fila do Armazenamento do Azure, mantenha todos os seus recursos no lugar, pois você aproveitará o que já fez.

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