ייבוא משאבים שפרסתם אל Infrastructure Manager

במדריך הזה מוסבר איך לייבא משאבים לפריסה של Infrastructure Manager ב- Google Cloud . אפשר לייבא רק משאבים שהוקצו באמצעות Terraform.

אם יש לכם הגדרות Terraform ועדיין לא פרסתם אותן ב-Google Cloud, תוכלו לקרוא את המאמר פריסת תשתית באמצעות Infrastructure Manager.

במדריך הזה נתחיל בפריסת ענן וירטואלי פרטי (VPC) ב-Google Cloud באמצעות Terraform CLI. בהמשך המדריך מוסבר איך לייבא את המשאבים האלה שנפרסו אל Infrastructure Manager כדי שאפשר יהיה לנהל אותם כפריסה של Infrastructure Manager.

אפשר להשתמש בדוגמה שבמדריך הזה כדי להבין איך לייבאGoogle Cloud משאבים אחרים אל Infra Manager. כדי לייבא את הפריסה אל Infra Manager, ההגדרות של Terraform ששימשו להקצאת המשאבים צריכות לעמוד במגבלות, והמשאבים צריכים להיות מוקצים באמצעות גרסה נתמכת של Terraform.

עלויות

במדריך הזה השתמשנו ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:

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

  1. נכנסים לחשבון Google.

    אם עדיין אין חשבון, יוצרים חשבון חדש.

  2. התקינו את ה-CLI של Google Cloud.

  3. אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

  4. כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:

    gcloud init
  5. יוצרים או בוחרים Google Cloud פרויקט.

    תפקידים שנדרשים כדי לבחור או ליצור פרויקט

    • Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
    • יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (roles/resourcemanager.projectCreator), שכולל את ההרשאה resourcemanager.projects.create. איך מקצים תפקידים
    • יוצרים Google Cloud פרויקט:

      gcloud projects create PROJECT_ID

      מחליפים את PROJECT_ID בשם של פרויקט Google Cloud שיוצרים.

    • בוחרים את הפרויקט שיצרתם: Google Cloud

      gcloud config set project PROJECT_ID

      מחליפים את PROJECT_ID בשם הפרויקט ב- Google Cloud .

  6. מוודאים שהחיוב מופעל בפרויקט Google Cloud .

  7. מפעילים את Infrastructure Manager API:

    תפקידים שנדרשים להפעלת ממשקי API

    כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאה serviceusage.services.enable. איך מקצים תפקידים

    gcloud services enable config.googleapis.com
  8. מגדירים את האימות:

    1. מוודאים שיש לכם את תפקיד ה-IAM ‏Create Service Accounts ‏(roles/iam.serviceAccountCreator) ואת תפקיד ה-IAM ‏Project Admin ‏(roles/resourcemanager.projectIamAdmin). איך מקצים תפקידים
    2. יוצרים את חשבון השירות:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      מחליפים את הערך SERVICE_ACCOUNT_NAME בשם שרוצים לתת לחשבון השירות.

    3. מקצים לחשבון השירות את התפקיד roles/config.agent ב-IAM:

      gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=roles/config.agent

      מחליפים את מה שכתוב בשדות הבאים:

      • SERVICE_ACCOUNT_NAME: השם של חשבון השירות
      • PROJECT_ID: מזהה הפרויקט שבו יצרתם את חשבון השירות
  9. התקינו את ה-CLI של Google Cloud.

  10. אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

  11. כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:

    gcloud init
  12. יוצרים או בוחרים Google Cloud פרויקט.

    תפקידים שנדרשים כדי לבחור או ליצור פרויקט

    • Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
    • יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (roles/resourcemanager.projectCreator), שכולל את ההרשאה resourcemanager.projects.create. איך מקצים תפקידים
    • יוצרים Google Cloud פרויקט:

      gcloud projects create PROJECT_ID

      מחליפים את PROJECT_ID בשם של פרויקט Google Cloud שיוצרים.

    • בוחרים את הפרויקט שיצרתם: Google Cloud

      gcloud config set project PROJECT_ID

      מחליפים את PROJECT_ID בשם הפרויקט ב- Google Cloud .

  13. מוודאים שהחיוב מופעל בפרויקט Google Cloud .

  14. מפעילים את Infrastructure Manager API:

    תפקידים שנדרשים להפעלת ממשקי API

    כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאה serviceusage.services.enable. איך מקצים תפקידים

    gcloud services enable config.googleapis.com
  15. מגדירים את האימות:

    1. מוודאים שיש לכם את תפקיד ה-IAM ‏Create Service Accounts ‏(roles/iam.serviceAccountCreator) ואת תפקיד ה-IAM ‏Project Admin ‏(roles/resourcemanager.projectIamAdmin). איך מקצים תפקידים
    2. יוצרים את חשבון השירות:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      מחליפים את הערך SERVICE_ACCOUNT_NAME בשם שרוצים לתת לחשבון השירות.

    3. מקצים לחשבון השירות את התפקיד roles/config.agent ב-IAM:

      gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=roles/config.agent

      מחליפים את מה שכתוב בשדות הבאים:

      • SERVICE_ACCOUNT_NAME: השם של חשבון השירות
      • PROJECT_ID: מזהה הפרויקט שבו יצרתם את חשבון השירות
  16. מתקינים גרסה נתמכת של Terraform.

