Erste Schritte mit Go in Compute Engine


In dieser Anleitung werden die ersten Schritte mit Compute Engine erläutert. Wenn Sie eine "Hello World"-Go-Webanwendung für Compute Engine bereitstellen möchten, folgen Sie dieser Anleitung. Hilfe zu den ersten Schritten mit App Engine finden Sie in der App Engine-Standardumgebung.

Lernziele

  • "Hello World"-Beispielanwendung mit Cloud Shell herunterladen und bereitstellen
  • "Hello World"-Beispielanwendung mit Cloud Build erstellen
  • "Hello World"-Beispielanwendung in einer einzelnen Compute Engine-Instanz bereitstellen

Kosten

In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:

Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen. Neuen Google Cloud-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

Hinweise

  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. Enable the Compute Engine and Cloud Build APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

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

  7. Enable the Compute Engine and Cloud Build APIs.

    Enable the APIs

  8. Öffnen Sie die Anwendung in der Google Cloud Console über Cloud Shell.

    Zu Cloud Shell

    Cloud Shell bietet Ihnen eine Befehlszeile, mit der Sie direkt von Ihrem Browser aus auf Cloud-Ressourcen zugreifen können.

  9. Wenn Sie dem Klonen des Repositorys zustimmen, klicken Sie auf Bestätigen, um den Beispielcode herunterzuladen und in das Anwendungsverzeichnis zu wechseln.

  10. Konfigurieren Sie in Cloud Shell die gcloud CLI für die Verwendung Ihres neuen Google Cloud-Projekts:
    # Configure gcloud for your project
    gcloud config set project YOUR_PROJECT_ID

Anwendung in Cloud Shell ausführen

  1. Starten Sie einen lokalen Webserver in Cloud Shell:

    go build -o app
    ./app
    
  2. Klicken Sie in Cloud Shell auf Webvorschau und wählen Sie dann Vorschau auf Port 8080 aus. Ein neues Fenster mit der ausgeführten Anwendung wird geöffnet.

    In Ihrem Webbrowser sehen Sie Hello, World!.

  3. Wenn Sie fortfahren möchten, stoppen Sie den lokalen Webserver, wenn Sie in Cloud Shell Strg+C drücken.

Auf einer einzelnen Instanz bereitstellen

In diesem Abschnitt wird die Ausführung einer einzelnen Instanz der Anwendung in Compute Engine beschrieben.

Bereitstellung einer einzelnen Instanz

Mit Cloud Shell können Sie eine einzelne Instanz in einer Compute Engine-VM bereitstellen, auf der Ihre Anwendung ausgeführt wird.

App mit Cloud Build erstellen

Mit Cloud Build können Sie die Anwendung erstellen, sie in einer TAR-Datei komprimieren und die Datei in einen Cloud Storage-Bucket hochladen. Buckets sind die grundlegenden Container, die Ihre Daten in Cloud Storage enthalten.

  1. Erstellen Sie in Ihrem Terminalfenster einen Cloud Storage-Bucket, wobei YOUR_BUCKET_NAME der Name Ihres Buckets ist:

    gcloud storage buckets create gs://YOUR_BUCKET_NAME

    Sie können für den Cloud Storage-Bucket einen beliebigen Namen verwenden. Es empfiehlt sich, für den Bucket-Namen die Projekt-ID zu verwenden. Da Bucket-Namen in der gesamten Google Cloud-Umgebung aber nur einmal vorkommen dürfen, ist die Verwendung der Projekt-ID nicht immer möglich.

  2. Starten Sie den Cloud Build-Prozess:

    gcloud builds submit --substitutions=_DEPLOY_DIR=gs://YOUR_BUCKET_NAME,_DEPLOY_FILENAME=app.tar.gz

    Der Befehl gcloud builds submit verwendet --substitutions, um den Speicherort zum Hochladen der resultierenden TAR-Datei zu konfigurieren. Später wird die TAR-Datei in die Compute Engine-Instanz heruntergeladen.

    Cloud Build verwendet eine YAML-Konfigurationsdatei, um die erforderlichen Schritte für den Build festzulegen.

    steps:
      # Print the Go version being used.
      - name: 'mirror.gcr.io/library/golang'
        args: ['go', 'version']
      # Make a deploy directory we'll tar after building the app.
      - name: 'debian'
        args: ['mkdir', '-p', 'deploy/etc/systemd/system/', 'deploy/usr/bin']
      # Build the app.
      - name: 'mirror.gcr.io/library/golang'
        env: [
          'GO111MODULE=on',
          'GOPROXY=https://proxy.golang.org,direct',
          'GOOS=linux',
          'GOARCH=amd64'
        ]
        args: ['go', 'build', '-o', 'deploy/usr/bin/app', '.']
      # Copy the systemd service file into the deploy directory.
      - name: 'debian'
        args: ['cp', 'my-app.service', 'deploy/etc/systemd/system/']
      # Compress the deploy directory.
      - name: 'debian'
        args: ['tar', '-czf', '${_DEPLOY_FILENAME}', '-C', './deploy', '.']
    # Upload the tarball to Cloud Storage.
    artifacts:
      objects:
        location: '${_DEPLOY_DIR}'
        paths: ['${_DEPLOY_FILENAME}']

Instanz mithilfe eines Startskripts initialisieren

