שיטות מומלצות לשימוש ב-DM Convert

שיטות מומלצות למעבר ל-Terraform

מדינה

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

אחרי שממירים את תבנית Deployment Manager ל-Terraform ומייבאים משאבים (אופציונלי), מומלץ לפעול לפי השלבים לאחסון המצב מרחוק ב-Cloud Storage.

מודולים

אם אתם רוצים לצמצם את המורכבות, לאכוף עקביות ולקדם שימוש חוזר בהגדרות, אתם יכולים להשתמש במודולים של Terraform כדי להגדיר קבוצות של משאבים.

כדי להשתמש במודולים, אפשר לבצע אחת מהפעולות הבאות:

ברוב תרחישי השימוש, מומלץ להשתמש במודול שפורסם.

יצירת מודול בהתאמה אישית

  1. אחרי המרת ההגדרה, מזהים את המשאבים שרוצים להעביר למודול.

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

    בדוגמה הבאה אפשר לראות איך מעבירים את google_bigquery_dataset ואת google_bigquery_table למודול:

    # bq-module/main.tf
    resource "google_bigquery_dataset" "bigquerydataset" {
      provider = google-beta
    
      default_table_expiration_ms = 36000000
      location = "us-west1"
      dataset_id = var.dataset_id
      project = var.project_id
    }
    
    resource "google_bigquery_table" "bigquerytable" {
      provider = google-beta
    
      labels = {
        data-source = "external"
        schema-type = "auto-junk"
      }
      dataset_id = var.dataset_id
      project = var.project_id
      table_id = var.table_id
    
      depends_on = [
        google_bigquery_dataset.bigquerydataset
      ]
    }
    
    # bq-module/variables.tf
    variable "project_id" {
      description = "Project ID"
      type = string
    }
    
    variable "dataset_id" {
      description = "Dataset ID"
      type = string
    }
    
    variable "table_id" {
      description = "Table ID"
      type = string
    }
    
  3. בקובץ main.tf המיוצא, מחליפים את התצורה המקורית במודול שיצרתם.

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

    # main.tf
    module "bq" {
      source = "./bq-module"
    
      project_id = "PROJECT_ID"
      dataset_id = "bigquerydataset"
      table_id   = "bigquerytable"
    }
    
  4. כדי לאתחל את המודול המקומי, מריצים את הפקודה הבאה:

    terraform init
    
  5. מעבירים את מצב Terraform שמשויך למשאבים למופע המודול.

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

    terraform state mv google_bigquery_dataset.bigquerydataset module.bq.google_bigquery_dataset.bigquerydataset
    terraform state mv google_bigquery_table.bigquerytable module.bq.google_bigquery_table.bigquerytable
    

    בדוגמה הזו, הפלט של ההעברה הוא:

    Move "google_bigquery_dataset.bigquerydataset" to "module.bq.google_bigquery_dataset.bigquerydataset"
    Successfully moved 1 object(s).
    Move "google_bigquery_table.bigquerytable" to "module.bq.google_bigquery_table.bigquerytable"
    Successfully moved 1 object(s).
    
  6. מריצים את הפקודה הבאה כדי לוודא שלא בוצעו שינויים במשאבים:

    terraform plan
    

    הדוגמה הבאה היא של הפלט שמתקבל אחרי שמריצים את הפקודה:

    No changes. Your infrastructure matches the configuration.
    

שימוש במודול שפורסם

  1. אחרי המרת ההגדרה, צריך לזהות מודול שפורסם ואת המשאבים שרוצים להעביר אליו.

  2. קוראים את המסמכים של המודול כדי לזהות את אפשרויות ההגדרה שלו.

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

    לדוגמה, אם רוצים להעביר את google_bigquery_dataset ואת google_bigquery_table אל מודול BigQuery הרשמי, הדוגמה הבאה מראה איך המודול יכול להיראות:

    module "bq" {
      source  = "terraform-google-modules/bigquery/google"
      version = "~> 5.0"
    
      project_id          = "PROJECT_ID"
      dataset_id          = "bigquerydataset"
      location            = "us-west1"
      deletion_protection = true
    
      tables = [
        {
          table_id           = "bigquerytable",
          friendly_name      = "bigquerytable"
          time_partitioning  = null,
          range_partitioning = null,
          expiration_time    = null,
          clustering         = [],
          schema             = null,
          labels = {
            data-source = "external"
            schema-type = "auto-junk"
          },
        }
      ]
    }
    
  4. כדי לאתחל את המודול המקומי, מריצים את הפקודה הבאה:

    terraform init
    
  5. קוראים את קוד המקור של המודול כדי לזהות את כתובות המשאבים במודול במעלה הזרם וליצור את פקודות move.

    terraform state mv google_bigquery_dataset.bigquerydataset  module.bq.google_bigquery_dataset.main
    terraform state mv google_bigquery_table.bigquerytable 'module.bq.google_bigquery_table.main["bigquerytable"]'
    
  6. כדי לראות את השינויים בתצורה, מריצים את הפקודה הבאה:

    terraform plan
    

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

הפעלה

מומלץ להשתמש במערכת אינטגרציה רציפה (CI), כמו Cloud Build,‏ Jenkins או GitHub Actions, כדי להריץ את Terraform באוטומציה בהיקף גדול. למידע נוסף, אפשר לעיין במאמר בנושא ניהול התשתית כקוד באמצעות Terraform, ‏Cloud Build ו-GitOps.

אם רוצים להפעיל את יצירת הטריגרים ולפשט את האימות, אפשר להשתמש בתוכנית הבסיסית Cloud Build Workspace.

מבנה

כל תצורה שהומרה מ-DM Convert היא תצורת שורש יחידה שממופה לקובץ מצב יחיד. אנחנו לא ממליצים להגדיר קובץ מצב יחיד שיכיל מספר גדול של משאבים. אחרי שממירים את ההגדרה, מומלץ לוודא שההגדרה החדשה עומדת בשיטות המומלצות למודולי בסיס.