Python Bookshelf App mit Deployment Manager bereitstellen

In dieser Anleitung erfahren Sie, wie Sie die Python Bookshelf-Beispielanwendung mit Cloud Deployment Manager bereitstellen.

Deployment Manager ermöglicht Ihnen, die für eine Bereitstellung erforderlichen Google Cloud-Ressourcen in einem einzigen Schritt über einen deklarativen, wiederholbaren Prozess zu erstellen. Mit Deployment Manager können Sie Ihre Bereitstellungen aktualisieren, Änderungen im Zeitverlauf verfolgen, Vorlagen mit Jinja oder Python erstellen und Ihre Vorlagen so parametrisieren, dass ähnliche Bereitstellungen eine Vorlage gemeinsam nutzen.

Lernziele

  • Bookshelf-Beispiel-App klonen und konfigurieren
  • Deployment Manager-Konfigurationen und -Vorlagen erstellen
  • Deployment Manager-Bereitstellungen erstellen
  • Bookshelf-Beispiel-App mittels Deployment Manager 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.

Nach Abschluss der in diesem Dokument beschriebenen Aufgaben können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.

Hinweis

  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 Datastore API, Cloud Storage API, Pub/Sub API APIs.

    Enable the APIs

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

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

    Go to project selector

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

  9. Enable the Datastore API, Cloud Storage API, Pub/Sub API APIs.

    Enable the APIs

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init
  12. Installieren Sie Python, pip und virtualenv auf Ihrem System. Eine Anleitung finden Sie unter Python-Entwicklungsumgebung für Google Cloud einrichten.

Cloud Storage-Bucket erstellen

In der folgenden Anleitung wird im Detail erläutert, wie Sie einen Cloud Storage-Bucket erstellen. Buckets sind die grundlegenden Container für Ihre Daten in Cloud Storage.

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

    gsutil mb gs://YOUR_BUCKET_NAME
  2. Legen Sie für die standardmäßige Access Control List (ACL) des Buckets public-read fest, damit hochgeladene Bilder in der Bookshelf-Anwendung angezeigt werden.

    gsutil defacl set public-read gs://YOUR_BUCKET_NAME

Beispiel-App klonen

Die Beispielanwendung steht auf GitHub unter GoogleCloudPlatform/getting-started-python zur Verfügung.

  1. Klonen Sie das Repository:

    git clone https://github.com/GoogleCloudPlatform/getting-started-python.git -b steps
    
  2. Gehen Sie zum Beispielverzeichnis:

    cd getting-started-python/7-gce
    

App konfigurieren

  1. Öffnen Sie config.py zum Bearbeiten.

    • Legen Sie den Wert von PROJECT_ID auf Ihre Projekt-ID fest.

    • Legen Sie den Wert CLOUD_STORAGE_BUCKET auf den Namen des Cloud Storage-Buckets fest.

  2. Speichern und schließen Sie config.py.

App auf lokalem Computer ausführen

  1. Erstellen Sie eine isolierte Python-Umgebung und installieren Sie Abhängigkeiten:

    Linux/macOS

    virtualenv -p python3 env
    source env/bin/activate
    pip install -r requirements.txt
    

    Windows

    virtualenv -p python3 env
    env\scripts\activate
    pip install -r requirements.txt
    

  2. Führen Sie die Anwendung aus:

    python main.py
    
  3. Geben Sie im Browser die folgende Adresse ein:

    http://localhost:8080

Drücken Sie Strg+C, um den lokalen Webserver zu beenden. Wenn Sie die virtuelle Umgebung beenden möchten, geben Sie deactivate ein.

Beispiel-App bereitstellen

Code per Push in Repository übertragen

