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 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

  1. 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.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • 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.
  1. 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

  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

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.