Criar e implantar uma função do Cloud Run em HTTP com .NET

Este guia explica o processo de criação de uma função do Cloud Run usando a linguagem C# do ambiente de execução .NET. Há dois tipos de funções do Cloud Run:

  • Uma função HTTP, que você invoca a partir de solicitações HTTP padrão.
  • Uma função orientada a eventos, que é acionada por eventos em sua infraestrutura do Cloud, como mensagens em um tópico do Pub/Sub ou alterações em um bucket do Cloud Storage.

Para mais detalhes, leia Como escrever funções HTTP e Como escrever funções orientadas a eventos.

Antes de começar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Functions, Cloud Build, Artifact Registry, Cloud Run, and Cloud Logging APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Cloud Functions, Cloud Build, Artifact Registry, Cloud Run, and Cloud Logging APIs.

    Enable the APIs

  8. Instale e inicialize o Google Cloud SDK.
  9. Atualize e instale os componentes gcloud com o comando a seguir.
    gcloud components update
  10. Prepare seu ambiente de desenvolvimento.

    Acessar o guia de configuração do .NET

Criar a função

Esta seção descreve como criar uma função .NET manualmente. Outra possibilidade é usar os modelos do Functions Framework para criar a função.

Para criar uma função:

  1. Crie um diretório no seu sistema local para o código de função:

    Windows

    mkdir %HOMEPATH%\helloworld
    cd %HOMEPATH%\helloworld
    

    Linux ou macOS

    mkdir ~/helloworld
    cd ~/helloworld
    
  2. Crie um arquivo chamado Function.cs no diretório helloworld com o seguinte conteúdo:

    using Google.Cloud.Functions.Framework;
    using Microsoft.AspNetCore.Http;
    using System.Threading.Tasks;
    
    namespace HelloWorld;
    
    public class Function : IHttpFunction
    {
        public async Task HandleAsync(HttpContext context)
        {
            await context.Response.WriteAsync("Hello World!", context.RequestAborted);
        }
    }

Especificar as dependências

As funções do Cloud Run functions precisam de um conjunto de bibliotecas chamado Functions Framework. Para disponibilizar o Functions Framework para seu build, siga estas etapas:

  1. Altere o diretório para o diretório helloworld que você acabou de criar:

     cd ~/helloworld
    
  2. Crie um arquivo chamado HelloWorld.csproj no diretório helloworld com o seguinte conteúdo:

    <Project Sdk="Microsoft.NET.Sdk">
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>net6.0</TargetFramework>
      </PropertyGroup>
    
      <ItemGroup>
        <PackageReference Include="Google.Cloud.Functions.Hosting" Version="2.2.1" />
      </ItemGroup>
    </Project>

Para saber como disponibilizar outras bibliotecas para sua compilação, seja por meio de arquivos de projeto ou dentro do código por meio de injeção de dependência, consulte Personalização por meio de classes de inicialização de funções.

Criar e testar a função localmente

  1. Crie e execute a função localmente com o seguinte comando:

    dotnet run
    
  2. Acesse http://localhost:8080 em um navegador ou execute curl localhost:8080 em outra janela para testar sua função. Se você estiver usando o Cloud Shell, clique no ícone Botão de visualização da Web e escolha Visualizar na porta 8080 para ver a saída da função.

    Saiba mais em Como enviar solicitações para funções locais.

implante a função

Para implantar a função, execute o comando a seguir no diretório helloworld:

  gcloud functions deploy csharp-http-function \
    --gen2 \
    --entry-point=HelloWorld.Function \
    --runtime=dotnet8 \
    --region=REGION \
    --source=. \
    --trigger-http \
    --allow-unauthenticated

Substitua REGION pelo nome da região do Google Cloud em que você quer implantar a função (por exemplo, us-west1).

em que csharp-http-function é o nome registrado pelo qual sua função será identificada no Console do Google Cloud e --entry-point especifica o nome de classe totalmente qualificado da função (FQN).

A flag --allow-unauthenticated opcional permite que você acesse a função sem autenticação.

Testar a função implantada

  1. Depois que a função for implantada, observe a propriedade uri na saída do comando gcloud functions deploy ou recupere-a com o seguinte comando:

    gcloud functions describe csharp-http-function \
      --region=REGION
    

    Substitua REGION pelo nome da região do Google Cloud em que você implantou a função (por exemplo, us-west1).

  2. Acesse http://localhost:8080 em um navegador ou execute curl localhost:8080 em outra janela para testar sua função.

    Saiba mais em Como enviar solicitações para funções locais.

Conferir os registros da função

Conferir os registros com a ferramenta de linha de comando

É possível analisar os registros da função com a IU do Cloud Logging ou por meio da Google Cloud CLI.

Para ver os registros da função com a CLI gcloud, use o comando logs read:

  gcloud functions logs read \
    --gen2 \
    --limit=10 \
    --region=REGION \
    csharp-http-function

Substitua REGION pelo nome da região do Google Cloud em que você implantou a função (por exemplo, us-west1).

A saída será assim:

LEVEL: I
NAME: my-first-function
TIME_UTC: 2023-06-01 12:47:42.221
LOG: Request finished HTTP/1.1 GET http://my-first-function-l5vqvupfzq-uw.a.run.app/favicon.ico - - - 404 0 - 0.9393ms

LEVEL: I
NAME: my-first-function
TIME_UTC: 2023-06-01 12:47:42.220
LOG: Request starting HTTP/1.1 GET http://my-first-function-l5vqvupfzq-uw.a.run.app/favicon.ico - -

Conferir os registros com o painel do Logging

Para ver os registros da função com o painel do Logging, abra a página de visão geral do Cloud Run functions e clique no nome da função na lista. Em seguida, clique na guia Registros.

Criar uma função com o pacote de modelos

Estas instruções ajudaram você a criar uma função simples. Na prática, você provavelmente prefira usar os modelos do Functions Framework para criar as funções.

Para usar os modelos do Functions Framework para criar e testar uma função:

  1. Instale o SDK .NET. Pule esta etapa se estiver usando o Cloud Shell.

  2. Instale o pacote de modelos:

    dotnet new install Google.Cloud.Functions.Templates
    
  3. Crie um diretório para seu projeto e uma função HTTP vazia:

    mkdir HelloFunctions
    cd HelloFunctions
    dotnet new gcf-http
    

    Isso cria HelloFunctions.csproj e Function.cs no diretório atual. Abra Function.cs para analisar o código e forneça uma mensagem personalizada, se quiser.

  4. Como opção, siga as instruções anteriores para criar e testar sua função localmente.

  5. Execute o seguinte comando gcloud deploy para implantar a função:

    gcloud functions deploy HelloFunctions.Function \
      --gen2 \
      --entry-point=HelloWorld.Function \
      --runtime=dotnet8 \
      --region=REGION \
      --source=. \
      --trigger-http \
      --allow-unauthenticated
    

    Substitua REGION pelo nome da região do Google Cloud em que você implantou a função (por exemplo, us-west1).

Para mais informações sobre o Functions Framework, consulte a documentação dele neste link.