Sie können Ihren Code auf verschiedene Weise in eine ausgeführten Compute Engine-Instanz abrufen. Eine Möglichkeit ist z. B. die Verwendung von Cloud Source Repositories. Jedes Projekt enthält ein Git-Repository, das Compute Engine-Instanzen zur Verfügung steht. Ihre Instanzen rufen dann beim Start die neueste Version des Anwendungscodes ab. Die Verwendung eines Git-Repositorys ist praktisch, weil Sie zum Aktualisieren der Anwendung keine neuen Images oder Instanzen konfigurieren müssen. Sie starten einfach eine vorhandene Instanz oder erstellen eine neue.

  1. Wenn Sie Git zum ersten Mal verwenden, richten Sie mit git config --global Ihre Identität ein.

  2. Erstellen Sie in der Cloud Console ein Repository:

    Repository erstellen

  3. Übertragen Sie dann den Anwendungscode per Push in das Projekt-Repository, wobei [YOUR_PROJECT_ID] Ihre Projekt-ID und [YOUR_REPO] der Name Ihres Repositorys ist:

    git commit -am "Updating configuration"
    git config credential.helper gcloud.sh
    git remote add cloud https://source.developers.google.com/p/[YOUR_PROJECT_ID]/r/[YOUR_REPO]
    git push cloud master
    

Bereitstellung erstellen

Nachdem die Konfiguration festgeschrieben und der Code in Cloud Source Repositories hochgeladen wurde, können Sie die Bereitstellung mit Deployment Manager erstellen:

  1. Wechseln Sie in das Verzeichnis deployment_manager:

    cd getting-started-python/7-gce/gce/deployment_manager
    
  2. Erstellen Sie die Bereitstellung:

    gcloud deployment-manager deployments create my-deployment --config config.yaml
    
  3. Rufen Sie eine Liste aller Bereitstellungen auf:

    gcloud deployment-manager deployments list
    
  4. Rufen Sie eine Beschreibung der Bereitstellung und der von ihr erstellten Ressourcen ab:

    gcloud deployment-manager deployments describe my-deployment
    

Anwendung ansehen

Nachdem Sie die Weiterleitungsregel erstellt haben, kann es einige Minuten dauern, bis die Konfiguration angewendet wurde und Traffic zu Ihren Instanzen geleitet wird.

  1. So prüfen Sie den Fortschritt:

    gcloud compute backend-services get-health bookshelf-my-deployment-frontend --global
    
  2. Wenn mindestens eine Ihrer Instanzen HEALTHY meldet, rufen Sie die Weiterleitungs-IP-Adresse für den Load-Balancer ab:

    gcloud compute forwarding-rules list --global
    

    Die Weiterleitungs-IP-Adresse befindet sich in der Spalte IP_ADDRESS.

  3. Geben Sie die IP-Adresse aus der Liste in die Adressleiste Ihres Browsers ein.

    Ihre Anwendung wird jetzt in Google Cloud ausgeführt.

Den Code verstehen

Bereitstellung konfigurieren

Sie können die Konfiguration der Bereitstellung in config.yaml ansehen:

imports:
- name: bookshelf.jinja
  path: ./bookshelf.jinja

resources:
- name: bookshelf
  type: bookshelf.jinja
  properties:
    zone: us-central1-f
    machine-type: n1-standard-1
    machine-image: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/family/debian-9
    min-instances: 1
    max-instances: 10
    target-utilization: 0.6
    scopes:
    - https://www.googleapis.com/auth/cloud-platform

Durch die Konfigurationsdatei wird die Vorlagendatei als Ressource importiert und damit eine Ressource namens bookshelf definiert. Die Vorlage nimmt einige Attribute als Parameter an. Weitere Informationen zum Erstellen von Deployment Manager-Konfigurationsdateien finden Sie unter Konfiguration erstellen.

Schema der Bereitstellungsvorlage konfigurieren

Sehen Sie sich die Schemadatei bookshelf.jinja.schema an, in der die Parameter definiert und dokumentiert werden, die die Bereitstellung in der zugehörigen Konfigurationsdatei zur Verfügung stellen soll. Weitere Informationen zu Konfigurationsschemas finden Sie unter Schemas verwenden.


info:
  title: Bookshelf GCE Deploy
  author: Google Inc.
  description: Creates a GCE Deployment

imports:
- name: startup-script
  path: ../startup-script.sh

required:
- zone
- machine-type
- min-instances
- max-instances
- scopes

