Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Scrivere funzioni Cloud

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 Cloud Functions e delle aspettative per il codice sorgente.

Tipi di funzioni Cloud Functions

Esistono due tipi di funzioni Cloud Functions:

Utilizza una funzione HTTP quando ne hai bisogno per avere un endpoint URL e rispondere alle richieste HTTP, ad esempio per i webhook. Utilizza una funzione basata sugli eventi quando la funzione deve essere attivata direttamente in risposta a eventi all'interno del progetto Google Cloud, ad esempio messaggi in un argomento Pub/Sub o modifiche in un bucket Cloud Storage.

Struttura della directory di origine

Affinché Cloud Functions possa individuare la definizione della funzione, ogni runtime del linguaggio prevede dei requisiti per la strutturazione del codice sorgente. Di seguito è riportata la struttura di base di una funzione per ogni funzione.

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 con nome index.js nella directory principale della directory della funzione. 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 Functions for Node.js come dipendenza:

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

Il codice nel file principale deve definire il tuo punto di ingresso per la funzione e importare normalmente altro codice e moduli Node.js. Il file principale può inoltre definire più punti di ingresso per le 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 radice della directory della funzione. 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 contatto per la funzione e può importare normalmente il codice e le dipendenze esterne. Il file main.py può anche definire più punti di ingresso di funzione di cui è possibile eseguire il deployment separatamente.

Go

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

.
├── myfunction.go
└── go.mod

La funzione deve essere in un pacchetto Go nella directory principale del progetto. Il pacchetto e i relativi file di origine possono avere qualsiasi nome, tranne per il fatto che la funzione non può essere in package main. Se ti serve un pacchetto main, ad esempio per il test locale, puoi crearne uno in una sottodirectory:

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

Il tuo 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 tuo punto di ingresso della funzione e può importare normalmente il codice da sottopacchetti e dipendenze. Il pacchetto può anche definire più punti di ingresso 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 un nome qualsiasi. Se i tuoi 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 tuo 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 tuo punto di ingresso della funzione e può importare normalmente il codice e le dipendenze esterne. I file di origine possono anche definire più punti di ingresso di funzione 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 tuoi 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 tuo punto di ingresso della funzione e può importare normalmente il codice e le dipendenze esterne. I file di origine possono anche definire più punti di ingresso di 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 radice della directory della funzione. Il file principale deve essere denominato app.rb.

Il tuo 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 tuo punto di contatto per la funzione e può importare normalmente il codice e le dipendenze esterne. Il file app.rb può anche definire più punti di ingresso di funzione 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 radice della directory della funzione. Il file principale deve essere denominato index.php.

Il tuo 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 contatto per la funzione e può importare normalmente il codice e le dipendenze esterne. Il file index.php può anche definire più punti di ingresso di funzione di cui è possibile eseguire il deployment separatamente.

Se stai pensando di raggruppare più funzioni in un unico progetto, tieni presente che ogni funzione potrebbe finire per condividere lo stesso insieme di dipendenze. Tuttavia, alcune funzioni potrebbero non richiedere tutte le dipendenze.

Se possibile, consigliamo di suddividere i codebase multifunzione di grandi dimensioni e di inserire ogni funzione nella propria directory di primo livello come mostrato sopra, con i relativi 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 Funzione Cloud. Puoi specificare questo punto di accesso quando esegui il deployment della funzione.

La modalità di definizione del punto di accesso dipende dal runtime del linguaggio utilizzato. Per alcune lingue, il punto di accesso è una funzione, mentre per altre il punto di accesso è una classe. Per ulteriori informazioni sulla definizione dei punti di ingresso e sull'implementazione di Cloud Functions in diverse lingue, vedi 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:

Passaggi successivi