1. סקירה כללית
בשיעור ה-Lab הזה תלמדו איך להשתמש ב-Pulumi, כלי תשתית כקוד להקצאה ולניהול של משאבים ב-Google Cloud.
מה תלמדו
בשיעור Lab זה תלמדו איך:
- התקנה והגדרה של Pulumi
- כתיבת תוכנית YAML כדי לבנות מודל של התשתית שלכם ב-Google Cloud
- הקצאה וניהול של משאבי Cloud באמצעות Pulumi
- שימוש ב-pulumi convert כדי להמיר תוכנית YAML לתוכנית Python
2. הגדרה ודרישות
הגדרת סביבה בקצב אישי
- נכנסים למסוף Google Cloud ויוצרים פרויקט חדש או משתמשים מחדש בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או חשבון Google Workspace, עליכם ליצור חשבון.
- Project name הוא השם המוצג של המשתתפים בפרויקט. זו מחרוזת תווים שלא משמשת את Google APIs. אפשר לעדכן אותו בכל שלב.
- Project ID הוא ייחודי בכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו (אי אפשר לשנות אותו אחרי שמגדירים אותו). מסוף Cloud יוצר באופן אוטומטי מחרוזת ייחודית. בדרך כלל לא משנה מה המחרוזת הזו. ברוב ה-codelabs תצטרכו להפנות למזהה הפרויקט (בדרך כלל הוא מזוהה בתור
PROJECT_ID
). אם המזהה שנוצר לא מוצא חן בעיניכם, תוכלו ליצור מזהה אקראי אחר. לחלופין, אפשר לנסות שם משלכם ולבדוק אם הוא זמין. לא ניתן לשנות את השם אחרי השלב הזה, והוא יישאר למשך כל תקופת הפרויקט. - לידיעתך, יש ערך שלישי, מספר פרויקט, שמשתמשים בו בחלק מממשקי ה-API. מידע נוסף על כל שלושת הערכים האלה זמין במסמכי התיעוד.
- בשלב הבא, כדי להשתמש במשאבים או ב-API של Cloud, תצטרכו להפעיל את החיוב במסוף Cloud. השלמת הקודלאב הזה לא אמורה לעלות הרבה, אם בכלל. כדי להשבית את המשאבים ולמנוע חיובים אחרי סיום המדריך, אפשר למחוק את המשאבים שיצרתם או למחוק את הפרויקט כולו. משתמשים חדשים ב-Google Cloud זכאים להשתתף בתוכנית תקופת ניסיון בחינם בסך 300$.
3. הגדרת התשתית
התקנה והגדרה של Pulumi
ב-Cloud Shell, מריצים את הפקודה הבאה כדי להתקין את Pulumi:
curl -fsSL https://get.pulumi.com | sh
מוסיפים את Pulumi לנתיב ומציגים את הודעת העזרה מ-Pulumi
export PATH=${PATH}:~/.pulumi/bin
# view the help message to verify pulumi runs
pulumi -h
מריצים את הפקודות הבאות כדי להגדיר את מזהה הפרויקט ולאשר את הגישה. צריך לפעול לפי ההוראות שבפקודות
export PROJECT_ID=$(gcloud config get-value project)
gcloud auth application-default login
יוצרים ב-Cloud Shell קטגוריה של GCS ומשתמשים בה כקצה עורפי
gsutil mb gs://pulumi-${PROJECT_ID}
pulumi login gs://pulumi-${PROJECT_ID}
יצירת פרויקט חדש
יוצרים את ספריית השורש של הפרויקט ב-Cloud Shell
mkdir pulumi-lab && cd pulumi-lab
הגדרת קובץ הפרויקט(נקודת הכניסה ל-Pulumi)
cat <<EOT > Pulumi.yaml
name: pulumi-lab
description: Try Pulumi
runtime: yaml
main: yaml-repo/
EOT
הגדרת משאבים ב-YAML
יצירת ספרייה לשמירת ההגדרות של משאבי ענן בפורמט yaml
mkdir yaml-repo
יוצרים את הקובץ yaml-repo/Pulumi.yaml
עם הגדרות המשאבים הבאות:
- קטגוריה
- קישור IAM
- אובייקט טקסט עם המחרוזת "Hello World! "
- וחלק מהפלט
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}
פריסת המשאבים
אתחול והגדרת סטאק
export PULUMI_CONFIG_PASSPHRASE=pulumi-lab
pulumi stack init dev
pulumi config set gcp:project $PROJECT_ID
צריך לבדוק את ההגדרות של המקבץ ולראות את המפתח gcp:project עם מזהה הפרויקט.
pulumi config
בשלב הזה, מבנה הספריות אמור להיראות כך:
├── Pulumi.dev.yaml ├── Pulumi.yaml └── yaml-repo └── Pulumi.yaml
פריסת המקבץ
pulumi up
הפקודה הזו בודקת את התוכנה וקובעת את המשאבים שצריך לבצע. קודם תוצג תצוגה מקדימה עם פירוט של השינויים שיחולו כשתבצעו את הפקודה.
(פלט)
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
צריך לבחור באפשרות כן והמשאבים יוקצו. הפלט אמור להיראות כך
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
הרצת הפקודה הבאה תדפיס את הפלט שהוגדרו
pulumi stack output
מריצים את הפקודה הבאה כדי לאמת את השינוי
gsutil ls $(pulumi stack output bucketName)
הפלט ייראה כך
(פלט)
gs://my-bucket-11a9046/index-object-77a5d80
4. המרת YAML ל-Python
נמיר את הדוגמה שלמעלה לתוכנית Python ב-Pulumi
pulumi convert --language python --out ./py-repo
בודקים את הקוד שנוצר ב-py-repo
cat py-repo/__main__.py
(פלט)
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) .......
הפעלת הסביבה הווירטואלית של Python
source py-repo/bin/activate
מעדכנים את קובץ הפרויקט Pulumi.yaml כך שיצביע על תוכנית Python. שימו לב שסביבת זמן הריצה והרשומה הראשית השתנו
cat <<EOT > Pulumi.yaml
name: pulumi-lab
description: Try Pulumi
runtime: python
main: py-repo/
EOT
מנסים לפרוס מחדש את המקבץ ולבחור באפשרות כן.
pulumi up
לא אמורים להיות שינויים, והפלט אמור להיראות כך:
(פלט)
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. מחיקת המשאבים
מחיקת המשאבים שנוצרו
pulumi destroy
האישור ייראה כך
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. מעולה!
כל הכבוד, סיימת את שיעור ה-Lab!