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 erforderlichenGoogle Cloud Ressourcen für ein Deployment in einem einzigen Schritt über einen deklarativen, wiederholbaren Prozess erstellen. Mit Deployment Manager können Sie Ihre Bereitstellungen aktualisieren, Änderungen im Zeitverlauf nachverfolgen, Vorlagen mit Jinja oder Python erstellen und Ihre Vorlagen parametrisieren, sodass ä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 einfach 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, if any are not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  5. Install the Google Cloud CLI.

  6. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  7. To initialize the gcloud CLI, run the following command:

    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, if any are not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  11. Install the Google Cloud CLI.

  12. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  13. To initialize the gcloud CLI, run the following command:

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

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. Wenn Sie hochgeladene Bilder in der Bookshelf App ansehen möchten, legen Sie die IAM-Richtlinie (Identity and Access Management) des Buckets so fest, dass die Rolle legacyObjectReader für allUsers gewährt wird:

    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 aktuelle Version des Codes Ihrer App 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 in der Vorlage und in der Anleitung Bookshelf on Compute Engine.

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 in der Definition der Instanzvorlagenressource in der Referenzdokumentation zur Compute Engine API.

Die Vorlage wird in der Jinja-Vorlagensprache 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 in der Deployment Manager-Dokumentation unter Umgebungsvariablen verwenden:

{% 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 Scripts wird in die Vorlage eingefügt und die Jinja-Einrückungsanweisung 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