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:
Funções HTTP, que processam pedidos HTTP e usam acionadores HTTP. Consulte o artigo Escreva funções HTTP para ver informações sobre a implementação de funções HTTP.
Funções orientadas por eventos, que processam eventos do seu ambiente na nuvem e usam acionadores de eventos, conforme descrito em Acionadores de funções do Cloud Run. Consulte o artigo Escreva funções orientadas por eventos para obter informações sobre a implementação de funções orientadas por eventos.
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:
- Especificar dependências no Node.js
- Especificar dependências em Python
- Especificar dependências em Go
- Especificar dependências em Java
- Especificar dependências no .NET
- Especificar dependências no Ruby
- Especificar dependências em PHP
Passos seguintes
- Saiba como escrever funções HTTP.
- Saiba como escrever funções orientadas por eventos.
- Saiba mais sobre os acionadores de funções do Cloud Run.