1. Ringkasan
Lab ini mengajarkan cara menggunakan Pulumi, alat Infrastructure as Code untuk menyediakan dan mengelola resource Google Cloud.
Yang akan Anda pelajari
Di lab ini, Anda akan mempelajari cara melakukan hal-hal berikut:
- Menginstal dan mengonfigurasi Pulumi
- Menulis program YAML untuk membuat model infrastruktur Anda di Google Cloud
- Menyediakan dan mengelola resource Cloud menggunakan Pulumi
- Menggunakan pulumi convert untuk mengonversi program YAML menjadi program python
2. Penyiapan dan Persyaratan
Penyiapan lingkungan mandiri
- Login ke Google Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. Jika belum memiliki akun Gmail atau Google Workspace, Anda harus membuatnya.
- Project name adalah nama tampilan untuk peserta project ini. String ini adalah string karakter yang tidak digunakan oleh Google API. Anda dapat memperbaruinya kapan saja.
- Project ID bersifat unik di semua project Google Cloud dan tidak dapat diubah (tidak dapat diubah setelah ditetapkan). Cloud Console otomatis membuat string unik; biasanya Anda tidak mementingkan kata-katanya. Di sebagian besar codelab, Anda harus merujuk Project ID-nya (umumnya diidentifikasi sebagai
PROJECT_ID
). Jika tidak suka dengan ID yang dibuat, Anda dapat membuat ID acak lainnya. Atau, Anda dapat mencobanya sendiri dan melihat apakah ID tersebut tersedia. ID tidak dapat diubah setelah langkah ini dan akan tetap ada selama durasi project. - Sebagai informasi, ada nilai ketiga, Project Number, yang digunakan oleh beberapa API. Pelajari lebih lanjut ketiga nilai ini di dokumentasi.
- Selanjutnya, Anda harus mengaktifkan penagihan di Konsol Cloud untuk menggunakan resource/API Cloud. Menjalankan operasi dalam codelab ini seharusnya tidak memerlukan banyak biaya, bahkan mungkin tidak sama sekali. Guna mematikan resource agar tidak menimbulkan penagihan di luar tutorial ini, Anda dapat menghapus resource yang dibuat atau menghapus seluruh project. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.
3. Penyiapan infrastruktur
Instal dan Konfigurasi Pulumi
Di Cloud Shell, jalankan perintah berikut untuk menginstal Pulumi
curl -fsSL https://get.pulumi.com | sh
Tambahkan Pulumi ke jalur dan lihat pesan bantuan dari Pulumi
export PATH=${PATH}:~/.pulumi/bin
# view the help message to verify pulumi runs
pulumi -h
Jalankan perintah berikut untuk menetapkan project ID dan memberikan otorisasi akses. Anda harus mengikuti petunjuk yang diberikan oleh perintah
export PROJECT_ID=$(gcloud config get-value project)
gcloud auth application-default login
Di Cloud Shell, buat bucket GCS dan gunakan sebagai backend
gsutil mb gs://pulumi-${PROJECT_ID}
pulumi login gs://pulumi-${PROJECT_ID}
Membuat project baru
Di Cloud Shell, buat direktori utama project
mkdir pulumi-lab && cd pulumi-lab
Tentukan file project(titik entri ke Pulumi)
cat <<EOT > Pulumi.yaml
name: pulumi-lab
description: Try Pulumi
runtime: yaml
main: yaml-repo/
EOT
Menentukan resource YAML
Membuat direktori untuk menyimpan definisi resource cloud dalam format yaml
mkdir yaml-repo
Buat file yaml-repo/Pulumi.yaml
dengan definisi resource berikut
- Bucket
- Binding IAM
- Objek teks dengan string "Hello World!"
- Dan beberapa 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}
Men-deploy resource
Melakukan inisialisasi dan stack konfigurasi
export PULUMI_CONFIG_PASSPHRASE=pulumi-lab
pulumi stack init dev
pulumi config set gcp:project $PROJECT_ID
Periksa konfigurasi stack dan Anda akan melihat kunci gcp:project dengan Project ID Anda sebagai nilainya
pulumi config
Pada tahap ini, struktur direktori akan terlihat seperti berikut
├── Pulumi.dev.yaml ├── Pulumi.yaml └── yaml-repo └── Pulumi.yaml
Men-deploy stack
pulumi up
Perintah ini mengevaluasi program Anda dan menentukan pembaruan sumber daya yang akan dilakukan. Pertama, pratinjau akan ditampilkan yang menguraikan perubahan yang akan dilakukan saat Anda menggunakan perintah
(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
Pilih ya dan resource akan disediakan. Output Anda akan terlihat seperti ini
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
Menjalankan perintah berikut akan mencetak output yang ditentukan
pulumi stack output
Jalankan perintah berikut untuk memverifikasi perubahan
gsutil ls $(pulumi stack output bucketName)
Output Anda akan terlihat seperti ini
(output)
gs://my-bucket-11a9046/index-object-77a5d80
4. Mengonversi YAML ke Python
Mari konversi contoh di atas menjadi program Python Pulumi
pulumi convert --language python --out ./py-repo
Memeriksa kode yang dihasilkan di 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) .......
Mengaktifkan lingkungan virtual Python
source py-repo/bin/activate
Update file project Pulumi.yaml agar mengarah ke program python. Perhatikan bahwa runtime dan entri utama telah diubah
cat <<EOT > Pulumi.yaml
name: pulumi-lab
description: Try Pulumi
runtime: python
main: py-repo/
EOT
Coba deploy ulang stack dan pilih ya
pulumi up
Seharusnya tidak ada perubahan dan output Anda akan terlihat seperti ini
(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. Menghapus resource
Menghapus resource yang dibuat
pulumi destroy
Konfirmasi Anda akan terlihat seperti ini
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. Selamat!
Selamat, kamu telah menyelesaikan lab!