properties:
  zone:
    description: Zone to create the resources in.
    type: string
  machine-type:
    description: Type of machine to use
    type: string
  machine-image:
    description: The OS image to use on the machines
    type: string
  min-instances:
    description: The minimum number of VMs the autoscaler will create
    type: integer
  max-instances:
    description: The maximum number of VMs the autoscaler will create
    type: integer
  target-utilization:
    description: The target CPU usage for the autoscaler to base its scaling on
    type: number
  scopes:
    description: A list of scopes to create the VM with
    type: array
    minItems: 1
    items:
      type: string

Bereitstellungsvorlage konfigurieren

Durch die Vorlage werden mehrere Ressourcen definiert, die zum Erstellen einer verwalteten Instanzgruppe erforderlich sind, die automatisch skaliert wird und Load-Balancing verwendet. Eine vollständige Beschreibung der erstellten Ressourcen finden Sie in den Kommentaren der Vorlage und in der Anleitung Node.js Bookshelf in Compute Engine ausführen.

Deployment Manager bietet zwar die Möglichkeit, Ressourcen deklarativ festzulegen, die Konfiguration einer Ressource wird jedoch größtenteils durch die zugehörige API definiert. Die meisten Konfigurationsoptionen für die Instanzvorlagenressource finden Sie beispielsweise unter Definition der Instanzvorlagenressource in der Referenzdokumentation zur Compute Engine API.

Die Vorlage wird in der Vorlagensprache Jinja geschrieben. Beim Schreiben von Deployment Manager-Vorlagen können Sie entweder Jinja oder Python verwenden. Jinja bietet den Vorteil, dass es deklarativer und damit unter Umständen leichter zu lesen und zu verstehen als Python ist Für manche komplexen Bereitstellungen kann aber die Ausdrucksweise von Python günstiger sein. In diesem Fall reicht Jinja aus, um die erforderlichen Ressourcen zu erstellen.

In einer Vorlage werden bestimmte Umgebungsvariablen automatisch festgelegt. Auf diese Variablen können Sie über das Wörterbuch env zugreifen. In diesem Fall wird der Name der Bereitstellung als Name angegeben, der bei der Zuweisung von Namen für die erstellten Ressourcen wiederverwendet werden soll. Weitere Informationen zu verfügbaren Umgebungsvariablen finden Sie unter Einsatzspezifische Umgebungsvariablen verwenden in der Deployment Manager-Dokumentation.

{% set NAME = "bookshelf-" + env["deployment"] %}
{% set SERVICE = "bookshelf-" + env["deployment"] + "-frontend" %}

Die Vorlage verwendet dasselbe Startskript, das in der Compute Engine-Anleitung zum Einsatz kommt. Der Inhalt des Skripts wird in die Vorlage eingefügt und die Indent-Anweisung von Jinja rückt den Inhalt korrekt ein:

            value: |
{{imports['startup-script']|indent(14, true)}}

In einer Deployment Manager-Vorlage von Jinja können Sie auch auf Ressourcen verweisen, die an anderer Stelle in der Vorlage erstellt wurden. Im folgenden Beispiel verwendet der Back-End-Dienst die Referenz der verwalteten Instanzgruppe, um die Instanzgruppe abzurufen, auf die er verweisen soll:

- group: $(ref.{{ NAME }}-frontend-group.instanceGroup)
  zone: {{ properties['zone'] }}

Die in config.yaml angegebenen Attribute können in der Vorlage verwendet werden:

minNumReplicas: {{ properties['min-instances'] }}
maxNumReplicas: {{ properties['max-instances'] }}
loadBalancingUtilization:
  utilizationTarget: {{ properties['target-utilization'] }}

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

Am einfachsten vermeiden Sie weitere Kosten durch Löschen des für die Anleitung erstellten Projekts.

So löschen Sie das Projekt:

  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.

Bereitstellung löschen

Geben Sie den folgenden Befehl ein, um die Bereitstellung zu löschen. Mit diesem Befehl werden der Load-Balancer und alle Compute Engine-Instanzen gelöscht, die mit Ihrer Bereitstellung verknüpft sind:

gcloud deployment-manager deployments delete my-deployment

Weitere Informationen