Sie müssen Ihre Instanz anweisen, den Code herunterzuladen und auszuführen. Eine Instanz kann ein Startskript haben, das bei jedem Start oder Neustart der Instanz ausgeführt wird.

Ein Startskript wird ausgeführt, wenn eine Instanz das erste Mal gestartet wird.

set -ex

# Install logging monitor. The monitor will automatically pickup logs sent to syslog.
curl "https://storage.googleapis.com/signals-agents/logging/google-fluentd-install.sh" --output google-fluentd-install.sh
checksum=$(sha256sum google-fluentd-install.sh | awk '{print $1;}')
if [ "$checksum" != "ec78e9067f45f6653a6749cf922dbc9d79f80027d098c90da02f71532b5cc967" ]; then
    echo "Checksum does not match"
    exit 1
fi
chmod +x google-fluentd-install.sh && ./google-fluentd-install.sh
service google-fluentd restart &

APP_LOCATION=$(curl -s "http://metadata.google.internal/computeMetadata/v1/instance/attributes/app-location" -H "Metadata-Flavor: Google")
gsutil cp "$APP_LOCATION" app.tar.gz
tar -xzf app.tar.gz

# Start the service included in app.tar.gz.
service my-app start

Das Startskript führt folgende Aufgaben durch:

  • Installiert den Cloud-Logging-Agent und konfiguriert ihn für das Monitoring der Anwendungslogs.

  • Lädt die TAR-Datei für die Bereitstellung herunter und extrahiert sie.

  • Startet einen systemd-Dienst, um die App auszuführen.

Compute Engine-Instanz erstellen und konfigurieren

  1. Erstellen Sie eine Compute Engine-Instanz:

    Linux/macOS

    gcloud compute instances create my-app-instance \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --machine-type=g1-small \
    --scopes userinfo-email,cloud-platform \
    --metadata-from-file startup-script=startup-script.sh \
    --metadata app-location="gs://YOUR_BUCKET_NAME/app.tar.gz" \
    --zone YOUR_ZONE \
    --tags http-server

    Ersetzen Sie YOUR_ZONE durch eine Entwicklungszone, beispielsweise us-central1-a. Weitere Informationen zu Regionen und Zonen finden Sie unter Geografie und Regionen.

    Das Flag --metadata app-location teilt dem Startskript mit, wo die TAR-Datei der Anwendung heruntergeladen werden soll.

    Windows

    gcloud compute instances create my-app-instance ^
    --image-family=debian-10 ^
    --image-project=debian-cloud ^
    --machine-type=g1-small ^
    --scopes userinfo-email,cloud-platform ^
    --metadata-from-file startup-script=startup-script.sh ^
    --metadata app-location="gs://YOUR_BUCKET_NAME/app.tar.gz" ^
    --zone YOUR_ZONE ^
    --tags http-server

    Ersetzen Sie YOUR_ZONE durch eine Entwicklungszone, beispielsweise us-central1-a. Weitere Informationen zu Regionen und Zonen finden Sie unter Geografie und Regionen.

    Das Flag --metadata app-location teilt dem Startskript mit, wo die TAR-Datei der Anwendung heruntergeladen werden soll.

    Hierdurch wird eine neue Instanz erstellt, deren Zugriff auf Google Cloud-Dienste ermöglicht und das Startskript ausgeführt. Der Instanzname lautet my-app-instance.

  2. Prüfen Sie den Fortschritt der Instanzerstellung:

    gcloud compute instances get-serial-port-output my-app-instance --zone YOUR_ZONE
    

    Wenn das Startskript abgeschlossen ist, sehen Sie folgende Meldung:

    startup-script: INFO Finished running startup scripts.
    
  3. Erstellen Sie eine Firewallregel, die Traffic zur Instanz zulässt:

    gcloud compute firewall-rules create default-allow-http-80 \
        --allow tcp:80 \
        --source-ranges 0.0.0.0/0 \
        --target-tags http-server \
        --description "Allow port 80 access to http-server"
    

  4. Rufen Sie die externe IP-Adresse der Instanz ab:

    gcloud compute instances list
    
  5. Geben Sie die folgende URL in Ihren Browser ein, wenn Sie Ihre ausgeführte Anwendung sehen möchten:

    http://YOUR_INSTANCE_IP
    

    Ersetzen Sie YOUR_INSTANCE_IP durch die externe IP-Adresse Ihrer Instanz.

Instanzen verwalten und beobachten

Mit der Google Cloud Console können Sie Ihre Instanz im Blick behalten und verwalten.

  1. In the Google Cloud console, go to the VM instances page.

    Go to VM instances

  2. In the list of virtual machine instances, click SSH in the row of the instance that you want to connect to.
  3. Wenn Sie alle von Ihren Compute Engine-Ressourcen generierten Logs anzeigen lassen möchten, rufen Sie die Seite Log-Explorer auf. Log-Explorer aufrufen

    Cloud Logging wird automatisch so konfiguriert, dass Logs aus verschiedenen gängigen Diensten erfasst werden, einschließlich syslog.

Bereinigen

Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.

Projekt löschen

  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.

Einzelne Ressourcen löschen

gcloud compute instances delete my-app-instance --zone=YOUR_ZONE --delete-disks=all
gcloud compute firewall-rules delete default-allow-http-80

Nächste Schritte