Python Bookshelf App mit Deployment Manager bereitstellen

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

Mit Deployment Manager können Sie die für eine Bereitstellung erforderlichenGoogle Cloud Ressourcen in einem einzigen Schritt über einen deklarativen, wiederholbaren Prozess 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.

Ziele

  • Bookshelf-Beispiel-App klonen und konfigurieren
  • Deployment Manager-Konfigurationen und -Vorlagen erstellen
  • Deployment Manager-Bereitstellungen erstellen
  • Bookshelf-Beispiel-App mit dem 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 Nutzern von Google Cloud 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. Melden Sie sich in Ihrem Google Cloud -Konto an. Wenn Sie mit Google Cloudnoch 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. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

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

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. Installieren Sie die Google Cloud CLI.

  6. Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

  7. Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

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

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  11. Installieren Sie die Google Cloud CLI.

  12. Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

  13. Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:

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

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:

    gcloud storage buckets create gs://YOUR_BUCKET_NAME
  2. Legen Sie für die Identity and Access Management-Richtlinie des Buckets fest, dass die Rolle legacyObjectReader für allUsers gewährt wird, damit hochgeladene Bilder in der Bookshelf-App angezeigt werden:

    gcloud storage buckets add-iam-policy-binding gs://YOUR_BUCKET_NAME
    --member=allUsers --role=roles/storage.legacyObjectReader

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 Google 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 App wird jetzt auf Google Cloudausgeführt.

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 Backend-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. Wechseln Sie in der Google 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.

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

Nächste Schritte