ייצוא משאבים של Google Cloud לפורמט של Terraform

פרסתם משאבים ב- Google Cloudועכשיו אתם צריכים לנהל את התשתית כקוד (IaC) באמצעות Terraform. Google מספקת כלי שבעזרתו תוכלו ליצור קוד Terraform למשאבים בפרויקט, בתיקייה או בארגון.

תפקידים

כדי לקבל את ההרשאות שדרושות לייצוא נכסים ל-Terraform, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בארגון, בתיקייה או בפרויקט:

להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.

לפני שמתחילים

  • מכינים את 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

כתיבת הפלט במבנה של ספרייה

  1. אם עדיין לא יצרתם את הספרייה שאליה תרצו לייצא את הגדרות הפרויקט, תצטרכו ליצור אותה:

    mkdir OUTPUT_DIRECTORY
    
  2. עכשיו מייצאים את כל הגדרות הפרויקט לספרייה:

    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

שימוש בקובץ כדי לציין את סוגי המשאבים לייצוא

  1. יוצרים ספרייה בשם tf-output.

    cd && mkdir tf-output && cd tf-output
    
  2. יוצרים קובץ בשם types.txt ומוסיפים רשימה של סוגי משאבים. לדוגמה:

    ComputeBackendBucket
    ComputeBackendService
    ComputeForwardingRule
    
  3. מריצים את הפקודה 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."‎

חשוב לוודא שפעלתם בדיוק לפי ההוראות בקטע לפני שמתחילים.

השלבים הבאים