Scrivi in Cloud Functions
Cloud Functions supporta la scrittura del 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 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 gli attivatori HTTP. Per informazioni sull'implementazione delle funzioni HTTP, consulta la sezione Scrivere funzioni HTTP.
Funzioni basate su eventi, che gestiscono gli eventi dal tuo ambiente cloud e utilizzano gli attivatori di eventi come descritto in Attivatori di Cloud Functions. Per informazioni sull'implementazione delle funzioni basate su eventi, consulta Scrivere funzioni basate su eventi.
Utilizza una funzione HTTP quando la funzione deve avere un endpoint URL e rispondere alle richieste HTTP, ad esempio per i webhook. Utilizza una funzione basata su eventi quando la funzione deve essere attivata direttamente in risposta agli eventi all'interno del tuo progetto Google Cloud, come i messaggi su un argomento Pub/Sub o le modifiche in un bucket Cloud Storage.
Struttura della directory di origine
Per consentire a Cloud Functions di individuare la definizione della funzione, ogni runtime del linguaggio presenta requisiti per la strutturazione del codice sorgente. Di seguito è riportata la struttura di directory di base di una funzione in ogni runtime.
Node.js
La struttura di directory di base 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 file di origine principale diverso, utilizza il campo main
nel file package.json
.
Il tuo file package.json
deve includere anche il
Functions Framework 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 importare normalmente il codice e i moduli Node.js. Il file principale può anche definire più punti di ingresso per le funzioni di cui è possibile eseguire il deployment separatamente.
Python
La struttura di directory di base 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 file principale deve essere denominato main.py
.
Il tuo file requirements.txt
deve includere il
Functions Framework per Python
come dipendenza:
functions-framework==3.*
Il codice nel file main.py
deve definire il tuo punto di ingresso della funzione e importare normalmente il codice e le dipendenze esterne. Il file main.py
può anche definire più punti di ingresso della funzione di cui è possibile eseguire il deployment separatamente.
Go
La struttura di directory di base per le funzioni di 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 della funzione che non può essere in package main
. Se ti serve un pacchetto main
, ad esempio per i test locali, puoi crearne uno in una sottodirectory:
. ├── myfunction.go ├── go.mod └── cmd/ └── main.go
Il tuo file go.mod
deve includere il
Functions Framework 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 il codice da sottopacchetti e dipendenze normalmente. Il pacchetto può anche definire più punti di ingresso della funzione di cui è possibile eseguire il deployment separatamente.
Java
La struttura di directory di base 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 un nome qualsiasi. 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
Consigliamo di inserire i test associati in una sottodirectory src/test/java/
.
Il file pom.xml
deve includere il
Functions Framework 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 importare normalmente il codice e le dipendenze esterne. I file di origine possono anche 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 faresti con qualsiasi altro codice sorgente .NET. I file di origine possono avere qualsiasi nome.
Il file di progetto deve includere il Functions Framework 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 importare normalmente il codice e le dipendenze esterne. I file di origine possono anche 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 directory di base 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 file principale deve essere denominato app.rb
.
Il tuo file Gemfile
deve includere il
Functions Framework per Ruby
come dipendenza:
source "https://rubygems.org"
gem "functions_framework", "~> 1.0"
Il codice nel file app.rb
deve definire il tuo punto di ingresso della funzione e importare normalmente il codice e le dipendenze esterne. Il file app.rb
può anche definire più punti di ingresso della funzione di cui è possibile eseguire il deployment separatamente.
PHP
La struttura di directory di base 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 file principale deve essere denominato index.php
.
Il file composer.json
deve includere il
Functions Framework per PHP
come dipendenza:
{
"require": {
"google/cloud-functions-framework": "^1.1"
}
}
Il codice nel file index.php
deve definire il tuo punto di ingresso della funzione e importare normalmente il codice e le dipendenze esterne. Il file index.php
può anche definire più punti di ingresso della funzione di cui è possibile eseguire il deployment separatamente.
Se stai pensando di raggruppare più funzioni in un unico progetto, tieni presente 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 propri file di configurazione di origine e di progetto. Questo approccio riduce al minimo il numero di dipendenze necessarie per una determinata funzione, il che a sua volta riduce la quantità di memoria necessaria per la funzione.
Punto di ingresso 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. Questo punto di ingresso viene specificato al momento del deployment della funzione.
La modalità di definizione del punto di accesso dipende dal runtime della lingua utilizzato. Per alcune lingue, il punto di contatto è una funzione, mentre per altri il punto di contatto è una classe. Per scoprire di più su come definire i punti di contatto e implementare Cloud Functions in diverse lingue, consulta Scrivere funzioni HTTP e Scrivere funzioni basate su eventi.
Dipendenze
Puoi gestire le dipendenze utilizzando strumenti standard per ogni runtime. Per scoprire di più, consulta la pagina appropriata:
- Specificare le dipendenze in Node.js
- Specificare le dipendenze in Python
- Specificare le dipendenze in Go
- Specificare le dipendenze in Java
- Specificare le dipendenze in .NET
- Specificare le dipendenze in Ruby
- Specificare le dipendenze in PHP
Passaggi successivi
- Scopri come scrivere funzioni HTTP.
- Scopri come scrivere funzioni basate su eventi.
- Scopri di più sugli attivatori di Cloud Functions.