Escreva funções do Cloud Run

As funções do Cloud Run suportam a escrita de código fonte num número de linguagens de programação. O tempo de execução do idioma que escolher e o tipo de função que quer escrever determinam como estruturar o código e implementar a função. Esta página oferece uma vista geral dos tipos de funções do Cloud Run e das expetativas para o código fonte.

Tipos de funções do Cloud Run

Existem dois tipos de funções do Cloud Run:

Use uma função HTTP quando precisar que a sua função tenha um ponto final de URL e responda a pedidos HTTP, como para webhooks. Use uma função orientada por eventos quando a função deve ser acionada diretamente em resposta a eventos no seu Google Cloud projeto, como mensagens num tópico do Pub/Sub ou alterações num contentor do Cloud Storage.

Estrutura do diretório de origem

Para que as funções do Cloud Run localizem a definição da sua função, cada tempo de execução de linguagem tem requisitos para estruturar o seu código-fonte. A estrutura de diretórios básica de uma função em cada tempo de execução é apresentada abaixo.

Node.js

A estrutura de diretórios básica para funções do Node.js é a seguinte:

.
├── index.js
└── package.json

Por predefinição, as funções do Cloud Run tentam carregar o código-fonte a partir de um ficheiro com o nome index.js na raiz do diretório da função. Para especificar um ficheiro de origem principal diferente, use o campo main no ficheiro package.json.

O seu ficheiro package.json também tem de incluir o Functions Framework para Node.js como uma dependência:

{
  "main": "index.js",
  "dependencies": {
    "@google-cloud/functions-framework": "^3.0.0"
  }
}

O código no ficheiro principal tem de definir o ponto de entrada da função e pode importar outro código e módulos do Node.js como habitualmente. O ficheiro principal também pode definir vários pontos de entrada de funções que podem ser implementados separadamente.

Python

A estrutura de diretórios básica para funções Python é a seguinte:

.
├── main.py
└── requirements.txt

As funções do Cloud Run carregam o código-fonte de um ficheiro denominado main.py na raiz do diretório da função. O ficheiro principal tem de ter o nome main.py.

O seu ficheiro requirements.txt tem de incluir o Functions Framework para Python como uma dependência:

functions-framework==3.*

O código no seu ficheiro main.py tem de definir o ponto de entrada da função e pode importar outro código e dependências externas normalmente. O ficheiro main.py também pode definir vários pontos de entrada de funções que podem ser implementados separadamente.

Go

A estrutura de diretórios básica para funções Go é a seguinte:

.
├── myfunction.go
└── go.mod

A sua função tem de estar num pacote Go na raiz do seu projeto. O pacote e os respetivos ficheiros de origem podem ter qualquer nome, exceto que a função não pode estar em package main. Se precisar de um pacote main, por exemplo, para testes locais, pode criar um num subdiretório:

.
├── myfunction.go
├── go.mod
└── cmd/
    └── main.go

O seu ficheiro go.mod tem de incluir o Functions Framework para Go como uma dependência:

module example.com/my-module

require (
  github.com/GoogleCloudPlatform/functions-framework-go v1.5.2
)

O código no pacote raiz tem de definir o ponto de entrada da função e pode importar outro código de subpacotes e dependências como habitualmente. O seu pacote também pode definir vários pontos de entrada de funções que podem ser implementados separadamente.

Java

A estrutura de diretórios básica para funções Java é a seguinte:

.
├── pom.xml
└── src/
    └── main/
        └── java/
            └── MyFunction.java

Os seus ficheiros de origem Java têm de estar no diretório src/main/java/ e podem ter qualquer nome. Se os seus ficheiros de origem declararem um pacote, adicione um diretório adicional em src/main/java com o nome do pacote:

.
├── pom.xml
└── src/
    └── main/
        └── java/
            └── mypackage/
                └── MyFunction.java

Recomendamos que coloque os testes associados num subdiretório src/test/java/.

