שיטות מומלצות למעבר ל-Terraform
מדינה
קובץ המצב מכיל מידע על המשאבים שמנוהלים על ידי Terraform. כברירת מחדל, המצבים של Terraform נשמרים מקומית בדיסק. אם מאחסנים את המצב מרחוק, אפשר לאפשר שיתוף פעולה מבוזר, להגן על מידע רגיש ולהפעיל את Terraform בשילוב רציף (CI).
אחרי שממירים את תבנית Deployment Manager ל-Terraform ומייבאים משאבים (אופציונלי), מומלץ לפעול לפי השלבים לאחסון המצב מרחוק ב-Cloud Storage.
מודולים
אם אתם רוצים לצמצם את המורכבות, לאכוף עקביות ולקדם שימוש חוזר בהגדרות, אתם יכולים להשתמש במודולים של Terraform כדי להגדיר קבוצות של משאבים.
כדי להשתמש במודולים, אפשר לבצע אחת מהפעולות הבאות:
יוצרים מודול בהתאמה אישית מהמשאבים שיוצאו על ידי DM Convert. כך תקבלו את הגמישות המרבית.
להשתמש במודול שפורסם מתוך אוסף המודולים הרשמיים של Google Cloudאו מתוך המרשם של Terraform.
ברוב תרחישי השימוש, מומלץ להשתמש במודול שפורסם.
יצירת מודול בהתאמה אישית
אחרי המרת ההגדרה, מזהים את המשאבים שרוצים להעביר למודול.
מעבירים את ההגדרות של המשאבים האלה לספריית מודולים וממירים את המשתנים הנדרשים לפרמטרים.
בדוגמה הבאה אפשר לראות איך מעבירים את
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 }בקובץ
main.tfהמיוצא, מחליפים את התצורה המקורית במודול שיצרתם.בדוגמה הבאה מוצג החלפה כזו באמצעות המודול שנוצר בדוגמה מהשלב הקודם.
# main.tf module "bq" { source = "./bq-module" project_id = "PROJECT_ID" dataset_id = "bigquerydataset" table_id = "bigquerytable" }כדי לאתחל את המודול המקומי, מריצים את הפקודה הבאה:
terraform initמעבירים את מצב 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).מריצים את הפקודה הבאה כדי לוודא שלא בוצעו שינויים במשאבים:
terraform planהדוגמה הבאה היא של הפלט שמתקבל אחרי שמריצים את הפקודה:
No changes. Your infrastructure matches the configuration.
שימוש במודול שפורסם
אחרי המרת ההגדרה, צריך לזהות מודול שפורסם ואת המשאבים שרוצים להעביר אליו.
קוראים את המסמכים של המודול כדי לזהות את אפשרויות ההגדרה שלו.
יצירת מופע של המודול שהוגדר בהתאם להגדרת המשאבים הנוכחית.
לדוגמה, אם רוצים להעביר את
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" }, } ] }כדי לאתחל את המודול המקומי, מריצים את הפקודה הבאה:
terraform initקוראים את קוד המקור של המודול כדי לזהות את כתובות המשאבים במודול במעלה הזרם וליצור את פקודות 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"]'כדי לראות את השינויים בתצורה, מריצים את הפקודה הבאה:
terraform plan
אם למודול שפורסם שבחרתם יש הגדרות ברירת מחדל שונות או שהוא מוגדר באופן שונה מההגדרה שלכם, יכול להיות שתראו הבדלים מודגשים בפלט של הפעלת הפקודה.
הפעלה
מומלץ להשתמש במערכת אינטגרציה רציפה (CI), כמו Cloud Build, Jenkins או GitHub Actions, כדי להריץ את Terraform באוטומציה בהיקף גדול. למידע נוסף, אפשר לעיין במאמר בנושא ניהול התשתית כקוד באמצעות Terraform, Cloud Build ו-GitOps.
אם רוצים להפעיל את יצירת הטריגרים ולפשט את האימות, אפשר להשתמש בתוכנית הבסיסית Cloud Build Workspace.
מבנה
כל תצורה שהומרה מ-DM Convert היא תצורת שורש יחידה שממופה לקובץ מצב יחיד. אנחנו לא ממליצים להגדיר קובץ מצב יחיד שיכיל מספר גדול של משאבים. אחרי שממירים את ההגדרה, מומלץ לוודא שההגדרה החדשה עומדת בשיטות המומלצות למודולי בסיס.