פריסת משאבים ב Google Cloud

המשאב Google Cloud שפורס במדריך הזה הוא VPC. בקטע הזה מוסבר איך פורסים את המשאב כדי להשתמש בו כדוגמה לייבוא משאבים שנפרסו אל Infra Manager.

במדריך הזה נעשה שימוש באזור us-central1. אם רוצים להשתמש באזור אחר, אפשר להשתמש בכל מיקום שבו Infra Manager פועל. ראו מיקומי Infrastructure Manager לקבלת רשימת המיקומים התקפים.

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

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

נותנים הרשאות ליצירת רשת ה-VPC, שהיא המשאב שמוגדר בתצורת Terraform:

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
    --role=roles/compute.networkAdmin

מחליפים את מה שכתוב בשדות הבאים:

  • SERVICE_ACCOUNT_NAME: השם של חשבון השירות.
  • PROJECT_ID: מזהה הפרויקט.

פריסת משאבים באמצעות Terraform CLI

  1. יוצרים רשת VPC באמצעות תצורת Terraform הבאה. כדי לעשות זאת, מריצים את הפקודה הבאה:

    mkdir vpc_to_import
    cd vpc_to_import
    cat <<EOF > main.tf
    variable "project_id" {
      type = string
    }
    
    resource "google_compute_network" "vpc_network" {
      name = "my-custom-mode-network"
      project = var.project_id
    }
    EOF
    
  2. פורסים את ההגדרה באמצעות Terraform CLI באמצעות הפקודה הבאה:

    terraform init
    echo "**************  TERRAFORM APPLY  ******************"
    terraform apply -var="project_id=PROJECT_ID" -auto-approve
    cd ..
    

כש-VPC מוקצה, מוצגת פלט שמתחיל בטקסט Creation complete.

ה-VPC שהוגדר בתצורת Terraform נפרס עכשיו ב- Google Cloud. ‫Terraform יוצר קובץ מצב, והקובץ הזה נמצא במערכת הקבצים לצד הקובץ main.tf.

יצירת פריסת placeholder ב-Infrastructure Manager

כדי לייבא משאבים ל-Infra Manager, צריך פריסה קיימת ב-Infra Manager.

במדריך הזה נעשה שימוש בקטגוריית אחסון לאחסון הגדרת Terraform. אם אתם משתמשים במדריך הזה כדי להבין איך לייבא פריסות אחרות אל Infra Manager, אתם יכולים לאחסן את ההגדרה של Terraform בקטגוריית אחסון, במאגר Git ציבורי או במחשב המקומי.

  1. מוסיפים לקטגוריית האחסון הגדרה ריקה של Terraform:

    gcloud storage buckets create gs://import-deployment-configuration --project=PROJECT_ID
    
    mkdir placeholder_deployment
    cd placeholder_deployment
    cat <<EOF > main.tf
    EOF
    
    gcloud storage cp main.tf gs://import-deployment-configuration
    cd ..
    
  2. יצירת פריסה באמצעות Infra Manager.

    gcloud infra-manager deployments apply projects/PROJECT_ID/locations/us-central1/deployments/import-deployment \
    --gcs-source gs://import-deployment-configuration \
    --input-values project_id=PROJECT_ID \
    --service-account projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT
    

    בסיום הפריסה, יוצג:

    Creating the deployment...done
    

עכשיו יש לכם פריסה של Infra Manager. לאחר מכן, צריך להוסיף את קובץ המצב ואת ההגדרות של Terraform לפריסה הזו, כדי שהפריסה הזו תנהל את ה-VPC.

ייבוא קובץ המצב וההגדרה של Terraform

כדי לנהל את המשאב שנפרס (ה-VPC) באמצעות Infra Manager, צריך להוסיף את קובץ המצב ואת ההגדרות של Terraform ל-Infra Manager.

נעילת הפריסה

נועלים את הפריסה של Infra Manager כדי שתוכלו לבצע שינויים במצב שלה.

LOCK_ID=$(gcloud infra-manager deployments lock projects/PROJECT_ID/locations/us-central1/deployments/import-deployment --format="get(lockId)")

ייבוא קובץ המצב של Terraform אל Infra Manager

מייבאים את קובץ המצב של המשאבים שפרסתם. קובץ המצב הזה נוצר על ידי Terraform כשפרסתם את ה-VPC באמצעות Terraform CLI.

מעלים את קובץ המצב של Terraform לפריסת Infra Manager.

SIGNED_STATE_UPLOAD_URL=$(gcloud infra-manager deployments import-statefile projects/PROJECT_ID/locations/us-central1/deployments/import-deployment --lock-id ${LOCK_ID} --format="get(signedUri)")
cd vpc_to_import
curl -s -X PUT --upload-file terraform.tfstate $SIGNED_STATE_UPLOAD_URL

