Go-Dienst erstellen und bereitstellen

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


Eine detaillierte Anleitung zu dieser Aufgabe finden Sie direkt im Cloud Shell-Editor. Klicken Sie dazu einfach auf Anleitung:

Anleitung


Die folgenden Abschnitte führen Sie durch dieselben Schritte wie das Klicken auf Anleitung.

Hinweis

  1. Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  3. Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für Ihr Projekt aktiviert ist.

  4. Installieren und initialisieren Sie das Cloud SDK.

Beispielanwendung schreiben

So schreiben Sie eine Anwendung in Go:

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

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

    module github.com/GoogleCloudPlatform/golang-samples/run/helloworld
    
    go 1.13
    

    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 neue Datei mit dem Namen main.go und fügen Sie den folgenden Code in diese ein:

    
    // Sample run-helloworld is a minimal Cloud Run service.
    package main
    
    import (
    	"fmt"
    	"log"
    	"net/http"
    	"os"
    )
    
    func main() {
    	log.Print("starting server...")
    	http.HandleFunc("/", handler)
    
    	// 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 handler(w http.ResponseWriter, r *http.Request) {
    	name := os.Getenv("NAME")
    	if name == "" {
    		name = "World"
    	}
    	fmt.Fprintf(w, "Hello %s!\n", name)
    }
    

    Mit diesem Code wird ein einfacher Webserver erstellt, der den von der Umgebungsvariable PORT definierten Port überwacht.

Die Anwendung ist jetzt fertig und kann in einen Container verlagert und dann in Container Registry hochgeladen werden.

Anwendung containerisieren und in Container Registry hochladen

Erstellen Sie zum Containerisieren der Beispielanwendung in dem Verzeichnis, in dem sich die Quelldateien befinden, eine neue Datei namens Dockerfile und kopieren Sie den folgenden Inhalt in diese:


# 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.16-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 . ./

# Build the binary.
RUN go build -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 \
    ca-certificates && \
    rm -rf /var/lib/apt/lists/*

# Copy the binary to the production image from the builder stage.
COPY --from=builder /app/server /app/server

# Run the web service on container startup.
CMD ["/app/server"]

Fügen Sie die Datei .dockerignore hinzu, um Dateien aus Ihrem Container-Image auszuschließen.

# The .dockerignore file excludes files from the container build process.
#
# https://docs.docker.com/engine/reference/builder/#dockerignore-file

# Exclude locally vendored dependencies.
vendor/

# Exclude "build-time" ignore files.
.dockerignore
.gcloudignore

# Exclude git history and configuration.
.gitignore

Erstellen Sie das Container-Image mit Cloud Build. Dazu führen Sie folgenden Befehl in dem Verzeichnis aus, in dem sich das Dockerfile befindet:

gcloud builds submit --tag gcr.io/PROJECT-ID/helloworld

Dabei ist PROJECT-ID die GCP-Projekt-ID. Sie können sie abrufen, indem Sie gcloud config get-value project ausführen.

Bei Erfolg wird eine SUCCESS-Nachricht mit dem Image-Namen (gcr.io/PROJECT-ID/helloworld) angezeigt. Das Image wird in Container Registry gespeichert und kann bei Bedarf wiederverwendet werden.

In Cloud Run bereitstellen

So stellen Sie das Container-Image bereit:

  1. Stellen Sie es mit dem folgenden Befehl bereit:

    gcloud run deploy --image gcr.io/PROJECT-ID/helloworld

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

    Ersetzen Sie PROJECT-ID durch Ihre GCP-Projekt-ID. Sie können Ihre Projekt-ID aufrufen, indem Sie den Befehl gcloud config get-value project ausführen.

    1. Sie werden zur Eingabe des Dienstnamens aufgefordert. Drücken Sie die Eingabetaste, um den Standardnamen helloworld zu akzeptieren.
    2. Sie werden zur Eingabe der Region aufgefordert: Wählen Sie die Region Ihrer Wahl aus, zum Beispiel us-central1.
    3. 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 Container 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

  • asia-east1 (Taiwan)
  • asia-northeast1 (Tokio)
  • asia-northeast2 (Osaka)
  • europe-north1 (Finnland) Blattsymbol Niedriger CO2-Wert
  • europe-west1 (Belgien)
  • europe-west4 (Niederlande)
  • us-central1 (Iowa) Blattsymbol Niedriger CO2-Wert
  • us-east1 (South Carolina)
  • us-east4 (Northern Virginia)
  • us-west1 (Oregon) Blattsymbol Niedriger CO2-Wert

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-west2 (London, Vereinigtes Königreich)
  • europe-west3 (Frankfurt, Deutschland)
  • europe-west6 (Zürich, Schweiz) Blattsymbol Niedriger CO2-Wert
  • northamerica-northeast1 (Montreal) Blattsymbol Niedriger CO2-Wert
  • southamerica-east1 (Sao Paulo, Brasilien) Blattsymbol Niedriger CO2-Wert
  • us-west2 (Los Angeles)
  • us-west3 (Las Vegas)
  • us-west4 (Salt Lake City)

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

Das wars! Sie haben eine in einem Container-Image verpackte Anwendung in Cloud Run bereitgestellt. Cloud Run skaliert das Container-Image automatisch horizontal, 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.

Clean-up

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 Container Registry möglicherweise in Rechnung gestellt. Sie können Ihr Image löschen oder Ihr Cloudprojekt löschen, um Kosten zu vermeiden. Durch das Löschen des Cloudprojekts wird die Abrechnung für alle in diesem Projekt verwendeten Ressourcen beendet.

  1. Wechseln Sie in der Cloud Console zur Seite Ressourcen verwalten.

    Zur Seite „Ressourcen verwalten“

  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.

Weitere Informationen

Weitere Informationen dazu, wie Sie einen Container aus Quellcode erstellen und diesen mithilfe von Push in Container Registry übertragen, finden Sie unter: