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 schreiben, um Ihre Infrastruktur in Google Cloud zu modellieren
- 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
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 Projekt. Wenn Sie noch kein Gmail- oder Google Workspace-Konto haben, müssen Sie eines erstellen.
- Der Projektname ist der Anzeigename für die Projektteilnehmer. Es handelt sich um eine Zeichenfolge, die von Google APIs nicht verwendet wird. Sie können sie jederzeit aktualisieren.
- Die Projekt-ID ist für alle Google Cloud-Projekte eindeutig und unveränderlich. Sie kann nach dem Festlegen nicht mehr geändert werden. Die Cloud Console generiert automatisch einen eindeutigen String. ist Ihnen meist egal, was es ist. In den meisten Codelabs musst du auf die Projekt-ID verweisen, die üblicherweise als
PROJECT_ID
gekennzeichnet ist. Wenn Ihnen die generierte ID nicht gefällt, können Sie eine weitere zufällige ID erstellen. Alternativ können Sie einen eigenen verwenden und nachsehen, ob er verfügbar ist. Sie kann nach diesem Schritt nicht mehr geändert werden und bleibt für die Dauer des Projekts bestehen. - 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 in der Cloud Console die Abrechnung aktivieren, um Cloud-Ressourcen/APIs verwenden zu können. Dieses Codelab sollte möglichst wenig kosten. 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. Neue Google Cloud-Nutzer haben Anspruch auf eine kostenlose Testversion mit 300$Guthaben.
3. Einrichten der Infrastruktur
Installation und Konfiguration von Pulumi
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 Hilfemeldung von Pulumi ansehen
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
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 definieren(Einstiegspunkt zu 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 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
Prüfen Sie die Stackkonfiguration. Sie sollten den Schlüssel gcp:project mit Ihrer Projekt-ID als Wert sehen
pulumi config
Die Verzeichnisstruktur sollte nun 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. Zunächst wird eine Vorschau angezeigt, die die Änderungen beschreibt, die vorgenommen werden, wenn Sie den Befehl
(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 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 prüfen
gsutil ls $(pulumi stack output bucketName)
Ihre Ausgabe sieht 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
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 vorliegen und die Ausgabe sollte ungefähr 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
Ihre Bestätigung sieht so 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.