1. סקירה כללית
בשיעור ה-Lab הזה תלמדו איך להשתמש ב-Pulumi, כלי תשתית כקוד להקצאה ולניהול של משאבים ב-Google Cloud.
מה תלמדו
בשיעור Lab זה תלמדו איך:
- התקנה והגדרה של Pulumi
- כתיבת תוכנית YAML כדי לבנות מודל של התשתית שלכם ב-Google Cloud
- הקצאה וניהול של משאבים בענן באמצעות Pulumi
- שימוש בהמרת pulumi כדי להמיר תוכנית YAML לתוכנת python
2. הגדרה ודרישות
הגדרת סביבה בקצב אישי
- נכנסים למסוף Google Cloud ויוצרים פרויקט חדש או עושים שימוש חוזר בפרויקט קיים. אם אין לכם עדיין חשבון Gmail או חשבון Google Workspace, עליכם ליצור חשבון.
- Project name הוא השם המוצג של המשתתפים בפרויקט. זו מחרוזת תווים שלא משמשת את Google APIs. אפשר לעדכן אותו בכל שלב.
- Project ID הוא ייחודי בכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו (אי אפשר לשנות אותו אחרי שמגדירים אותו). מסוף Cloud יוצר מחרוזת ייחודית באופן אוטומטי; בדרך כלל לא מעניין אותך מה זה. ברוב ה-Codelabs תצטרכו להפנות אל מזהה הפרויקט (בדרך כלל הוא מזוהה כ-
PROJECT_ID
). אם המזהה שנוצר לא מוצא חן בעיניך, יש לך אפשרות ליצור מזהה אקראי אחר. לחלופין, אפשר לנסות תבנית משלך ולבדוק אם היא זמינה. לא ניתן לשנות אותו אחרי השלב הזה, והוא יישאר למשך הפרויקט. - לידיעתך, יש ערך שלישי – Project Number (מספר פרויקט), שחלק מממשקי ה-API משתמשים בו. מידע נוסף על כל שלושת הערכים האלה זמין במסמכי התיעוד.
- בשלב הבא צריך להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים או בממשקי API של Cloud. מעבר ב-Codelab הזה לא אמור לעלות הרבה, אם בכלל. כדי להשבית את המשאבים ולא לצבור חיובים מעבר למדריך הזה, אתם יכולים למחוק את המשאבים שיצרתם או למחוק את הפרויקט כולו. משתמשים חדשים ב-Google Cloud זכאים להצטרף לתוכנית תקופת ניסיון בחינם בשווי 1,200 ש"ח.
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
נמיר את הדוגמה שלמעלה לתוכנת Pulumi Python
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