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 autogestito
- 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 in tutti i progetti Google Cloud ed è immutabile (non può essere modificato dopo essere stato impostato). La console Cloud genera automaticamente una stringa univoca; di solito non ti importa cosa sia. Nella maggior parte dei codelab, dovrai fare riferimento all'ID progetto (in genere è identificato come
PROJECT_ID
). Se l'ID generato non ti soddisfa, puoi generarne un altro casuale. In alternativa, puoi provarne una personalizzata per verificare 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. Eseguire questo codelab non dovrebbe costare molto. 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 sono idonei al programma prova senza costi di 300$.
3. Configurazione dell'infrastruttura
Installare e configurare 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 di progetto(il punto di ingresso a Pulumi)
cat <<EOT > Pulumi.yaml
name: pulumi-lab
description: Try Pulumi
runtime: yaml
main: yaml-repo/
EOT
Definisci le risorse YAML
Crea una directory per contenere le definizioni di risorse cloud in formato YAML
mkdir yaml-repo
Crea il file yaml-repo/Pulumi.yaml
con le seguenti definizioni di 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 simile alla 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 yes per eseguire il provisioning delle risorse. L'output dovrebbe essere simile al seguente
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 comando seguente stamperà gli output definiti
pulumi stack output
Esegui questo comando per verificare la modifica
gsutil ls $(pulumi stack output bucketName)
L'output sarà simile a questo
(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
Esamina 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 punti al programma Python. 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 essere apportate 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 tua conferma sarà simile a questa:
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.