Kurzanleitung: Shell-Dienst in Cloud Run bereitstellen

Shell-Dienst in Cloud Run bereitstellen

Erfahren Sie, wie Sie eine einfache Hello World-Anwendung erstellen, in ein Container-Image verpacken, das Container-Image in Artifact Registry hochladen und anschließend in Cloud Run bereitstellen. Sie können zusätzlich zu den angezeigten Sprachen auch andere Sprachen verwenden.

Vorbereitung

  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. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  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. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

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

    gcloud init
  10. So legen Sie das Standardprojekt für Ihren Cloud Run-Dienst fest:
     gcloud config set project PROJECT_ID
    Ersetzen Sie dabei PROJECT_ID durch den Namen des Projekts, das Sie für diese Kurzanleitung erstellt haben.
  11. Wenn Sie einer Domaineinschränkung zur Organisation nicht eingeschränkter Aufrufe für Ihr Projekt unterliegen, müssen Sie auf Ihren bereitgestellten Dienst zugreifen, wie unter Private Dienste testen beschrieben.

Beispielanwendung schreiben

So schreiben Sie eine Shell-Anwendung:

  1. Erstellen Sie ein neues Verzeichnis mit dem Namen helloworld-shell und ersetzen Sie das aktuelle Verzeichnis durch dieses Verzeichnis:

    mkdir helloworld-shell
    cd helloworld-shell
    
  2. Initialisieren Sie eine go.mod-Datei, um das Go-Modul zu deklarieren:

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

    Sie können die Datei go.mod wie oben gezeigt direkt im Format erstellen oder sie mit dem folgenden Befehl aus dem Projektverzeichnis initialisieren:

    go mod init
    
  3. Erstellen Sie eine script.sh-Datei mit folgendem Inhalt:

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

    In diesem Beispiel wird das Shell-Skript mithilfe eines kleinen Go-Programms, das einen einfachen Webserver startet und den durch die Umgebungsvariable PORT definierten Port überwacht, für alle eingehenden Anfragen ausgeführt.

  4. Erstellen Sie eine invoke.go-Datei mit folgendem Inhalt:

    
    // 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. Erstellen Sie eine neue Datei mit dem Namen Dockerfile im selben Verzeichnis wie die Quelldateien:

    
    # 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"]
    

Die Anwendung ist fertig und kann bereitgestellt werden.

Für Cloud Run aus Quelle bereitstellen

Wichtig: In dieser Kurzanleitung wird davon ausgegangen, dass Sie Inhaber- oder Bearbeiterrollen in dem Projekt haben, das Sie für die Kurzanleitung verwenden. Andernfalls finden Sie die Berechtigungen unter Cloud Run-Bereitstellungsberechtigungen, Cloud Build-Berechtigungen und Artifact Registry-Berechtigungen.

Beim Bereitstellen aus dem Quellcode wird automatisch ein Container-Image aus dem Quellcode erstellt und bereitgestellt.

So stellen Sie aus der Quelle bereit:

  1. Stellen Sie in Ihrem Quellcodeverzeichnis mit dem folgenden Befehl aus der Quelle bereit:

    gcloud run deploy

    Wenn Sie aufgefordert werden, die API zu aktivieren, antworten Sie mit y, um dies zu tun.

    1. Wenn Sie zur Eingabe des Quellcodes aufgefordert werden, drücken Sie die Eingabetaste, um den aktuellen Ordner bereitzustellen.

    2. Wenn Sie zur Eingabe des Dienstnamens aufgefordert werden, drücken Sie die Eingabetaste, um den Standardnamen zu akzeptieren, z. B. helloworld.

    3. Wenn Sie aufgefordert werden, die Artifact Registry API zu aktivieren oder das Erstellen des Artifact Registry-Repositorys zu erlauben, antworten Sie mit y.

    4. Wenn Sie zur Eingabe der Region aufgefordert werden, wählen Sie die Region Ihrer Wahl aus, zum Beispiel us-central1.

    5. Sie werden aufgefordert, nicht authentifizierte Aufrufe zuzulassen: Antworten Sie mit y.

    Warten Sie dann einige Sekunden, bis die Bereitstellung abgeschlossen ist. Bei Erfolg wird in der Befehlszeile die Dienst-URL angezeigt.

  2. Rufen Sie den bereitgestellten Service auf. Dazu öffnen Sie in einem Webbrowser die Dienst-URL.