O seu ficheiro pom.xml tem de incluir o Functions Framework for Java como uma dependência:

...
    <dependency>
      <groupId>com.google.cloud.functions</groupId>
      <artifactId>functions-framework-api</artifactId>
      <version>1.0.4</version>
    </dependency>
...

O código nos ficheiros de origem tem de definir o ponto de entrada da função e pode importar outro código e dependências externas normalmente. Os ficheiros de origem também podem definir vários pontos de entrada de funções que podem ser implementados separadamente.

C#

A estrutura de diretórios básica para funções .NET é a seguinte:

.
├── MyFunction.cs
└── MyProject.csproj

Pode estruturar os seus projetos como faria com qualquer outro código-fonte .NET. Os ficheiros de origem podem ter qualquer nome.

O ficheiro de projeto tem de incluir o Functions Framework para .NET como uma dependência:

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

O código nos ficheiros de origem tem de definir o ponto de entrada da função e pode importar outro código e dependências externas normalmente. Os ficheiros de origem também podem definir vários pontos de entrada de funções que podem ser implementados separadamente.

Também pode usar o pacote de modelos de funções do Cloud Run para .NET para gerar os ficheiros necessários.

Ruby

A estrutura de diretórios básica para funções Ruby é a seguinte:

.
├── app.rb
├── Gemfile
└── Gemfile.lock

As funções do Cloud Run carregam o código-fonte de um ficheiro denominado app.rb na raiz do diretório da função. O ficheiro principal tem de ter o nome app.rb.

O seu ficheiro Gemfile tem de incluir o Functions Framework para Ruby como uma dependência:

source "https://rubygems.org"
gem "functions_framework", "~> 1.0"

O código no seu ficheiro app.rb tem de definir o ponto de entrada da função e pode importar outro código e dependências externas normalmente. O ficheiro app.rb também pode definir vários pontos de entrada de funções que podem ser implementados separadamente.

PHP

A estrutura de diretórios básica para funções PHP é a seguinte:

.
├── index.php
└── composer.json

As funções do Cloud Run carregam o código-fonte de um ficheiro denominado index.php na raiz do diretório da função. O ficheiro principal tem de ter o nome index.php.

O seu ficheiro composer.json tem de incluir o Functions Framework para PHP como uma dependência:

{
  "require": {
    "google/cloud-functions-framework": "^1.1"
  }
}

O código no seu ficheiro index.php tem de definir o ponto de entrada da função e pode importar outro código e dependências externas normalmente. O ficheiro index.php também pode definir vários pontos de entrada de funções que podem ser implementados separadamente.

Se estiver a pensar em agrupar várias funções num único projeto, tenha em atenção que cada função pode acabar por partilhar o mesmo conjunto de dependências. No entanto, algumas das funções podem não precisar de todas as dependências.

Sempre que possível, recomendamos que divida grandes bases de código multifuncionais e coloque cada função no seu próprio diretório de nível superior, conforme mostrado acima, com os seus próprios ficheiros de configuração de origem e de projeto. Esta abordagem minimiza o número de dependências necessárias para uma determinada função, o que, por sua vez, reduz a quantidade de memória de que a função precisa.

Ponto de entrada da função

O código-fonte tem de definir um ponto de entrada para a função, que é o código específico que é executado quando a função do Cloud Run é invocada. Especifica este ponto de entrada quando implementa a sua função.

A forma como define o ponto de entrada depende do tempo de execução da linguagem que usa. Para alguns idiomas, o ponto de entrada é uma função, enquanto para outros o ponto de entrada é uma classe. Para saber como definir pontos de entrada e implementar funções do Cloud Run em diferentes idiomas, consulte os artigos Escreva funções HTTP e Escreva funções orientadas por eventos.

Dependências

Pode gerir as dependências através de ferramentas padrão para cada tempo de execução. Para mais informações, consulte a página adequada:

Passos seguintes