Scrivi funzioni Cloud Run

Cloud Run Functions supporta la scrittura di codice sorgente in numerosi linguaggi di programmazione. Il runtime del linguaggio che scegli e il tipo di funzione che vuoi scrivere determinano la struttura del codice e l'implementazione della funzione. Questa pagina fornisce una panoramica dei tipi di funzioni Cloud Run e delle aspettative per il codice sorgente.

Tipi di funzioni Cloud Run

Esistono due tipi di funzioni Cloud Run:

Utilizza una funzione HTTP quando vuoi che la tua funzione abbia un endpoint URL e risponda alle richieste HTTP, ad esempio per i webhook. Utilizza una funzione basata su eventi quando la funzione deve essere attivata direttamente in risposta a eventi all'interno del tuo progetto Google Cloud , ad esempio messaggi in un argomento Pub/Sub o modifiche in un bucket Cloud Storage.

Struttura della directory di origine

Affinché Cloud Run Functions possa individuare la definizione della tua funzione, il runtime di ogni linguaggio ha requisiti per la struttura del codice sorgente. Di seguito è riportata la struttura di base della directory per una funzione in ciascun runtime.

Node.js

La struttura di base della directory per le funzioni Node.js è la seguente:

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

Per impostazione predefinita, Cloud Run Functions tenta di caricare il codice sorgente da un file denominato index.js nella directory principale della funzione. Per specificare un file sorgente principale diverso, utilizza il campo main nel file package.json.

Il file package.json deve includere anche il framework di Functions per Node.js come dipendenza:

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

Il codice nel file principale deve definire l'entry point della funzione e può importare altri moduli di codice e Node.js come di consueto. Il file principale può anche definire più entry point della funzione, il cui deployment può essere eseguito separatamente.

Python

La struttura di base della directory per le funzioni Python è la seguente:

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

Cloud Run Functions carica il codice sorgente da un file denominato main.py nella directory principale della funzione. Il file principale deve essere denominato main.py.

Il file requirements.txt deve includere il framework di Functions per Python come dipendenza:

functions-framework==3.*

Il codice nel file main.py deve definire l'entry point della funzione e può importare altro codice e altre dipendenze esterne come di consueto. Il file main.py può anche definire più entry point della funzione, il cui deployment può essere eseguito separatamente.

Go

La struttura di base della directory per le funzioni Go è la seguente:

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

La funzione deve trovarsi in un pacchetto Go nella directory principale del progetto. Il pacchetto e i relativi file sorgente possono avere qualsiasi nome, ma la funzione non può trovarsi in package main. Se hai bisogno di un pacchetto main, ad esempio per i test locali, puoi crearne uno in una sottodirectory:

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

Il file go.mod deve includere il framework di Functions per Go come dipendenza:

module example.com/my-module

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

Il codice nel pacchetto principale deve definire l'entry point della funzione e può importare altro codice da sottopacchetti e altre dipendenze come di consueto. Il pacchetto può anche definire più entry point della funzione, il cui deployment può essere eseguito separatamente.

Java

La struttura di base della directory per le funzioni Java è la seguente:

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

I file sorgente Java devono trovarsi nella directory src/main/java/ e possono avere qualsiasi nome. Se i file sorgente dichiarano un pacchetto, aggiungi una directory aggiuntiva in src/main/java con il nome del pacchetto:

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

Ti consigliamo di inserire i test associati in una sottodirectory src/test/java/.

Il file pom.xml deve includere il framework di Functions per Java come dipendenza:

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

Il codice nei file sorgente deve definire l'entry point della funzione e può importare altro codice e altre dipendenze esterne come di consueto. I file sorgente possono anche definire più entry point della funzione, il cui deployment può essere eseguito separatamente.

C#

La struttura di base della directory per le funzioni .NET è la seguente:

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

Puoi strutturare i tuoi progetti come faresti con qualsiasi altro codice sorgente .NET. I file sorgente possono avere qualsiasi nome.

Il file di progetto deve includere il framework di Functions per .NET come dipendenza:

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

Il codice nei file sorgente deve definire l'entry point della funzione e può importare altro codice e altre dipendenze esterne come di consueto. I file sorgente possono anche definire più entry point della funzione, il cui deployment può essere eseguito separatamente.

Puoi anche utilizzare il pacchetto di template di Cloud Run Functions per .NET per generare i file richiesti.

Ruby

La struttura di base della directory per le funzioni Ruby è la seguente:

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

Cloud Run Functions carica il codice sorgente da un file denominato app.rb nella directory principale della funzione. Il file principale deve essere denominato app.rb.

Il file Gemfile deve includere il framework di Functions per Ruby come dipendenza:

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

Il codice nel file app.rb deve definire l'entry point della funzione e può importare altro codice e altre dipendenze esterne come di consueto. Il file app.rb può anche definire più entry point della funzione, il cui deployment può essere eseguito separatamente.

PHP

La struttura di base della directory per le funzioni PHP è la seguente:

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

Cloud Run Functions carica il codice sorgente da un file denominato index.php nella directory principale della funzione. Il file principale deve essere denominato index.php.

Il file composer.json deve includere il framework di Functions per PHP come dipendenza:

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

Il codice nel file index.php deve definire l'entry point della funzione e può importare altro codice e altre dipendenze esterne come di consueto. Il file index.php può anche definire più entry point della funzione, il cui deployment può essere eseguito separatamente.

Se stai pensando di raggruppare più funzioni in un unico progetto, tieni presente che ogni funzione potrebbe finire per condividere lo stesso insieme di dipendenze. Tuttavia, alcune funzioni potrebbero non richiederle tutte.

Ove possibile, ti consigliamo di suddividere i codebase multifunzione di grandi dimensioni e di inserire ogni funzione nella propria directory di primo livello, come mostrato sopra, con i propri file di configurazione del progetto e sorgente. Questo approccio riduce al minimo il numero di dipendenze richieste per una determinata funzione, il che a sua volta riduce la quantità di memoria necessaria alla funzione.

Entry point della funzione

Il codice sorgente deve definire un entry point per la funzione, ovvero il codice specifico che viene eseguito quando viene richiamata la funzione Cloud Run. Specifichi questo entry point quando esegui il deployment della funzione.

Il modo in cui definisci l'entry point dipende dal runtime del linguaggio che utilizzi. Per alcuni linguaggi, l'entry point è una funzione, mentre per altri è una classe. Per scoprire di più sulla definizione degli entry point e sull'implementazione di funzioni Cloud Run in linguaggi diversi, consulta Scrivi funzioni HTTP e Scrivi funzioni basate su eventi.

Dipendenze

Puoi gestire le dipendenze utilizzando strumenti standard per ogni runtime. Per saperne di più, consulta la pagina appropriata:

Passaggi successivi