Scrivi una funzione Cloud Functions

Cloud Functions supporta la scrittura di codice sorgente in vari linguaggi di programmazione. Il runtime del linguaggio scelto e il tipo di funzione che vuoi scrivere determinano come strutturare il codice e implementare la funzione. Questa pagina fornisce una panoramica dei tipi di Cloud Functions e delle aspettative relative al codice sorgente.

Tipi di funzioni Cloud Functions

Esistono due tipi di funzioni Cloud Functions:

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

Struttura della directory di origine

Affinché Cloud Functions trovi la definizione della tua funzione, ogni runtime del linguaggio ha dei requisiti per strutturare il codice sorgente. Di seguito è riportata la struttura di directory di base 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 Functions tenta di caricare il codice sorgente da un file denominato index.js nella directory principale della directory delle funzioni. Per specificare un altro file di origine principale, utilizza il campo main nel file package.json.

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

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

Il codice nel file principale deve definire il punto di ingresso della funzione e può importare altri moduli di codice e Node.js come di consueto. Il file principale può anche definire più punti di ingresso delle funzioni di cui è possibile eseguire il deployment separatamente.

Python

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

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

Cloud Functions carica il codice sorgente da un file denominato main.py nella directory principale della directory delle funzioni. Il nome del file principale deve essere main.py.

Il file requirements.txt deve includere il framework delle funzioni per Python come dipendenza:

functions-framework==3.*

Il codice nel file main.py deve definire il punto di ingresso della funzione e può importare altri codici e dipendenze esterne come di consueto. Il file main.py può anche definire più punti di ingresso delle funzioni di cui è possibile eseguire il deployment 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 di origine possono avere qualsiasi nome, ad eccezione del fatto che la funzione non può essere in package main. Se hai bisogno di un pacchetto main, ad esempio per test locali, puoi crearne uno in una sottodirectory:

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

Il file go.mod deve includere il framework di funzioni 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 il punto di ingresso della funzione e può importare altro codice da sottopacchetti e dipendenze, come di consueto. Il pacchetto può anche definire più punti di ingresso delle funzioni di cui è possibile eseguire il deployment separatamente.

Java

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

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

I file di origine Java devono trovarsi nella directory src/main/java/ e possono avere qualsiasi nome. Se i tuoi file di origine dichiarano un pacchetto, aggiungi un'altra directory 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 delle funzioni 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 di origine deve definire il punto di ingresso della funzione e può importare altro codice e dipendenze esterne come di consueto. I file di origine possono anche definire più punti di ingresso delle funzioni di cui è possibile eseguire il deployment separatamente.

C#

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

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

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

Il file del progetto deve includere il framework delle funzioni per .NET come dipendenza:

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

Il codice nei file di origine deve definire il punto di ingresso della funzione e può importare altro codice e dipendenze esterne come di consueto. I file di origine possono anche definire più punti di ingresso delle funzioni di cui è possibile eseguire il deployment separatamente.

Puoi anche utilizzare il modello di pacchetto di Cloud 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 Functions carica il codice sorgente da un file denominato app.rb nella directory principale della directory delle funzioni. Il nome del file principale deve essere app.rb.

Il file Gemfile deve includere il framework delle funzioni per Ruby come dipendenza:

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

Il codice nel file app.rb deve definire il punto di ingresso della funzione e può importare altri codici e dipendenze esterne come di consueto. Il file app.rb può anche definire più punti di ingresso delle funzioni di cui è possibile eseguire il deployment separatamente.

PHP

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

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

Cloud Functions carica il codice sorgente da un file denominato index.php nella directory principale della directory delle funzioni. Il nome del file principale deve essere index.php.

Il file composer.json deve includere il framework delle funzioni per PHP come dipendenza:

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

Il codice nel file index.php deve definire il punto di ingresso della funzione e può importare altri codici e dipendenze esterne come di consueto. Il file index.php può anche definire più punti di ingresso delle funzioni di cui è possibile eseguire il deployment separatamente.

Se stai pensando di raggruppare più funzioni in un singolo progetto, sappi che ogni funzione può finire per condividere lo stesso insieme di dipendenze. Tuttavia, alcune funzioni potrebbero non richiedere tutte le dipendenze.

Se possibile, consigliamo di suddividere grandi codebase multifunzione e di inserire ogni funzione nella propria directory di primo livello, come mostrato sopra, con i relativi file di origine e di configurazione del progetto. Questo approccio riduce al minimo il numero di dipendenze necessarie per una particolare funzione, il che a sua volta riduce la quantità di memoria necessaria per la funzione.

Punto di ingresso della funzione

Il codice sorgente deve definire un punto di ingresso per la funzione, ovvero il particolare codice che viene eseguito quando viene richiamata la Cloud Function. Questo punto di ingresso viene specificato al momento del deployment della funzione.

Il modo in cui definisci il punto di ingresso dipende dal runtime del linguaggio utilizzato. Per alcune lingue, il punto di ingresso è una funzione, mentre per altre è una classe. Per ulteriori informazioni sulla definizione dei punti di ingresso e sull'implementazione di Cloud Functions in diversi linguaggi, consulta Scrivere funzioni HTTP e Scrivere funzioni basate su eventi.

Dipendenze

Puoi gestire le dipendenze utilizzando gli strumenti standard per ogni runtime. Per ulteriori informazioni, consulta la pagina appropriata:

Passaggi successivi