העלאת הגדרת Terraform לקטגוריה של Cloud Storage

אחרי שמעלים את קובץ המצב של Terraform, צריך גם להעלות את ההגדרות של Terraform שבהן השתמשתם כדי ליצור את רשת ה-VPC. ל-Infra Manager דרוש קובץ המצב של Terraform כדי שכאשר מריצים תצוגה מקדימה של Infra Manager, לא יזוהו שינויים במשאבים.

מעלים את הגדרות Terraform ל-Cloud Storage באמצעות הפקודה הבאה:

gcloud storage cp main.tf gs://import-deployment-configuration

ביטול הנעילה של הפריסה

אם אתם משתמשים במדריך הזה כדי להבין איך לייבא משאבים ל-Infra Manager, חשוב לוודא שאין הבדלים בין קובץ המצב לבין הגדרת Terraform. אם יש הבדלים בין קובץ המצב לבין הגדרות Terraform, צריך לוודא שקובץ המצב מתאר את המשאבים שרוצים לפרוס. כשמבטלים את הנעילה של הפריסה, אם יש הבדלים בין קובץ המצב לבין ההגדרות של Terraform, ‏ Infra Manager יוצר או מוחק משאבים כדי להתאים לקובץ המצב.

כדי לנהל את המשאבים באמצעות Infra Manager, צריך לבטל את הנעילה של הפריסה. במדריך הזה, קובץ המצב וההגדרה של Terraform מתארים את אותה הגדרה, ולכן Infra Manager לא יוצר או מוחק משאבים.

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

gcloud infra-manager deployments unlock projects/PROJECT_ID/locations/us-central1/deployments/import-deployment \
--project PROJECT_ID \
--location us-central1 \
--lock-id ${LOCK_ID}

אחרי שמוסיפים את קובץ המצב ואת ההגדרות של Terraform לפריסה של Infra Manager, מסיימים לייבא את המשאבים שנפרסו. ה-VPC שנפרס מנוהל עכשיו על ידי Infra Manager.

תצוגה מקדימה של שינויים במשאבים

מריצים תצוגה מקדימה של הפריסה כדי לוודא שהסטטוס של Terraform והמשאבים שנפרסו ב- Google Cloud מסונכרנים.

  1. יוצרים תצוגה מקדימה באמצעות הפקודה הבאה:

    gcloud infra-manager previews create projects/PROJECT_ID/locations/us-central1/previews/IMPORT_DEPLOYMENT_PREVIEW_NAME \
    --gcs-source gs://import-deployment-configuration \
    --deployment projects/PROJECT_ID/locations/us-central1/deployments/import-deployment \
    --service-account projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
    --location us-central1
    
  2. כדאי לבדוק את פרטי התצוגה המקדימה כדי לוודא שהיא הסתיימה בהצלחה.

    gcloud infra-manager previews describe projects/PROJECT_ID/locations/us-central1/previews/IMPORT_DEPLOYMENT_PREVIEW_NAME
    
  3. מייצאים את התצוגה המקדימה כדי לבדוק את השינויים.

    SIGNED_BIN_PLAN_URL=$(gcloud infra-manager previews export projects/PROJECT_ID/locations/us-central1/previews/IMPORT_DEPLOYMENT_PREVIEW_NAME --format "get(result.binarySignedUri)")
    curl -X GET --output tfplan.out $SIGNED_BIN_PLAN_URL
    
  4. מוודאים שההגדרה קיימת באופן מקומי ושהיא אותחלה באמצעות הפקודה הבאה:

    terraform init
    
  5. מריצים את הפקודה Terraform show כדי לבדוק את השינויים בין מצב הפריסה של Infrastructure Manager לבין ההגדרה.

    terraform show tfplan.out
    

אם משאב ה-VPC ב- Google Cloud וקובץ המצב מסונכרנים, הפלט של terraform show יהיה הבא, ויאמת שלא חלו שינויים בין מצב הפריסה לבין ההגדרה ב-Infrastructure Manager. הפלט אמור להיראות כך:

No changes. Your infrastructure matches the configuration.

Terraform has compared your real infrastructure against your configuration and found no differences, so no changes are needed.

עכשיו ייבאתם את המשאבים שנפרסו כך שהם מנוהלים על ידי Infra Manager. לדוגמה, עכשיו אפשר להשתמש ב-Infra Manager כדי לעדכן את הפריסה.

אפשר גם לעדכן את הפריסה כדי לוודא שהפריסה יובאה בהצלחה אל Infra Manager.

הסרת המשאבים

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

מחיקת הפרויקט

    כדי למחוק Google Cloud פרויקט:

    gcloud projects delete PROJECT_ID

מחיקת משאבים בודדים

מוחקים את ה-VPC ואת המטא-נתונים של הפריסה:

gcloud infra-manager deployments delete projects/PROJECT_ID/locations/us-central1/deployments/quickstart-deployment

המאמרים הבאים