Scrivi una funzione Cloud Functions
Cloud 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 come strutturare il codice e implementare la funzione. Questa pagina fornisce una panoramica dei tipi di funzioni Cloud Functions e delle aspettative per il codice sorgente.
Tipi di funzioni Cloud Functions
Esistono due tipi di funzioni Cloud Functions:
Funzioni HTTP, che gestiscono le richieste HTTP e utilizzano i trigger HTTP. Per informazioni sull'implementazione delle funzioni HTTP, consulta Scrittura delle funzioni HTTP.
Funzioni basate su eventi, che gestiscono gli eventi dal tuo ambiente cloud e utilizzano i trigger di eventi come descritto in Trigger di Cloud Functions. Per informazioni sull'implementazione delle funzioni basate su eventi, consulta Scrivere funzioni basate su eventi.
Utilizza una funzione HTTP se è necessario che la funzione abbia un endpoint URL e risponda 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, come messaggi su un argomento Pub/Sub o modifiche in un bucket Cloud Storage.
Struttura della directory di origine
Per consentire a Cloud Functions di individuare la definizione della funzione, ogni runtime di linguaggio ha dei requisiti per strutturare il codice sorgente. Di seguito è mostrata la struttura di base della directory per una funzione in ogni 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 codici e moduli Node.js normalmente. 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 altro codice e dipendenze esterne come di consueto. Il file main.py
può inoltre definire più punti di ingresso della funzione 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 a livello di directory principale del progetto. Il pacchetto e i relativi file di origine possono avere qualsiasi nome, ad eccezione della funzione che 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 delle funzioni per Go
come dipendenza:
module example.com/my-module
require (
github.com/GoogleCloudPlatform/functions-framework-go v1.5.2
)
Il codice nel pacchetto root 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 entrata della funzione 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 file di origine 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 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 sorgente deve definire il punto di ingresso della funzione e può importare altro codice e dipendenze esterne come di consueto. I file di origine possono inoltre definire più punti di ingresso della funzione di cui è possibile eseguire il deployment separatamente.
C#
La struttura di base delle directory per le funzioni .NET è la seguente:
. ├── MyFunction.cs └── MyProject.csproj
Puoi strutturare i progetti come qualsiasi altro codice sorgente .NET. I file di origine possono avere qualsiasi nome.
Il file di 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 sorgente deve definire il punto di ingresso della funzione e può importare altro codice e dipendenze esterne come di consueto. I file di origine possono inoltre definire più punti di ingresso della funzione di cui è possibile eseguire il deployment separatamente.
Puoi anche utilizzare il pacchetto di modelli 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 altro codice e dipendenze esterne come di consueto. Il file app.rb
può inoltre definire più punti di ingresso della funzione di cui è possibile eseguire il deployment separatamente.
PHP
La struttura di base delle 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 altro codice e dipendenze esterne come di consueto. Il file index.php
può inoltre definire più punti di ingresso della funzione di cui è possibile eseguire il deployment separatamente.
Se stai pensando di raggruppare più funzioni in un singolo progetto, tieni presente che ogni funzione potrebbe condividere lo stesso insieme di dipendenze. Tuttavia, alcune funzioni potrebbero non richiedere tutte le dipendenze.
Ove possibile, ti consigliamo di suddividere 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 di origine e di progetto. 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 per la funzione.
Punto di ingresso della funzione
Il codice sorgente deve definire un punto di ingresso per la funzione, ovvero il codice specifico che viene eseguito quando viene richiamata la Cloud Function. Puoi specificare questo punto di ingresso quando esegui il deployment della funzione.
La modalità di definizione del punto di ingresso dipende dal runtime del linguaggio utilizzato. Per alcune lingue, il punto di ingresso è una funzione, mentre per altre è una classe. Per saperne di più 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 strumenti standard per ogni runtime. Per ulteriori informazioni, consulta la pagina appropriata:
- Specifica delle dipendenze in Node.js
- Specifica delle dipendenze in Python
- Specifica delle dipendenze in Go
- Specifica delle dipendenze in Java
- Specifica delle dipendenze in .NET
- Specifica delle dipendenze in Ruby
- Specifica delle dipendenze in PHP
Passaggi successivi
- Scopri come scrivere funzioni HTTP.
- Scopri come scrivere funzioni basate su eventi.
- Scopri di più sui trigger di Cloud Functions.