1. Panoramica
Questo lab insegna come utilizzare Pulumi, uno strumento Infrastructure as Code per eseguire il provisioning e la gestione delle risorse Google Cloud.
Cosa imparerai a fare
In questo lab imparerai a:
- Installare e configurare Pulumi
- Scrivi un programma YAML per modellare la tua infrastruttura su Google Cloud
- Eseguire il provisioning e la gestione delle risorse Cloud con Pulumi
- Usa pulumi convert per convertire il programma YAML in programma Python
2. Configurazione e requisiti
Configurazione dell'ambiente a tuo ritmo
- Accedi alla console Google Cloud e crea un nuovo progetto o riutilizzane uno esistente. Se non hai ancora un account Gmail o Google Workspace, devi crearne uno.
- Il Nome progetto è il nome visualizzato dei partecipanti del progetto. Si tratta di una stringa di caratteri non utilizzata dalle API di Google. Puoi aggiornarla in qualsiasi momento.
- L'ID progetto è univoco per tutti i progetti Google Cloud ed è immutabile (non può essere modificato dopo essere stato impostato). La console Cloud genera automaticamente una stringa univoca; in genere non è importante quale sia. Nella maggior parte dei codelab, dovrai fare riferimento all'ID progetto (in genere identificato come
PROJECT_ID
). Se l'ID generato non ti piace, puoi generarne un altro casuale. In alternativa, puoi provare il tuo e vedere se è disponibile. Non può essere modificato dopo questo passaggio e rimarrà per tutta la durata del progetto. - Per informazione, c'è un terzo valore, un numero di progetto, utilizzato da alcune API. Scopri di più su tutti e tre questi valori nella documentazione.
- Successivamente, dovrai abilitare la fatturazione nella console Cloud per utilizzare risorse/API Cloud. L'esecuzione di questo codelab non dovrebbe costare molto, se non del tutto. Per arrestare le risorse in modo da non incorrere in fatturazione oltre questo tutorial, puoi eliminare le risorse che hai creato o eliminare l'intero progetto. I nuovi utenti di Google Cloud possono partecipare al programma Prova senza costi di 300$.
3. Configurazione dell'infrastruttura
Installa e configura Pulumi
In Cloud Shell, esegui questo comando per installare Pulumi
curl -fsSL https://get.pulumi.com | sh
Aggiungi Pulumi al percorso e visualizza il messaggio di aiuto di Pulumi
export PATH=${PATH}:~/.pulumi/bin
# view the help message to verify pulumi runs
pulumi -h
Esegui questi comandi per impostare l'ID progetto e autorizzare l'accesso. Devi seguire le istruzioni fornite dai comandi
export PROJECT_ID=$(gcloud config get-value project)
gcloud auth application-default login
In Cloud Shell, crea un bucket GCS e utilizzalo come backend
gsutil mb gs://pulumi-${PROJECT_ID}
pulumi login gs://pulumi-${PROJECT_ID}
Crea un nuovo progetto
In Cloud Shell, crea la directory principale del progetto
mkdir pulumi-lab && cd pulumi-lab
Definisci il file del progetto(il punto di contatto di Pulumi)
cat <<EOT > Pulumi.yaml
name: pulumi-lab
description: Try Pulumi
runtime: yaml
main: yaml-repo/
EOT
Definire le risorse YAML
Crea una directory per contenere le definizioni delle risorse cloud in formato yaml
mkdir yaml-repo
Crea il file yaml-repo/Pulumi.yaml
con le seguenti definizioni delle risorse
- Bucket
- Associazione IAM
- Un oggetto di testo con la stringa "Hello World!"
- E alcuni output
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}
Esegui il deployment delle risorse
Inizializza e configura lo stack
export PULUMI_CONFIG_PASSPHRASE=pulumi-lab
pulumi stack init dev
pulumi config set gcp:project $PROJECT_ID
Controlla la configurazione dello stack. Dovresti vedere la chiave gcp:project con l'ID progetto come valore
pulumi config
A questo punto, la struttura della directory dovrebbe essere la seguente
├── Pulumi.dev.yaml ├── Pulumi.yaml └── yaml-repo └── Pulumi.yaml
Esegui il deployment dello stack
pulumi up
Questo comando valuta il programma e determina gli aggiornamenti delle risorse da eseguire. Innanzitutto, viene mostrata un'anteprima che delinea le modifiche che verranno apportate quando il comando
(Output)
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
Seleziona Sì per eseguire il provisioning delle risorse. L'output dovrebbe avere il seguente aspetto
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
L'esecuzione del seguente comando stampa gli output definiti
pulumi stack output
Esegui questo comando per verificare la modifica
gsutil ls $(pulumi stack output bucketName)
L'output sarà simile al seguente
(output)
gs://my-bucket-11a9046/index-object-77a5d80
4. Converti YAML in Python
Convertiamo l'esempio precedente in un programma Python Pulumi
pulumi convert --language python --out ./py-repo
Controlla il codice generato in py-repo
cat py-repo/__main__.py
(output)
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) .......
Attiva l'ambiente virtuale Python
source py-repo/bin/activate
Aggiorna il file di progetto Pulumi.yaml in modo che indichi il programma Python. Tieni presente che il runtime e la voce principale sono stati modificati
cat <<EOT > Pulumi.yaml
name: pulumi-lab
description: Try Pulumi
runtime: python
main: py-repo/
EOT
Prova a eseguire nuovamente il deployment dello stack e seleziona yes
pulumi up
Non dovrebbero esserci modifiche e l'output dovrebbe essere simile a questo
(output)
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. Elimina le risorse
Elimina le risorse create
pulumi destroy
La conferma avrà il seguente aspetto
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. Complimenti!
Congratulazioni, hai terminato il lab.