Pulumi in Google Cloud mit YAML verwenden

1. Übersicht

In diesem Lab erfahren Sie, wie Sie mit Pulumi, einem Infrastruktur-als-Code-Tool, Google Cloud-Ressourcen bereitstellen und verwalten.

Lerninhalte

In diesem Lab lernen Sie Folgendes:

  • Pulumi installieren und konfigurieren
  • YAML-Programm zum Modellieren Ihrer Infrastruktur in Google Cloud schreiben
  • Cloud-Ressourcen mit Pulumi bereitstellen und verwalten
  • Verwenden Sie pulumi convert, um das YAML-Programm in ein Python-Programm zu konvertieren.

2. Einrichtung und Anforderungen

Einrichten der Umgebung im eigenen Tempo

  1. Melden Sie sich in der Google Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes. Wenn Sie noch kein Gmail- oder Google Workspace-Konto haben, müssen Sie ein Konto erstellen.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Der Projektname ist der Anzeigename für die Teilnehmer dieses Projekts. Es ist ein Zeichenstring, der von Google APIs nicht verwendet wird. Sie können ihn jederzeit aktualisieren.
  • Die Projekt-ID ist für alle Google Cloud-Projekte eindeutig und kann nach der Festlegung nicht mehr geändert werden. In der Cloud Console wird automatisch ein eindeutiger String generiert. Normalerweise spielt es keine Rolle, wie er lautet. In den meisten Codelabs müssen Sie auf die Projekt-ID verweisen (normalerweise als PROJECT_ID gekennzeichnet). Wenn Ihnen die generierte ID nicht gefällt, können Sie eine andere zufällige generieren. Alternativ können Sie Ihr eigenes Gerät testen, um zu sehen, ob es verfügbar ist. Sie kann nach diesem Schritt nicht mehr geändert werden und bleibt für die Dauer des Projekts erhalten.
  • Zur Information gibt es noch einen dritten Wert, die Projektnummer, die von manchen APIs verwendet wird. Weitere Informationen zu allen drei Werten finden Sie in der Dokumentation.
  1. Als Nächstes müssen Sie die Abrechnung in der Cloud Console aktivieren, um Cloud-Ressourcen/-APIs verwenden zu können. Die Ausführung dieses Codelabs sollte nur wenige Kosten verursachen, wenn überhaupt. Wenn Sie Ressourcen herunterfahren möchten, um über diese Anleitung hinaus keine Kosten zu verursachen, können Sie die von Ihnen erstellten Ressourcen oder das gesamte Projekt löschen. Neuen Nutzern der Google Cloud Platform steht das kostenlose Testprogramm mit einem Guthaben von 300$ zur Verfügung.

3. Einrichten der Infrastruktur

Pulumi installieren und konfigurieren

Führen Sie in Cloud Shell den folgenden Befehl aus, um Pulumi zu installieren

curl -fsSL https://get.pulumi.com | sh

Pulumi zum Pfad hinzufügen und die Hilfe von Pulumi aufrufen

export PATH=${PATH}:~/.pulumi/bin
# view the help message to verify pulumi runs
pulumi -h

Führen Sie die folgenden Befehle aus, um die Projekt-ID festzulegen und den Zugriff zu autorisieren. Folgen Sie der Anleitung in den Befehlen.

export PROJECT_ID=$(gcloud config get-value project)
gcloud auth application-default login

Erstellen Sie in Cloud Shell einen GCS-Bucket und verwenden Sie ihn als Back-End.

gsutil mb gs://pulumi-${PROJECT_ID}
pulumi login gs://pulumi-${PROJECT_ID}

Erstellen Sie ein neues Projekt

Erstellen Sie in Cloud Shell das Projektstammverzeichnis.

mkdir pulumi-lab && cd pulumi-lab

Projektdatei(Einstiegspunkt für Pulumi) definieren

cat <<EOT > Pulumi.yaml
name: pulumi-lab
description: Try Pulumi

runtime: yaml
main: yaml-repo/
EOT

YAML-Ressourcen definieren

Verzeichnis zum Speichern von Cloud-Ressourcendefinitionen im YAML-Format erstellen

mkdir yaml-repo

Erstellen Sie die Datei yaml-repo/Pulumi.yaml mit den folgenden Ressourcendefinitionen.

  1. Bucket
  2. IAM-Bindung
  3. Ein Textobjekt mit der Zeichenfolge "Hello World!"
  4. Und einige Ausgaben
resources:
  # Create a GCP resource (Storage Bucket)
  my-bucket:
    type: gcp:storage:Bucket
    properties:
      location: US
      website:
        mainPageSuffix: index.html
      uniformBucketLevelAccess: true

  my-bucket-binding:
    type: gcp:storage:BucketIAMBinding
    properties:
      bucket: ${my-bucket.name}
      role: "roles/storage.objectViewer"
      members: ["allUsers"]

  index-object:
    type: gcp:storage:BucketObject
    properties:
      bucket: ${my-bucket}
      source:
        fn::stringAsset: Hello World!

outputs:
  bucketName: ${my-bucket.url}

Ressourcen bereitstellen

Stack initialisieren und konfigurieren

export PULUMI_CONFIG_PASSPHRASE=pulumi-lab
pulumi stack init dev
pulumi config set gcp:project $PROJECT_ID

In der Stack-Konfiguration sollte der Schlüssel gcp:project mit Ihrer Projekt-ID als Wert angezeigt werden.

pulumi config

Die Verzeichnisstruktur sollte jetzt so aussehen:

├── Pulumi.dev.yaml
├── Pulumi.yaml
└── yaml-repo
    └── Pulumi.yaml

Stapel bereitstellen

pulumi up

Dieser Befehl wertet Ihr Programm aus und bestimmt, welche Ressourcenaktualisierungen vorgenommen werden sollen. Zuerst wird eine Vorschau angezeigt, in der die Änderungen dargestellt sind, die durch den Befehl vorgenommen werden.

(Ausgabe)

Previewing update (dev):
Downloading plugin gcp v6.44.0: 45.69 MiB / 45.69 MiB [=============] 100.00% 1s
     Type                             Name               Plan
 +   pulumi:pulumi:Stack              pulumi-lab-dev     create
 +   ├─ gcp:storage:Bucket            my-bucket          create
 +   ├─ gcp:storage:BucketObject      index-object       create
 +   └─ gcp:storage:BucketIAMBinding  my-bucket-binding  create


Outputs:
    bucketName: output<string>

Resources:
    + 4 to create

Do you want to perform this update?  [Use arrows to move, type to filter]
  yes
> no
  details

Wählen Sie Ja aus, um die Ressourcen bereitzustellen. Die Ausgabe sollte so aussehen:

Do you want to perform this update? yes
Updating (dev):
     Type                             Name               Status
 +   pulumi:pulumi:Stack              pulumi-lab-dev     created (3s)
 +   ├─ gcp:storage:Bucket            my-bucket          created (1s)
 +   ├─ gcp:storage:BucketObject      index-object       created (0.78s)
 +   └─ gcp:storage:BucketIAMBinding  my-bucket-binding  created (5s)


Outputs:
    bucketName: "gs://my-bucket-874aa08"

Resources:
    + 4 created

Duration: 11s

Durch Ausführen des folgenden Befehls werden die definierten Ausgaben ausgegeben.

pulumi stack output

Führen Sie den folgenden Befehl aus, um die Änderung zu überprüfen.

gsutil ls $(pulumi stack output bucketName)

Die Ausgabe sollte so aussehen:

(Ausgabe)

gs://my-bucket-11a9046/index-object-77a5d80

4. YAML in Python konvertieren

Konvertieren wir das obige Beispiel in ein Pulumi-Python-Programm.

pulumi convert --language python --out ./py-repo

Den in py-repo generierten Code überprüfen

cat py-repo/__main__.py

(Ausgabe)

import pulumi
import pulumi_gcp as gcp

my_bucket = gcp.storage.Bucket("my-bucket",
    location="US",
    website=gcp.storage.BucketWebsiteArgs(
        main_page_suffix="index.html",
    ),
    uniform_bucket_level_access=True)
my_bucket_binding = gcp.storage.BucketIAMBinding("my-bucket-binding",
    bucket=my_bucket.name,
    role="roles/storage.objectViewer",
    members=["allUsers"])
index_object = gcp.storage.BucketObject("index-object",
    bucket=my_bucket.id,
    source=pulumi.StringAsset("Hello World!"))
pulumi.export("bucketName", my_bucket.url)
.......

Virtuelle Python-Umgebung aktivieren

source py-repo/bin/activate

Aktualisieren Sie die Projektdatei Pulumi.yaml, sodass sie auf das Python-Programm verweist. Beachten Sie, dass die Laufzeit und der Haupteintrag geändert wurden.

cat <<EOT > Pulumi.yaml
name: pulumi-lab
description: Try Pulumi

runtime: python
main: py-repo/
EOT

Versuchen Sie, den Stapel noch einmal bereitzustellen, und wählen Sie Ja aus.

pulumi up

Es sollten keine Änderungen auftreten und die Ausgabe sollte in etwa so aussehen:

(Ausgabe)

Previewing update (dev):
     Type                 Name            Plan
     pulumi:pulumi:Stack  pulumi-lab-dev


Resources:
    4 unchanged

Do you want to perform this update? yes
Updating (dev):
     Type                 Name            Status
     pulumi:pulumi:Stack  pulumi-lab-dev


Outputs:
    bucketName: "gs://my-bucket-c2b49ad"

Resources:
    4 unchanged

Duration: 6s

5. Ressourcen löschen

Erstellte Ressourcen löschen

pulumi destroy

Die Bestätigung sieht folgendermaßen aus:

Previewing update (dev):
     Type                 Name            Plan
     pulumi:pulumi:Stack  pulumi-lab-dev


Resources:
    4 unchanged

Do you want to perform this update?  [Use arrows to move, type to filter]
  yes
> no
  details


Do you want to perform this destroy? yes
Destroying (dev):
     Type                             Name               Status
 -   pulumi:pulumi:Stack              pulumi-lab-dev     deleted
 -   ├─ gcp:storage:BucketIAMBinding  my-bucket-binding  deleted (5s)
 -   ├─ gcp:storage:BucketObject      index-object       deleted (1s)
 -   └─ gcp:storage:Bucket            my-bucket          deleted (0.73s)


Outputs:
  - bucketName: "gs://my-bucket-874aa08"

Resources:
    - 4 deleted

Duration: 10s

6. Glückwunsch!

Sie haben das Lab erfolgreich abgeschlossen.