1. Übersicht
In diesem Lab erfahren Sie, wie Sie Pulumi verwenden, ein Infrastructure-as-Code-Tool, mit dem Sie Google Cloud-Ressourcen bereitstellen und verwalten können.
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 ein YAML-Programm in ein Python-Programm zu konvertieren.
2. Einrichtung und Anforderungen
Umgebung zum selbstbestimmten Lernen einrichten
- 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 eines erstellen.



- Der Projektname ist der Anzeigename für die Teilnehmer dieses Projekts. Es handelt sich um einen String, der nicht von Google APIs verwendet wird. Sie können ihn jederzeit aktualisieren.
- Die Projekt-ID ist für alle Google Cloud-Projekte eindeutig und unveränderlich (kann nach dem Festlegen nicht mehr geändert werden). In der Cloud Console wird automatisch ein eindeutiger String generiert. Normalerweise ist es nicht wichtig, wie dieser String aussieht. In den meisten Codelabs müssen Sie auf die Projekt-ID verweisen (sie wird in der Regel als
PROJECT_IDangegeben). Wenn Ihnen die generierte ID nicht gefällt, können Sie eine andere zufällige ID generieren. Alternativ können Sie es mit einem eigenen versuchen und sehen, ob es verfügbar ist. Sie kann nach diesem Schritt nicht mehr geändert werden und bleibt für die Dauer des Projekts bestehen. - Zur Information: Es gibt einen dritten Wert, die Projektnummer, die von einigen APIs verwendet wird. Weitere Informationen zu diesen drei Werten
- Als Nächstes müssen Sie die Abrechnung in der Cloud Console aktivieren, um Cloud-Ressourcen/-APIs zu verwenden. Die Durchführung dieses Codelabs sollte keine oder nur geringe Kosten verursachen. Wenn Sie Ressourcen herunterfahren möchten, damit Ihnen nach Abschluss dieser Anleitung keine Kosten mehr in Rechnung gestellt werden, können Sie die von Ihnen erstellten Ressourcen oder das gesamte Projekt löschen. Neue Nutzer von Google Cloud kommen für das Programm für kostenlose Testversionen mit einem Guthaben von 300$ infrage.
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 dem Pfad hinzufügen und die Hilfemeldung 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. Sie müssen die Anweisungen der Befehle befolgen.
export PROJECT_ID=$(gcloud config get-value project)
gcloud auth application-default login
In Cloud Shell einen GCS-Bucket erstellen und als Backend verwenden
gsutil mb gs://pulumi-${PROJECT_ID}
pulumi login gs://pulumi-${PROJECT_ID}
Neues Projekt erstellen
Erstellen Sie in Cloud Shell das Projektstammverzeichnis.
mkdir pulumi-lab && cd pulumi-lab
Projektdatei definieren(der Einstiegspunkt für Pulumi)
cat <<EOT > Pulumi.yaml
name: pulumi-lab
description: Try Pulumi
runtime: yaml
main: yaml-repo/
EOT
YAML-Ressourcen definieren
Verzeichnis für Cloud-Ressourcendefinitionen im YAML-Format erstellen
mkdir yaml-repo
Erstellen Sie die Datei yaml-repo/Pulumi.yaml mit den folgenden Ressourcendefinitionen.
- Bucket
- IAM-Bindung
- Ein Textobjekt mit dem String „Hello World!“
- 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
Prüfen Sie die Stack-Konfiguration. Sie sollten den Schlüssel gcp:project mit Ihrer Projekt-ID als Wert sehen.
pulumi config
Die Verzeichnisstruktur sollte jetzt so aussehen:
├── Pulumi.dev.yaml
├── Pulumi.yaml
└── yaml-repo
└── Pulumi.yaml
Stapel bereitstellen
pulumi up
Mit diesem Befehl wird Ihr Programm ausgewertet und es wird ermittelt, welche Ressourcen aktualisiert werden müssen. Zuerst wird eine Vorschau mit den Änderungen angezeigt, die vorgenommen werden, wenn Sie den Befehl ausführen.
(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. Die Ressourcen werden dann bereitgestellt. 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
Wenn Sie den folgenden Befehl ausführen, 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)
Ihre Ausgabe sieht dann so aus:
(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
Sehen Sie sich den generierten Code in py-repo an.
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. Laufzeit und Haupteintrag wurden geändert
cat <<EOT > Pulumi.yaml
name: pulumi-lab
description: Try Pulumi
runtime: python
main: py-repo/
EOT
Stellen Sie den Stack noch einmal bereit und wählen Sie yes aus.
pulumi up
Es sollten keine Änderungen vorgenommen werden und die Ausgabe sollte 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 abgeschlossen.