Cloud Run-Standorte

Cloud Run ist regional. Die Infrastruktur, in der die Cloud Run-Dienste ausgeführt werden, befindet sich demnach in einer bestimmten Region. Aufgrund der Verwaltung durch Google sind die Anwendungen in allen Zonen innerhalb dieser Region redundant verfügbar.

Bei der Auswahl der Region, in der Ihre Cloud Run-Dienste ausgeführt werden, ist vorrangig, dass die Anforderungen hinsichtlich Latenz, Verfügbarkeit oder Langlebigkeit erfüllt werden. Sie können im Allgemeinen die Region auswählen, die Ihren Nutzern am nächsten liegt, aber Sie sollten den Standort der anderen Google Cloud-Produkte berücksichtigen, die von Ihrem Cloud Run-Dienst verwendet werden. Die gemeinsame Nutzung von Google Cloud-Produkten an mehreren Standorten kann sich auf die Latenz und die Kosten des Dienstes auswirken.

Cloud Run ist in diesen Regionen verfügbar:

Unterliegt Preisstufe 1

Unterliegt Preisstufe 2

  • asia-east2 (Hongkong)
  • asia-northeast3 (Seoul, Südkorea)
  • asia-southeast1 (Singapur)
  • asia-southeast2 (Jakarta)
  • asia-south1 (Mumbai, Indien)
  • asia-south2 (Delhi, Indien)
  • australia-southeast1 (Sydney)
  • australia-southeast2 (Melbourne)
  • europe-central2 (Warschau, Polen)
  • europe-west10 (Berlin)
  • europe-west12 (Turin)
  • europe-west2 (London, Vereinigtes Königreich) Blattsymbol Niedriger CO2-Ausstoß
  • europe-west3 (Frankfurt, Deutschland) Blattsymbol Niedriger CO2-Wert
  • europe-west6 (Zürich, Schweiz) Blattsymbol Niedriger CO2-Ausstoß
  • me-central1 (Doha)
  • me-central2 (Dammam)
  • northamerica-northeast1 (Montreal) Blattsymbol Niedriger CO2-Ausstoß
  • northamerica-northeast2 (Toronto) Blattsymbol Niedriger CO2-Ausstoß
  • southamerica-east1 (Sao Paulo, Brasilien) Blattsymbol Niedriger CO2-Ausstoß
  • southamerica-west1 (Santiago, Chile) Blattsymbol Niedriger CO2-Ausstoß
  • us-west2 (Los Angeles)
  • us-west3 (Salt Lake City)
  • us-west4 (Las Vegas)

Wenn Sie bereits einen Cloud Run-Dienst erstellt haben, können Sie dessen Region im Cloud Run-Dashboard der Google Cloud Console aufrufen.

Das war's auch schon! Sie haben gerade ein Container-Image aus Quellcode in Cloud Run bereitgestellt. Cloud Run skaliert das Container-Image automatisch horizontal aus, damit die empfangenen Anfragen bearbeitet werden können, und skaliert es wieder herunter, wenn der Bedarf sinkt. Es fallen nur Kosten für die CPU-, Arbeitsspeicher- und Netzwerkressourcen an, die während der Anfrageverarbeitung verbraucht werden.

Bereinigen

Testprojekt entfernen

Während für Cloud Run keine Kosten anfallen, wenn der Dienst nicht verwendet wird, wird Ihnen dennoch das Speichern des Container-Images in Artifact Registry möglicherweise in Rechnung gestellt. Sie können das Container-Image löschen oder Ihr Google Cloud-Projekt löschen, um Kosten zu vermeiden. Wenn Sie Ihr Google Cloud-Projekt löschen, wird die Abrechnung für alle in diesem Projekt verwendeten Ressourcen beendet.

  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.

Nächste Schritte

Weitere Informationen dazu, wie Sie einen Container aus Quellcode erstellen und diesen mithilfe eines Push-Vorgangs in ein Repository übertragen, finden Sie unter: