Esegui funzioni con Functions Framework
Cloud Run Functions utilizza le librerie open source del Framework di Functions per racchiudere le funzioni di cui è stato eseguito il deployment in un'applicazione HTTP persistente.
Functions Framework può essere eseguito anche su qualsiasi altra piattaforma che supporti il linguaggio stesso, inclusi la macchina locale, i server on-premise, Compute Engine e Cloud Run.
Installa le dipendenze
Nella directory della funzione, installa la libreria Functions Framework per la tua lingua:
Per saperne di più, consulta la libreria del framework di Functions per Java.
Node.js
npm install --save-dev @google-cloud/functions-framework
Python
pip install functions-framework
Vai
go install github.com/GoogleCloudPlatform/functions-framework-go/funcframework
Java
Maven
Se utilizzi Maven, aggiungi quanto segue al file pom.xml
:
Gradle
Se utilizzi Gradle, aggiungi quanto segue al tuo file
build.gradle
:
C#
I comandi riportati di seguito utilizzano i modelli .NET per creare un nuovo codebase della funzione Cloud Run .NET con la libreria.NET Functions Framework come dipendenza:
# HTTP functions dotnet new gcf-http # CloudEvent functions dotnet new gcf-event
Ruby
In Ruby, il framework Functions deve essere aggiunto alle dipendenze della tua funzione per poter essere eseguito il deployment in Cloud Run Functions:
bundle add functions_framework
PHP
composer require google/cloud-functions-framework
Configura il framework di Functions
Prima di eseguire una funzione utilizzando Functions Framework, devi prima specificare il tipo e 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
Functions Framework supporta tutti e tre i tipi di funzioni
supportati da Cloud Run (1ª generazione.). Tutti i runtime del linguaggio
supportano http
e event
o cloudevent
.
Tipo di funzione | Tipo di firma | Descrizione | Runtime supportati |
---|---|---|---|
Funzioni attivate da HTTP |
http
|
Funzioni che ricevono e rispondono alle richieste HTTP. | Tutti i runtime |
Funzioni in background |
event
|
Formato evento specifico per Cloud Run Functions | Node.js, Python, Go, Java |
Funzioni CloudEvent |
cloudevent
|
Formato degli eventi standard del settore | .NET, Ruby, PHP |
Specifica la funzione da eseguire
Prima di eseguire una funzione con Functions Framework, devi specificare quale funzione all'interno del codice deve essere eseguita. Per la maggior parte delle lingue, puoi farlo specificando il nome del metodo della funzione di destinazione come mostrato nelle tabelle riportate di seguito. Di seguito sono riportate anche le eccezioni a questa regola, ad esempio Java e .NET.
Istruzioni per lingua
Consulta la tabella seguente per un elenco delle opzioni di configurazione supportate da ciascuna lingua.
Node.js
Argomento CLI | Variabile di ambiente | Descrizione |
---|---|---|
--port
|
PORT
|
La porta su cui rimanere in ascolto delle richieste. (Predefinito: 8080 )
|
--target
|
FUNCTION_TARGET
|
Il nome della funzione export da richiamare. (Predefinito:
function )
|
--signature-type
|
FUNCTION_SIGNATURE_TYPE
|
Il tipo di firma utilizzato dalla funzione. Può essere uno dei seguenti: http
(valore predefinito), event o cloudevent .
|
Python
Argomento CLI | Variabile di ambiente | Descrizione |
---|---|---|
--port
|
PORT
|
La porta su cui rimanere in ascolto delle richieste. (Predefinito: 8080 )
|
--target
|
FUNCTION_TARGET
|
Il nome della funzione export da richiamare. (Predefinito:
function )
|
--signature-type
|
FUNCTION_SIGNATURE_TYPE
|
Il tipo di firma utilizzato dalla funzione. Può essere uno dei seguenti: http
(valore predefinito), event o cloudevent .
|
Vai
Variabile di ambiente | Descrizione |
---|---|
PORT
|
La porta su cui rimanere in ascolto delle richieste. (Predefinito: 8080 )
|
Java
Nome argomento | Variabile di ambiente | Descrizione |
---|---|---|
run.port
|
PORT
|
La porta su cui rimanere in ascolto delle richieste. (Predefinito: 8080 )
|
run.functionTarget
|
FUNCTION_TARGET
|
Il nome della funzione export da richiamare. (Predefinito:
function )
|
C#
Argomento CLI | Variabile di ambiente | Descrizione |
---|---|---|
--port
|
PORT
|
La porta su cui rimanere in ascolto delle richieste. (Predefinito: 8080 )
|
--target (o unico argomento)
|
FUNCTION_TARGET
|
Il nome della classe della funzione da richiamare. (Predefinito:
function )
|
Ruby
Argomento CLI | Variabile di ambiente | Descrizione |
---|---|---|
--port
|
PORT
|
La porta su cui rimanere in ascolto delle richieste. (Predefinito: 8080 )
|
--target
|
FUNCTION_TARGET
|
Il nome della funzione export da richiamare. (Predefinito:
function )
|
PHP
Variabile di ambiente | Descrizione |
---|---|
FUNCTION_TARGET
|
Il nome della funzione da richiamare. (Predefinito:
function )
|
FUNCTION_SIGNATURE_TYPE
|
Il tipo di firma utilizzato dalla funzione. Può essere uno dei seguenti: http
(valore predefinito), event o cloudevent .
|
Segui le istruzioni riportate di seguito per configurare ed eseguire Functions Framework:
Node.js
Node.js Functions Framework 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 della CLI richiesti, come mostrato nell'esempio seguente.
"scripts": { "start": "npx functions-framework --target=YOUR_FUNCTION_NAME [--signature-type=YOUR_SIGNATURE_TYPE]" }
Lo stesso può essere fatto utilizzando le variabili di ambiente:
"scripts": { "start": "FUNCTION_TARGET=YOUR_FUNCTION_NAME FUNCTION_SIGNATURE_TYPE=YOUR_SIGNATURE_TYPE npx functions-framework" }
Sostituisci YOUR_FUNCTION_NAME con il nome del metodo della tua funzione e YOUR_SIGNATURE_TYPE (se applicabile) con il tipo di firma della tua funzione, come mostrato nella tabella precedente.
Python
Python Functions Framework 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.
Vai
Go Functions Framework utilizza funcframework.RegisterHTTPFunctionContext
per specificare il tipo di firma e il target della funzione.
Java
Java Functions Framework accetta i dati di configurazione da tre diverse origini, nel seguente ordine di priorità (dalla più specifica alla meno specifica):
- Argomenti della riga di comando
- Buildfiles
- Variabili di ambiente
Argomenti della riga di comando
Maven
Puoi specificare la funzione che vuoi 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 CLI in modo simile:
-Drun.port=12345
Gradle
I flag della CLI di Gradle sono quasi identici a quelli di Maven. L'unica modifica apportata da Gradle
è lo scambio del -D
iniziale in ogni flag con un -P
, come mostrato nell'esempio
di seguito:
# Maven version -Drun.functionTarget=... # Gradle version -Prun.functionTarget=...
Buildfiles
Puoi anche specificare la funzione che vuoi eseguire nel file di build del progetto. Sebbene Maven e Gradle abbiano flag CLI simili, le clausole dei file di build differiscono in modo significativo.
Maven
I file di build di Maven si chiamano pom.xml
. Aggiungi la seguente clausola a questo file per specificare una funzione di destinazione:
Sostituisci <functionTarget>
con il nome della classe della tua
funzione. Ad esempio, una funzione nel pacchetto functions
con nome classe
HelloCloudFunctions
avrebbe un nome classe
functions.HelloCloudFunctions
. Questo percorso è relativo 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 di destinazione:
C#
Se crei il progetto utilizzando dotnet new
e uno dei modelli specificati
sopra, .NET Functions Framework rileverà automaticamente la funzione.
Se il progetto contiene più funzioni, consulta la sezione Esecuzione del framework per informazioni su come eseguire una funzione specifica.
Ruby
Ruby Functions Framework 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 di funzioni PHP ti consente di specificare variabili di ambiente come argomenti della riga di comando.
Puoi anche specificare questi valori 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 tua funzione e YOUR_SIGNATURE_TYPE (se applicabile) con il tipo di firma della tua funzione, come mostrato nella tabella precedente.
Esegui il framework di Functions
Utilizza questo comando per eseguire la funzione con Functions Framework.
Per impostazione predefinita, la funzione sarà accessibile all'indirizzo localhost:8080
, a meno che tu non specifichi
esplicitamente un valore PORT
.
Node.js
npm start
Python
Utilizzo degli argomenti della riga di comando:
functions-framework --target=YOUR_FUNCTION_NAME
Utilizzo delle variabili di ambiente:
FUNCTION_TARGET=YOUR_FUNCTION_NAME functions-framework
Sostituisci YOUR_FUNCTION_NAME con il nome del metodo della tua funzione.
Vai
cd cmd go build ./cmd
Utilizzo delle variabili di ambiente:
cd cmd go build PORT=8080 ./cmd
Java
Maven
Utilizza il seguente comando per eseguire una funzione specificata in pom.xml
:
mvn function:run
Utilizza il seguente comando per eseguire una funzione specificata in un argomento della riga di comando:
mvn function:run -Drun.functionTarget=YOUR_FUNCTION_NAME
Utilizza il comando seguente per eseguire una funzione specificata come variabile di ambiente:
FUNCTION_TARGET=YOUR_FUNCTION_NAME mvn function:run
Sostituisci YOUR_FUNCTION_NAME con il nome della classe della funzione.
Gradle
Utilizza il seguente comando per eseguire una funzione specificata in build.gradle
:
./gradlew runFunction
Utilizza il seguente comando per eseguire una funzione specificata in un argomento della riga di comando:
./gradlew runFunction -Prun.functionTarget=YOUR_FUNCTION_NAME
Utilizza il comando seguente per eseguire una funzione specificata come variabile di ambiente:
FUNCTION_TARGET=YOUR_FUNCTION_NAME ./gradlew runFunction
Sostituisci YOUR_FUNCTION_NAME con il nome della classe della funzione.
C#
Utilizza il seguente comando per eseguire la funzione quando è presente esattamente una funzione nel progetto .NET corrente. (Questa è la struttura predefinita per i progetti creati con i modelli.)
dotnet run
Se il progetto .NET contiene più funzioni, utilizza il seguente comando per eseguire una funzione specifica. Sostituisci YOUR_FUNCTION_CLASSNAME con il nome della classe della tua funzione, incluso lo spazio dei nomi.
dotnet run YOUR_FUNCTION_CLASSNAME
Se vuoi eseguire più funzioni contemporaneamente, devi eseguire
più istanze di Functions Framework. Per evitare conflitti tra le istanze del framework in esecuzione, ogni istanza deve utilizzare un valore PORT
diverso. Il
comando seguente mostra come eseguire una funzione con un valore PORT
di 8080
.
Utilizzo degli argomenti della riga di comando:
dotnet run --target YOUR_FUNCTION_CLASSNAME --port 8080
Utilizzo delle variabili di ambiente:
FUNCTION_TARGET=YOUR_FUNCTION_CLASSNAME PORT=8080 dotnet run
Ruby
Utilizzo degli argomenti della riga di comando:
bundle exec functions-framework-ruby --target YOUR_FUNCTION_NAME
Utilizzo delle variabili di ambiente:
FUNCTION_TARGET=YOUR_FUNCTION_NAME bundle exec functions-framework-ruby
Sostituisci YOUR_FUNCTION_NAME con il nome del metodo della tua funzione.
PHP
export FUNCTION_TARGET=YOUR_FUNCTION_NAME php -S localhost:8080 vendor/bin/router.php
Sostituisci YOUR_FUNCTION_NAME con il nome della tua funzione.
Chiama la funzione
Consulta la pagina Chiamata a funzioni locali per istruzioni su come interagire con la funzione in esecuzione in locale.
Esegui la pulizia
Al termine dell'esecuzione della funzione, arresta l'istanza del framework in esecuzione premendo Ctrl+C.