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
- 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.
- 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.
- 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.
- Bucket
- IAM-Bindung
- Ein Textobjekt mit der Zeichenfolge "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
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.