Sua primeira função: .NET

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

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

Estrutura do guia

  1. Como criar um projeto do GCP usando o SDK do Cloud
  2. Como criar uma função
  3. Como especificar dependências
  4. Como implantar a função
  5. Como testar a função implantada
  6. Como visualizar registros
  7. Como usar o framework de funções

Como criar um projeto do GCP usando o Cloud SDK

  1. Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. No Console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  3. Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como confirmar se o faturamento está ativado para o projeto.

  4. Ative as APIs Cloud Functions and Cloud Build.

    Ative as APIs

  5. No Console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  6. Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como confirmar se o faturamento está ativado para o projeto.

  7. Ative as APIs Cloud Functions and Cloud Build.

    Ative as APIs

  8. Instale e inicie o SDK do Cloud.
  9. Atualize e instale os componentes gcloud:
    gcloud components update
  10. Prepare seu ambiente de desenvolvimento.

    Acessar o guia de configuração do .NET

Como criar uma função

Nesta seção, descrevemos como criar manualmente uma função a partir do zero. Também é possível usar os modelos fornecidos pelo pacote de modelo.

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 com o conteúdo abaixo:

    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!");
            }
        }
    }

    Esta função de exemplo gera a saudação "Hello World!"

Como especificar dependências

A próxima etapa é configurar as dependências: É possível configurar dois tipos diferentes de dependências no C# do Cloud Functions:

Para disponibilizar o Functions Frameworks, altere o diretório para o diretório helloworld criado acima:

     cd ~/helloworld

Em seguida, crie um arquivo chamado HelloWorld.csproj com o conteúdo abaixo:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Google.Cloud.Functions.Hosting" Version="1.0.0" />
  </ItemGroup>
</Project>

Como implantar a função

Para implantar a função com um gatilho HTTP, execute o seguinte comando no diretório helloworld:

gcloud functions deploy my-first-function --entry-point HelloWorld.Function --runtime dotnet3 --trigger-http --allow-unauthenticated

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

Como testar a função implantada

  1. Quando a implantação da função estiver concluída, anote a propriedade httpsTrigger.url ou encontre-a usando o seguinte comando:

    gcloud functions describe my-first-function
    

    A aparência será semelhante a esta:

    https://GCP_REGION-PROJECT_ID.cloudfunctions.net/my-first-function
  2. Visite este URL no navegador. Você verá uma mensagem Hello World!.

Como visualizar registros

Como usar a ferramenta de linha de comando

Os registros do Cloud Functions são visíveis na IU do Cloud Logging e na ferramenta de linha de comando gcloud.

Para ver os registros da função com a ferramenta gcloud, use o comando logs read, seguido pelo nome da função:

gcloud functions logs read my-first-function

A saída será semelhante a esta:

LEVEL  NAME               EXECUTION_ID  TIME_UTC                 LOG
D      my-first-function  k2bqgroszo4u  2020-07-24 18:18:01.791  Function execution started
D      my-first-function  k2bqgroszo4u  2020-07-24 18:18:01.958  Function execution took 168 ms, finished with status code: 200
...

Como usar o painel do Logging

Você também pode ver os registros do Cloud Functions no Console do Cloud.

Como usar o pacote de modelos

As seções acima informam como criar manualmente uma função a partir do zero. De agora em diante, você provavelmente usará modelos para criar novas funções.

Para usar modelos para criar, compilar e testar uma função:

  1. Instale o SDK do .NET Core 3.1.

  2. Instale o pacote do modelo:

    dotnet new -i Google.Cloud.Functions.Templates
    
  3. Em seguida, crie um diretório para o projeto e use dotnet new para criar uma nova função HTTP:

    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. Crie a função localmente, da seguinte maneira:

    dotnet run
    
  5. Quando o servidor estiver em execução, acesse http://localhost:8080 para invocar a função. Pressione Ctrl-C no console para interromper o servidor.

    Essa função exibirá a mensagem "Hello Functions Framework".

Como alternativa, envie solicitações para essa função usando curl de outra janela de terminal:

curl localhost:8080
# Output: Hello Functions Framework