Démarrage rapide : déployer un service de shell sur Cloud Run

Déployer un service de shell sur Cloud Run

Découvrez comment créer une application Hello World simple, l'intégrer dans une image de conteneur, importer l'image de conteneur dans Artifact Registry, puis déployer l'image de conteneur dans Cloud Run. Vous pouvez utiliser d'autres langages en plus de ceux présentés.

Avant de commencer

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Install the Google Cloud CLI.
  5. To initialize the gcloud CLI, run the following command:

    gcloud init
  6. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  7. Make sure that billing is enabled for your Google Cloud project.

  8. Install the Google Cloud CLI.
  9. To initialize the gcloud CLI, run the following command:

    gcloud init
  10. Pour définir le projet par défaut pour votre service Cloud Run :
     gcloud config set project PROJECT_ID
    Remplacez PROJECT_ID par le nom du projet que vous avez créé pour ce guide de démarrage rapide.
  11. Si vous êtes soumis à une règle d'administration de restriction de domaine limitant les appels non authentifiés pour votre projet, vous devez accéder au service déployé comme décrit dans la section Tester les services privés.

Coder l'exemple d'application

Pour écrire une application Shell :

  1. Créez un répertoire nommé helloworld-shell et modifiez les sous-répertoires comme suit :

    mkdir helloworld-shell
    cd helloworld-shell
    
  2. Initialisez un fichier go.mod pour déclarer le module go :

    module github.com/GoogleCloudPlatform/cloud-run-samples/helloworld-shell
    
    go 1.19
    

    Vous pouvez créer le fichier go.mod directement au format indiqué ci-dessus ou l'initialiser à partir du répertoire du projet à l'aide de la commande suivante :

    go mod init
    
  3. Créez un fichier script.sh avec le contenu suivant :

    
    set -e
    echo "Hello ${NAME:-World}!"
    

    Afin d'exécuter ce script shell à chaque requête entrante, cet exemple utilise un petit programme Go qui démarre un serveur Web de base et écoute le port défini par la variable d'environnement PORT.

  4. Créez un fichier invoke.go avec le contenu suivant :

    
    // Sample helloworld-shell is a Cloud Run shell-script-as-a-service.
    package main
    
    import (
    	"log"
    	"net/http"
    	"os"
    	"os/exec"
    )
    
    func main() {
    	http.HandleFunc("/", scriptHandler)
    
    	// Determine port for HTTP service.
    	port := os.Getenv("PORT")
    	if port == "" {
    		port = "8080"
    		log.Printf("Defaulting to port %s", port)
    	}
    
    	// Start HTTP server.
    	log.Printf("Listening on port %s", port)
    	if err := http.ListenAndServe(":"+port, nil); err != nil {
    		log.Fatal(err)
    	}
    }
    
    func scriptHandler(w http.ResponseWriter, r *http.Request) {
    	cmd := exec.CommandContext(r.Context(), "/bin/bash", "script.sh")
    	cmd.Stderr = os.Stderr
    	out, err := cmd.Output()
    	if err != nil {
    		w.WriteHeader(500)
    	}
    	w.Write(out)
    }
    
  5. Créez un fichier nommé Dockerfile dans le même répertoire que les fichiers sources :

    
    # Use the offical golang image to create a binary.
    # This is based on Debian and sets the GOPATH to /go.
    # https://hub.docker.com/_/golang
    FROM golang:1.20-buster as builder
    
    # Create and change to the app directory.
    WORKDIR /app
    
    # Retrieve application dependencies.
    # This allows the container build to reuse cached dependencies.
    # Expecting to copy go.mod and if present go.sum.
    COPY go.* ./
    RUN go mod download
    
    # Copy local code to the container image.
    COPY invoke.go ./
    
    # Build the binary.
    RUN go build -mod=readonly -v -o server
    
    # Use the official Debian slim image for a lean production container.
    # https://hub.docker.com/_/debian
    # https://docs.docker.com/develop/develop-images/multistage-build/#use-multi-stage-builds
    FROM debian:buster-slim
    RUN set -x && apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \
        --no-install-recommends \
        ca-certificates && \
        rm -rf /var/lib/apt/lists/*
    
    # Create and change to the app directory.
    WORKDIR /
    
    # Copy the binary to the production image from the builder stage.
    COPY --from=builder /app/server /app/server
    COPY script.sh ./
    
    # Run the web service on container startup.
    CMD ["/app/server"]
    

Votre application est terminée et prête à être déployée.

Déployer une image sur Cloud Run depuis une source

Important : Dans ce guide de démarrage rapide, nous partons du principe que vous disposez de rôles de propriétaire ou d'éditeur dans le projet que vous utilisez pour les besoins du guide de démarrage rapide. Sinon, reportez-vous aux sections Autorisations de déploiement Cloud Run, Autorisations Cloud Build et Autorisations Artifact Registry pour connaître les autorisations requises.

Cette fonction crée automatiquement une image de conteneur à partir du code source et la déploie.

Pour déployer depuis la source :

  1. Dans le répertoire du code source, déployez depuis la source en exécutant la commande suivante :

    gcloud run deploy

    Si vous êtes invité à activer l'API, répondez y pour l'activer.

    1. Lorsque vous êtes invité à saisir l'emplacement du code source, appuyez sur la touche Entrée pour déployer le dossier actuel.

    2. Lorsque vous êtes invité à saisir le nom du service, appuyez sur Entrée pour accepter le nom par défaut, par exemple helloworld.

    3. Si vous êtes invité à activer l'API Artifact Registry ou à autoriser la création du dépôt Artifact Registry, répondez par l'affirmative en appuyant sur y.

    4. Lorsque vous êtes invité à indiquer la région, sélectionnez la région de votre choix, par exemple us-central1.

    5. Vous serez invité à autoriser les appels non authentifiés : répondez y.

    Patientez quelques instants jusqu'à la fin du déploiement. En cas de réussite, la ligne de commande affiche l'URL du service.

  2. Accédez à votre service déployé en ouvrant l'URL du service dans un navigateur Web.

Emplacements Cloud Run

Cloud Run est régional, ce qui signifie que l'infrastructure qui exécute vos services Cloud Run est située dans une région spécifique et gérée par Google pour être disponible de manière redondante dans toutes les zones de cette région.

Lors de la sélection de la région dans laquelle exécuter vos services Cloud Run, vous devez tout d'abord considérer vos exigences en matière de latence, de disponibilité et de durabilité. Vous pouvez généralement sélectionner la région la plus proche de vos utilisateurs, mais vous devez tenir compte de l'emplacement des autres produits Google Cloud utilisés par votre service Cloud Run. L'utilisation conjointe de produits Google Cloud dans plusieurs emplacements peut avoir une incidence sur la latence et le coût de votre service.

Cloud Run est disponible dans les régions suivantes :

Soumis aux tarifs de niveau 1

Soumis aux tarifs de niveau 2

Si vous avez déjà créé un service Cloud Run, vous pouvez afficher la région dans le tableau de bord Cloud Run de la console Google Cloud.

Félicitations ! Vous venez de déployer une image de conteneur depuis le code source vers Cloud Run. Cloud Run effectue un scaling automatique et horizontal de votre image de conteneur pour traiter les requêtes reçues, puis un scaling vertical lorsque la demande diminue. Vous ne payez que pour le processeur, la mémoire et le réseau utilisés lors du traitement des requêtes.

Effectuer un nettoyage

Supprimer le projet de test

Bien que Cloud Run ne facture pas lorsque le service n'est pas utilisé, il se peut que des frais vous soient facturés pour le stockage de l'image de conteneur dans Artifact Registry. Vous pouvez supprimer votre image de conteneur ou votre projet Google Cloud afin d'éviter que des frais ne vous soient facturés. La suppression de votre projet Google Cloud arrête la facturation de toutes les ressources utilisées dans ce projet.

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Étapes suivantes

Pour savoir comment créer un conteneur à partir d'une source de code et le transférer vers un dépôt, consultez la section suivante :