פרסתם משאבים ב- Google Cloudועכשיו אתם צריכים לנהל את התשתית כקוד (IaC) באמצעות Terraform. Google מספקת כלי שבעזרתו תוכלו ליצור קוד Terraform למשאבים בפרויקט, בתיקייה או בארגון.
תפקידים
כדי לקבל את ההרשאות שדרושות לייצוא נכסים ל-Terraform, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בארגון, בתיקייה או בפרויקט:
-
צרכן של שימוש בשירות (
roles/serviceusage.serviceUsageConsumer) -
אם כותבים את הסטטוס לדלי קיים (
--storage-path=BUCKET):-
יצירת אובייקטים באחסון (
roles/storage.objectCreator) -
צפייה באובייקטים באחסון (
roles/storage.objectViewer)
-
יצירת אובייקטים באחסון (
-
אם כותבים את הסטטוס לדלי חדש:
צפייה באובייקטים באחסון (
roles/storage.objectViewer)
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
לפני שמתחילים
מכינים את Cloud Shell.
מפעילים את Cloud Shell ומגדירים את פרויקט ברירת המחדל שבו רוצים ליצור את הקוד של Terraform למשאבים שנפרסו. Google Cloud
תצטרכו להריץ את הפקודה הזו רק פעם אחת לכל פרויקט, ותוכלו לעשות זאת בכל ספרייה.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
אם תגדירו ערכים ספציפיים בקובץ התצורה של Terraform הם יבטלו את ערכי ברירת המחדל של משתני הסביבה.
מתקינים ב-Cloud Shell את ממשק שורת הפקודה (CLI) ב-Config Connector.
gcloud components install config-connector
באמצעות Config Connector תוכלו להשתמש בכלי של Google Cloudלייצוא בכמות גדולה ב-Terraform.
אם רואים
ERROR: (gcloud.components.install) You cannot perform this action because the Google Cloud CLI component manager is disabled for this installation, מריצים את הפקודה הבאה:sudo apt-get install google-cloud-sdk-config-connector
מפעילים את Cloud Asset API.
gcloud services enable cloudasset.googleapis.com
יוצרים חשבון שירות לשימוש בייצוא הזה:
gcloud beta services identity create --service=cloudasset.googleapis.com
מוודאים שלסוכן השירות ב-Cloud Asset (
gcp-sa-cloudasset.iam.gserviceaccount.com) מוקצה התפקידroles/servicenetworking.serviceAgent:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com \ --role=roles/servicenetworking.serviceAgent
מוודאים שלסוכן השירות ב-Cloud Asset (
gcp-sa-cloudasset.iam.gserviceaccount.com) מוקצה התפקידroles/storage.objectAdmin:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com \ --role=roles/storage.objectAdmin
מגבלות
אי אפשר לייצא חלק מסוגי המשאבים לפורמט של Terraform, למרות שהם נתמכים על ידי Terraform Google. כדי לראות אילו סוגי משאבים אפשר לייצא לפורמט של Terraform, תוכלו להריץ את הפקודה gcloud beta resource-config list-resource-types.
ייצוא של כל הגדרות הפרויקט לקוד HCL של Terraform
הפקודה gcloud beta resource-config bulk-export --resource-format=terraform גורמת לייצוא של משאבים שמוגדרים בפרויקט, בתיקייה או בארגון, ולהדפסת המשאבים במסך בפורמט של קוד HCL.
gcloud beta resource-config bulk-export \ --project=PROJECT_ID \ --resource-format=terraform
כתיבת הפלט במבנה של ספרייה
אם עדיין לא יצרתם את הספרייה שאליה תרצו לייצא את הגדרות הפרויקט, תצטרכו ליצור אותה:
mkdir OUTPUT_DIRECTORY
עכשיו מייצאים את כל הגדרות הפרויקט לספרייה:
gcloud beta resource-config bulk-export \ --path=OUTPUT_DIRECTORY \ --project=PROJECT_ID \ --resource-format=terraform
הדגל
--pathמציין את המיקום ליצירת הפלט של קוד ה-HCL.
לאחר הרצת הפקודה, קוד ה-HCL שמתקבל מכל משאב נוצר כפלט בקובץ .tf נפרד במבנה הספרייה הבא:
OUTPUT_DIRECTORY/projects/PROJECT_ID/RESOURCE_TYPE
כתיבת הפלט בקובץ יחיד
אם לא רוצים להדפיס את הפלט למסך או ליצור קובצי .tf נפרדים, אפשר לכתוב את כל הפלט בקובץ אחד, כפי שמופיע בדוגמה הבאה:
gcloud beta resource-config bulk-export \ --resource-format=terraform \ --project=PROJECT_ID \ >> gcp_resources.tf
סינון הפלט
סינון הפלט של הפקודה לייצוא בכמות גדולה על ידי ציון סוגי המשאבים.
פירוט של סוגי המשאבים הנתמכים שלפיהם יתבצע הסינון
כדי לראות אילו סוגי משאבים אפשר לייצא לפורמט של Terraform, תוכלו להריץ את הפקודה gcloud beta resource-config list-resource-types:
gcloud beta resource-config list-resource-types
אפשר גם לכתוב את הפלט בקובץ:
gcloud beta resource-config list-resource-types >> strings.txt
סוג המשאב במכונות הווירטואליות של Compute Engine מופיע בפלט בצורה הבאה:
KRM KIND: ComputeInstance
אפשר להתעלם מהקידומת KRM KIND:.
ייצוא של סוג משאב אחד
כדי לייצא סוגי משאבים ספציפיים לפרויקט בפורמט קוד HCL, משתמשים במחרוזת כמו ComputeInstance:
gcloud beta resource-config bulk-export \ --resource-types=RESOURCE_TYPE \ --project=PROJECT_ID \ --resource-format=terraform
הדגל --resource-types מציין את סוג המשאב שיתקבל כפלט.
ייצוא של מספר סוגי משאבים
מייצאים מכונות וירטואליות וכללים של חומת אש בפורמט של קוד HCL:
gcloud beta resource-config bulk-export \ --resource-types=ComputeFirewall,ComputeInstance \ --project=PROJECT_ID \ --resource-format=terraform
שימוש בקובץ כדי לציין את סוגי המשאבים לייצוא
יוצרים ספרייה בשם
tf-output.cd && mkdir tf-output && cd tf-output
יוצרים קובץ בשם
types.txtומוסיפים רשימה של סוגי משאבים. לדוגמה:ComputeBackendBucket ComputeBackendService ComputeForwardingRule
מריצים את הפקודה
gcloud beta resource-config bulk-exportעם הדגל--resource-types-file:gcloud beta resource-config bulk-export \ --resource-types-file=types.txt \ --path=tf-output \ --project=PROJECT_ID \ --resource-format=terraform
אם הפרויקט לא כולל אף סוג של משאב מסוים, הפקודה תפעל ללא שגיאות אבל לא יתקבל פלט עבור אותו סוג המשאב.
פתרון בעיות
אם הודעת השגיאה הבאה מופיעה:
"Permission denied during export. Please ensure the Cloud Asset Inventory API is enabled."
חשוב לוודא שפעלתם בדיוק לפי ההוראות בקטע לפני שמתחילים.
השלבים הבאים
- ייבוא משאבים למצב של Terraform. Google Cloud