אחסון מצבי Terraform בקטגוריות של Cloud Storage

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

במדריך הזה תלמדו איך לאחסן מצבי Terraform בקטגוריות של Cloud Storage.

כברירת מחדל, המצבים של Terraform נשמרים מקומית בקובץ בשם terraform.tfstate. ברירת המחדל הזו עלולה להקשות על צוותים להשתמש ב-Terraform כשמספר אנשים משתמשים ב-Terraform במקביל, וכל מכונה רואה את התשתית הקיימת בדרך משלה.

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

עלויות

השימוש ב-Cloud Storage כרוך בעלויות של פעולות אחסון, קריאה וכתיבה, של תעבורת נתונים יוצאת (egress) ברשת ושל יצירת רפליקות.

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

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

  1. חשוב לוודא שיש לכם את ההרשאות הנדרשות ל-Cloud Storage בחשבון המשתמש:
    • storage.buckets.create
    • storage.buckets.list
    • storage.objects.get
    • storage.objects.create
    • storage.objects.delete
    • storage.objects.update

    כניסה לדף IAM

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

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

  2. מפעילים את Cloud Shell.

    ‏Cloud Shell היא מכונה וירטואלית ב-Compute Engine. פרטי הכניסה לשירות שמשויכים למכונה הווירטואלית נוצרים אוטומטית, כך שלא צריך ליצור או להוריד מפתח לחשבון שירות.

  3. מפעילים את Cloud Storage API:

    gcloud services enable storage.googleapis.com
    

הגדרת Terraform לאחסון מצבים בקטגוריות של Cloud Storage

בשלבים הבאים תיצרו קטגוריה של Cloud Storage ותשנו את ההגדרות של הקצה העורפי לקטגוריה החדשה ולפרויקט שלכם ב-Google Cloud.

יצירת הקטגוריה

  1. מוסיפים את המשאב google_storage_bucket הבא של Terraform לקובץ תצורה של Terraform, כמו main.tf.

    resource "google_storage_bucket" "default" {
      name          = "bucket-tfstate"
      force_destroy = false
      location      = "US"
      storage_class = "STANDARD"
      versioning {
        enabled = true
      }
    }

    בקטע הקוד, השדה location הוא US בתוך הקוד (כלומר, תיווצר קטגוריה רב-אזורית בארה"ב). אתם יכולים לשנות את השדה הזה לכל מיקום שתרצו.

  2. מריצים את הפקודה terraform apply כדי ליצור את קטגוריית האחסון.

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

בחירת שם ייחודי לקטגוריה

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

// Terraform plugin for creating random IDs
resource "random_id" "instance_id" {
  byte_length = 8
}

אחר כך תוכלו להשתמש במזהה הרנדומלי במאפיין הקטגוריה name.

resource "google_storage_bucket" "default" {
  name = "bucket-tfstate-${random_id.instance_id.hex}"
  ...
}

נסו להריץ שוב את הפקודה terraform apply.

שינוי התצורה של הקצה העורפי

  1. מוסיפים את הטקסט הבא לקובץ תצורה חדש של Terraform בשם backend.tf.

    terraform {
     backend "gcs" {
       bucket  = "BUCKET_NAME"
       prefix  = "terraform/state"
     }
    }
    

    חשוב להחליף את BUCKET_NAME בשם של הקטגוריה החדשה של Cloud Storage.

  2. מריצים את הפקודה terraform init כדי להגדיר את הקצה העורפי של Terraform.

    מערכת Terraform תזהה שכבר קיים קובץ מצב מקומי, ותוצג שאלה אם אתם רוצים להעתיק אותו לקטגוריה החדשה של Cloud Storage. כדי לעשות זאת, כותבים yes.

אחרי הרצת הפקודה הזו, המצב של Terraform יאוחסן בקטגוריה החדשה של Cloud Storage. לפני הרצת פקודות, המצב העדכני של Terraform יישלף מהקטגוריה הזו, ואחרי הרצת פקודות המצב העדכני יישמר בקטגוריה.

השלבים הבאים