Esecuzione di funzioni con il framework di Functions
Cloud Functions utilizza le librerie framework delle funzioni open source per eseguire il wrapping delle funzioni di cui hai eseguito il deployment in un'applicazione HTTP permanente.
Il framework di Functions può inoltre essere eseguito su qualsiasi altra piattaforma che supporti il linguaggio stesso, tra cui la tua macchina locale, i server on-premise, Compute Engine e Cloud Run.
Installa le dipendenze
Nella directory della funzione, installa la libreria del framework di Functions per il tuo linguaggio:
Per ulteriori informazioni, consulta la libreria del framework delle funzioni Java.
Node.js
npm install --save-dev @google-cloud/functions-framework
Python
pip install functions-framework
Go
go install github.com/GoogleCloudPlatform/functions-framework-go/funcframework
Java
Maven
Se utilizzi Maven, aggiungi quanto segue al tuo file pom.xml
:
Gradle
Se utilizzi Gradle, aggiungi quanto segue al tuo
file build.gradle
:
C#
I comandi riportati di seguito utilizzano modelli .NET per creare un nuovo codebase di .NET Function Cloud Functions con la libreria framework di.NET Functions come dipendenza:
# HTTP functions dotnet new gcf-http # CloudEvent functions dotnet new gcf-event
Ruby
In Ruby, il framework di Functions deve essere aggiunto alle dipendenze della funzione per poterne eseguire il deployment in Cloud Functions:
bundle add functions_framework
PHP
composer require google/cloud-functions-framework
Configura il framework di Functions
Prima di eseguire una funzione con il framework di Functions, devi specificare sia il tipo sia il nome della funzione che vuoi eseguire. Questi attributi possono essere specificati come flag dell'interfaccia a riga di comando (CLI) o come variabili di ambiente.
Tipi di funzioni supportati
Collettivamente, il framework di Functions supporta tutti e tre i tipi di funzioni supportate da Cloud Functions. Tutti i runtime dei linguaggi
supportano http
e uno tra event
o cloudevent
.
Tipo di funzione | Tipo di firma | Descrizione | Supporto dei runtime | |
---|---|---|---|---|
Funzioni attivate da HTTP |
http
|
Funzioni che ricevono e rispondono alle richieste HTTP. | Tutti i runtime | |
Funzioni in background |
event
|
Formato degli eventi specifico di Cloud Functions | Solo di 1ª generazione: Node.js, Python, Go, Java | |
Funzioni di CloudEvent |
cloudevent
|
Formato degli eventi standard di settore |
2ª generazione.: tutti i runtime
1ª generazione.: .NET, Ruby, PHP |
Specifica la funzione da eseguire
Prima di eseguire una funzione con il framework di Functions, devi specificare quale funzione all'interno del codice eseguire. Per la maggior parte delle lingue, puoi eseguire questa operazione specificando il nome del metodo della funzione di destinazione, come mostrato nelle tabelle seguenti. Di seguito sono mostrate anche le eccezioni a questa regola, come Java e .NET.
Istruzioni per lingua
Consulta la tabella riportata di seguito per un elenco delle opzioni di configurazione supportate da ogni lingua.
Node.js
Argomento dell'interfaccia a riga di comando | Variabile di ambiente | Descrizione |
---|---|---|
--port
|
PORT
|
La porta su cui ascoltare le richieste. (valore predefinito: 8080 )
|
--target
|
FUNCTION_TARGET
|
Il nome della funzione export ed da richiamare. (Valore predefinito: function )
|
--signature-type
|
FUNCTION_SIGNATURE_TYPE
|
Il tipo di firma utilizzato dalla funzione. Può essere http
(valore predefinito), event o cloudevent .
|
Python
Argomento dell'interfaccia a riga di comando | Variabile di ambiente | Descrizione |
---|---|---|
--port
|
PORT
|
La porta su cui ascoltare le richieste. (valore predefinito: 8080 )
|
--target
|
FUNCTION_TARGET
|
Il nome della funzione export ed da richiamare. (Valore predefinito: function )
|
--signature-type
|
FUNCTION_SIGNATURE_TYPE
|
Il tipo di firma utilizzato dalla funzione. Può essere http
(valore predefinito), event o cloudevent .
|
Go
Variabile di ambiente | Descrizione |
---|---|
PORT
|
La porta su cui ascoltare le richieste. (valore predefinito: 8080 )
|
Java
Nome argomento | Variabile di ambiente | Descrizione |
---|---|---|
run.port
|
PORT
|
La porta su cui ascoltare le richieste. (valore predefinito: 8080 )
|
run.functionTarget
|
FUNCTION_TARGET
|
Il nome della funzione export ed da richiamare. (Valore predefinito: function )
|
C#
Argomento dell'interfaccia a riga di comando | Variabile di ambiente | Descrizione |
---|---|---|
--port
|
PORT
|
La porta su cui ascoltare le richieste. (valore predefinito: 8080 )
|
--target (o solo argomento)
|
FUNCTION_TARGET
|
Il valore classname della funzione da richiamare. (Valore predefinito: function )
|
Ruby
Argomento dell'interfaccia a riga di comando | Variabile di ambiente | Descrizione |
---|---|---|
--port
|
PORT
|
La porta su cui ascoltare le richieste. (valore predefinito: 8080 )
|
--target
|
FUNCTION_TARGET
|
Il nome della funzione export ed da richiamare. (Valore predefinito: function )
|
PHP
Variabile di ambiente | Descrizione |
---|---|
FUNCTION_TARGET
|
Il nome della funzione da richiamare. (Valore predefinito: function )
|
FUNCTION_SIGNATURE_TYPE
|
Il tipo di firma utilizzato dalla funzione. Può essere http
(valore predefinito), event o cloudevent .
|
Segui le istruzioni riportate di seguito per configurare ed eseguire il framework di Functions:
Node.js
Il framework delle funzioni Node.js ti consente di specificare il nome e il tipo di firma della funzione come argomenti della riga di comando o variabili di ambiente.
Puoi anche specificare questi valori nel file di build package.json
aggiungendo uno script start
con gli argomenti dell'interfaccia a riga di comando richiesti, come mostrato nell'esempio seguente.
"scripts": { "start": "npx functions-framework --target=YOUR_FUNCTION_NAME [--signature-type=YOUR_SIGNATURE_TYPE]" }
Sostituisci YOUR_FUNCTION_NAME con il nome del metodo della funzione e YOUR_SIGNATURE_TYPE (se applicabile) con il tipo di firma della funzione, come mostrato nella tabella riportata sopra.
Python
Il framework delle funzioni Python ti consente di specificare il nome e il tipo di firma della funzione come argomenti della riga di comando o variabili di ambiente. Gli argomenti della riga di comando devono essere specificati quando esegui il framework.
Go
Il framework Go Functions utilizza funcframework.RegisterHTTPFunctionContext
per specificare il target della funzione e il tipo di firma.
Java
Il framework Java Functions accetta i dati di configurazione da tre diverse origini, nel seguente ordine di priorità (dalla più specifica a quella meno specifica):
- Argomenti della riga di comando
- File di build
- Variabili di ambiente
Argomenti della riga di comando
Maven
Puoi specificare la funzione da eseguire aggiungendo il seguente flag dell'interfaccia a riga di comando (CLI) ai comandi mvn
:
-Drun.functionTarget=YOUR_FUNCTION_NAME
Puoi anche specificare la porta di destinazione aggiungendo il seguente flag dell'interfaccia a riga di comando in modo simile:
-Drun.port=12345
Gradle
I flag dell'interfaccia a riga di comando di Gradle sono quasi identici a quelli di Maven. L'unica modifica apportata da Gradle è scambiare il valore -D
iniziale in ogni flag con un -P
, come mostrato nell'esempio di seguito:
# Maven version -Drun.functionTarget=... # Gradle version -Prun.functionTarget=...
File di build
Puoi anche specificare la funzione da eseguire nel file di build del progetto. Sebbene Maven e Gradle abbiano flag dell'interfaccia a riga di comando simili, le relative clausole del buildfile differiscono notevolmente.
Maven
I file di build Maven sono denominati pom.xml
. Aggiungi la seguente clausola a questo file per specificare una funzione di destinazione:
Sostituisci <functionTarget>
con il nome della classe della funzione. Ad esempio, una funzione nel pacchetto functions
con nome della classe
HelloCloudFunctions
avrà come nome della classe
functions.HelloCloudFunctions
. Si riferisce al file di build principale: pom.xml
o build.gradle
.
Gradle
I file di build Gradle sono denominati build.gradle
. Aggiungi la seguente clausola a questo file per specificare una funzione target:
C#
Se crei il progetto utilizzando dotnet new
e uno dei modelli specificati sopra, .NET Functions Framework rileverà automaticamente la tua funzione.
Se il progetto contiene più funzioni, consulta la sezione Esecuzione del framework per informazioni su come eseguire una funzione specifica.
Ruby
Il framework delle funzioni Ruby ti consente di specificare il nome e il tipo di firma della funzione come argomenti della riga di comando o variabili di ambiente. Gli argomenti della riga di comando devono essere specificati quando esegui il framework.
PHP
Il framework delle funzioni PHP consente di specificare le variabili di ambiente come argomenti della riga di comando.
Puoi specificare questi valori anche nel file di build composer.json
aggiungendo uno
script start
come mostrato nell'esempio seguente.
"scripts": { "start": [ "Composer\\Config::disableProcessTimeout", "FUNCTION_TARGET=YOUR_FUNCTION_NAME php -S localhost:${PORT:-8080} vendor/bin/router.php" ] }
Sostituisci YOUR_FUNCTION_NAME con il nome della funzione e YOUR_SIGNATURE_TYPE (se applicabile) con il tipo di firma della funzione, come illustrato nella tabella riportata sopra.
Esegui il framework di Functions
Utilizza questo comando per eseguire la funzione con il framework di Functions.
Per impostazione predefinita, la funzione sarà accessibile all'indirizzo localhost:8080
, a meno che non specifichi esplicitamente un valore PORT
.
Node.js
npm start
Python
functions-framework --target=YOUR_FUNCTION_NAME
Sostituisci YOUR_FUNCTION_NAME con il nome del metodo della funzione.
Go
cd cmd go build ./cmd
Java
Maven
Usa questo comando per eseguire una funzione specificata in pom.xml
:
mvn function:run
Utilizza questo comando per eseguire una funzione specificata in un argomento della riga di comando:
mvn function:run -Drun.functionTarget=YOUR_FUNCTION_NAME
Sostituisci YOUR_FUNCTION_NAME con il nome della classe della funzione.
Gradle
Usa questo comando per eseguire una funzione specificata in build.gradle
:
./gradlew runFunction
Utilizza questo comando per eseguire una funzione specificata in un argomento della riga di comando:
./gradlew runFunction -Prun.functionTarget=YOUR_FUNCTION_NAME
Sostituisci YOUR_FUNCTION_NAME con il nome della classe della funzione.
C#
Utilizza questo comando per eseguire la funzione quando è presente esattamente una funzione nel progetto .NET attuale. Questa è la struttura predefinita per i progetti creati con i modelli.
dotnet run
Se il progetto .NET contiene più funzioni, utilizza il comando seguente per eseguire una funzione specifica. Sostituisci YOUR_FUNCTION_CLASSNAME con il nome della classe della funzione, incluso lo spazio dei nomi.
dotnet run YOUR_FUNCTION_CLASSNAME
Se vuoi eseguire più funzioni contemporaneamente, devi eseguire più istanze del framework di Functions. Per evitare conflitti tra le istanze framework in esecuzione, ogni istanza deve utilizzare un valore PORT
diverso. Il seguente comando mostra come eseguire una funzione con un valore PORT
pari a 8080
.
dotnet run --target YOUR_FUNCTION_CLASSNAME --port 8080
Ruby
bundle exec functions-framework-ruby --target YOUR_FUNCTION_NAME
Sostituisci YOUR_FUNCTION_NAME con il nome del metodo della funzione.
PHP
export FUNCTION_TARGET=YOUR_FUNCTION_NAME php -S localhost:8080 vendor/bin/router.php
Sostituisci YOUR_FUNCTION_NAME con il nome della funzione.
Chiama la funzione
Consulta la pagina relativa alle chiamate di funzioni locali per istruzioni su come interagire con la funzione in esecuzione localmente.
Esegui la pulizia
Quando hai finito di eseguire la funzione, interrompi l'istanza del framework in esecuzione premendo Ctrl+C.