Environnement d'exécution Go

Présentation

Votre fonction Cloud Run s'exécute dans un environnement composé d'une version de système d'exploitation, de packages complémentaires, d'une compatibilité avec les langages et de la bibliothèque du framework des fonctions compatible avec votre fonction. Cet environnement est identifié par la version de langage et est appelé l'environnement d'exécution.

Pour en savoir plus sur les environnements d'exécution en général et découvrir la version d'Ubuntu utilisée par chaque environnement d'exécution Go, consultez la page Environnement d'exécution Cloud Run Functions.

Sélectionner votre environnement d'exécution

Cloud Run Functions est compatible avec plusieurs versions de Go, répertoriées sur la page Compatibilité des environnements d'exécution. Vous pouvez sélectionner l'environnement d'exécution Go pour votre fonction lors du déploiement.

gcloud

Si vous utilisez Google Cloud CLI, spécifiez l'environnement d'exécution à l'aide du paramètre --runtime avec l'environnement d'exécution Go de votre choix. Exemple :

gcloud functions deploy FUNCTION_NAME --no-gen2 --runtime go122 FLAGS...

FLAGS... fait référence aux arguments transmis lors du premier déploiement de votre fonction. Pour en savoir plus sur les arguments obligatoires et facultatifs, consultez la section Déployer une fonction Cloud Run.

Console

Si vous utilisez la console Google Cloud, consultez le guide de démarrage rapide de la console Google Cloud pour obtenir des instructions détaillées.

Préparation de la fonction

Vous pouvez préparer une fonction directement depuis la console Google Cloud, ou l'écrire sur votre ordinateur local et l'importer. Pour préparer votre machine locale au développement Go, consultez la section Configurer un environnement de développement Go.

Pour commencer à utiliser Go sur Cloud Run Functions rapidement, consultez le guide de démarrage rapide.

Structure du code source

Pour que Cloud Run Functions trouve la définition de votre fonction, votre code source doit respecter une structure spécifique. Pour en savoir plus, consultez la page Écrire des fonctions Cloud Run.

Spécifier des dépendances

Cloud Run Functions dans Go doit fournir toutes ses dépendances avec des modules Go et un fichier go.mod, ou avec un répertoire vendor. Pour plus d'informations, consultez la page Spécifier des dépendances en Go.

Variables d'environnement

Votre environnement d'exécution Go définit automatiquement certaines variables d'environnement pour que votre fonction puisse les utiliser si nécessaire. Pour en savoir plus, consultez la page Utiliser des variables d'environnement.

Type : Context

Le package context de Go définit le type de Context, qui contient des échéances, des signaux d'annulation et d'autres valeurs couvertes par les requêtes au-delà des limites de l'API et entre les processus.

Le code de fonction Cloud Run suivant illustre un exemple d'accès au contexte par un client Pub/Sub :


// Package helloworld provides a set of Cloud Functions samples.
package helloworld

import (
	"context"
	"fmt"
	"log"

	"github.com/GoogleCloudPlatform/functions-framework-go/functions"
	"github.com/cloudevents/sdk-go/v2/event"
)

func init() {
	functions.CloudEvent("HelloPubSub", helloPubSub)
}

// MessagePublishedData contains the full Pub/Sub message
// See the documentation for more details:
// https://cloud.google.com/eventarc/docs/cloudevents#pubsub
type MessagePublishedData struct {
	Message PubSubMessage
}

// PubSubMessage is the payload of a Pub/Sub event.
// See the documentation for more details:
// https://cloud.google.com/pubsub/docs/reference/rest/v1/PubsubMessage
type PubSubMessage struct {
	Data []byte `json:"data"`
}

// helloPubSub consumes a CloudEvent message and extracts the Pub/Sub message.
func helloPubSub(ctx context.Context, e event.Event) error {
	var msg MessagePublishedData
	if err := e.DataAs(&msg); err != nil {
		return fmt.Errorf("event.DataAs: %w", err)
	}

	name := string(msg.Message.Data) // Automatically decoded from base64.
	if name == "" {
		name = "World"
	}
	log.Printf("Hello, %s!", name)
	return nil
}