במדריך הזה תלמדו איך לאחסן מצבי Terraform בקטגוריות של Cloud Storage.
כברירת מחדל, המצבים של Terraform נשמרים מקומית בקובץ בשם terraform.tfstate. ברירת המחדל הזו עלולה להקשות על צוותים להשתמש ב-Terraform כשמספר אנשים משתמשים ב-Terraform במקביל, וכל מכונה רואה את התשתית הקיימת בדרך משלה.
כדי למנוע בעיות כאלה, מוסבר כאן איך להגדיר מצב של שמירה ביעד מרוחק, שמצביע לקטגוריה של Cloud Storage. מצב של שמירה ביעד מרוחק הוא מאפיין של קצוות עורפיים של Terraform.
מטרות
במדריך הזה מוסבר איך:
- שימוש ב-Terraform כדי להקצות קטגוריה של Cloud Storage לאחסון מצב של Terraform.
- מוסיפים תבניות לקובץ ההגדרות של Terraform כדי להעביר את המצב מהקצה העורפי המקומי לקטגוריה של Cloud Storage.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Cloud de Confiance by S3NS, והשימוש בהם כרוך בתשלום:
כשמסיימים את המשימות שמתוארות במסמך הזה אפשר למחוק את המשאבים שיצרתם כדי להימנע מחיובים נוספים. מידע נוסף זמין בקטע הסרת המשאבים.
השימוש ב-Cloud Storage כרוך בעלויות של פעולות אחסון, קריאה וכתיבה, של תעבורת נתונים יוצאת (egress) ברשת ושל יצירת רפליקות.
במדריך הזה, החלוקה לגרסאות אובייקטים פועלת בקטגוריה של Cloud Storage, כדי לשמור את היסטוריית הפריסות. הפעלת החלוקה לגרסאות אובייקטים מייקרת את עלויות השימוש באחסון, אבל אפשר להוזיל אותן על ידי הגדרת ניהול מחזור החיים של אובייקטים כדי למחוק גרסאות ישנות של מצבים.
לפני שמתחילים
-
במסוף Cloud de Confiance , מפעילים את Cloud Shell.
Terraform מותקן מראש ב-Cloud Shell.
אם אתם משתמשים במעטפת מקומית, מבצעים את הפעולות הבאות:
- מתקינים את Terraform.
-
יוצרים פרטי כניסה לאימות מקומי עבור חשבון המשתמש:
gcloud auth application-default login
אם מוחזרת שגיאת אימות ואתם משתמשים בספק זהויות חיצוני (IdP), ודאו ש נכנסתם ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
יוצרים או בוחרים Cloud de Confiance פרויקט.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
יוצרים Cloud de Confiance פרויקט:
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של פרויקט Cloud de Confiance שיוצרים. -
בוחרים את הפרויקט שיצרתם: Cloud de Confiance
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Cloud de Confiance .
-
מפעילים את Cloud Storage API:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידיםgcloud services enable storage.googleapis.com
-
מעניקים תפקידים לחשבון המשתמש. מריצים את הפקודה הבאה לכל אחד מהתפקידים הבאים ב-IAM:
roles/storage.admingcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט. -
USER_IDENTIFIER: המזהה של חשבון המשתמש חשבון. דוגמאות מופיעות במאמר ייצוג המשתמשים במאגרי כוח עבודה בכללי מדיניות IAM. -
ROLE: תפקיד ה-IAM שאתם מקצים לחשבון המשתמש.
לחלופין, אפשר ליצור תפקיד IAM בהתאמה אישית שכולל את ההרשאות הבאות:
storage.buckets.createstorage.buckets.liststorage.objects.getstorage.objects.createstorage.objects.deletestorage.objects.update
מומלץ להגביל את הגישה לקטגוריה ולקובצי המצבים שמאוחסנים בה, כך שרק לקבוצה קטנה של משתמשים יהיו הרשאות ניהול בקטגוריה (למשל, האדמין הראשי בענן ומי שמגבה אותו). המפתחים צריכים לקבל רק הרשאות של כתיבה וקריאה לאובייקטים שבקטגוריה.
-
הכנת הסביבה
משכפלים את מאגר GitHub שמכיל דוגמאות ל-Terraform:
git clone https://github.com/terraform-google-modules/terraform-docs-samples.git --single-branchעוברים לספריית העבודה:
cd terraform-docs-samples/storage/remote_terraform_backend_template
סקירת קובצי Terraform
בודקים את הקובץ
main.tf:cat main.tfהפלט אמור להיראות כך:
בקובץ הזה מתוארים המשאבים הבאים:
-
random_id: התוסף הזה מצורף לשם הקטגוריה של Cloud Storage כדי להבטיח שהשם יהיה ייחודי. -
google_storage_bucket: הקטגוריה של Cloud Storage שבה יישמר קובץ המצב. הקטגוריה הזו מוגדרת עם המאפיינים הבאים:- הערך של
force_destroyמוגדר ל-falseכדי לוודא שהקטגוריה לא תימחק אם יש בה אובייקטים. כך אפשר לוודא שפרטי המצב בדלי לא יימחקו בטעות. - האילוץ
public_access_preventionמוגדר לערךenforcedכדי לוודא שהתוכן של הקטגוריה לא ייחשף בטעות לציבור. - הערך של
uniform_bucket_level_accessמוגדר כ-trueכדי לאפשר שליטה בגישה לקטגוריה ולתוכן שלה באמצעות הרשאות IAM במקום רשימות של בקרת גישה. -
versioningמופעל כדי להבטיח שגרסאות קודמות של המצב יישמרו בקטגוריית הקצה העורפי.
- הערך של
-
local_file: קובץ מקומי. התוכן של הקובץ הזה מורה ל-Terraform להשתמש בקטגוריית Cloud Storage כבק-אנד מרוחק אחרי שהקטגוריה נוצרת.
-
עדכון התצורה של הקצה העורפי
כשמשתמשים ב- Cloud de Confiance by S3NS, צריך לעדכן את הקובץ המשוכפל main.tf בסביבה הריבונית לפני הקצאת המשאבים, כדי לוודא שההפניה לנקודת הקצה המותאמת אישית של האחסון תהיה לאחד מהיקומים שבהם אתם משתמשים.
ב-PREMI3NS, מבצעים את העדכונים הבאים ב-main.tf:
מגדירים את המיקום
locationב-google_storage_bucketלמיקום אזורי תקף:location = "u-france-east1"מעדכנים את המשאב
local_fileשמכיל את הבלוקbackendשנוצר כדי לכלול את הפרמטרstorage_custom_endpoint:resource "local_file" "default" { file_permission = "0644" filename = "${path.module}/backend.tf" content = <<-EOT terraform { backend "gcs" { bucket = "${google_storage_bucket.default.name}" prefix = "terraform/state" storage_custom_endpoint = "https://storage.s3nsapis.fr/storage/v1/" } } EOT }
הקצאת קטגוריה של Cloud Storage
מאתחלים את Terraform:
terraform initכשמריצים את הפקודה
terraform initבפעם הראשונה, הקטגוריה של Cloud Storage שצוינה בקובץmain.tfעדיין לא קיימת, ולכן Terraform מאתחל קצה עורפי מקומי כדי לאחסן את המצב במערכת הקבצים המקומית.מחילים את התצורה כדי להקצות את המשאבים שמתוארים בקובץ
main.tf:terraform applyכשתופיע בקשה, כותבים
yes.כשמריצים את הפקודה
terraform applyבפעם הראשונה, Terraform מקצה את קטגוריית Cloud Storage לאחסון המצב. הפקודה גם יוצרת קובץ מקומי. התוכן של הקובץ הזה מורה ל-Terraform להשתמש בקטגוריה של Cloud Storage כקצה עורפי מרוחק לאחסון המצב.
העברת מצב לקטגוריה של Cloud Storage
מעבירים את המצב של Terraform אל קצה העורפי המרוחק של Cloud Storage:
terraform init -migrate-stateמערכת Terraform תזהה שכבר קיים קובץ מצב מקומי, ותוצג שאלה אם אתם רוצים להעביר את המצב לקטגוריה החדשה של Cloud Storage. כשמופיעה בקשה, כותבים
yes.
אחרי הרצת הפקודה הזו, המצב של Terraform יאוחסן בקטגוריה החדשה של Cloud Storage. לפני הרצת פקודות, המצב העדכני של Terraform יישלף מהקטגוריה הזו, ואחרי הרצת פקודות המצב העדכני יישמר בקטגוריה.
הסרת המשאבים
כדי להימנע מחיובים בחשבון Google Cloud בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את הפרויקט שמכיל את המשאבים, או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.
מחיקת הפרויקט
כדי לא לצבור חיובים בחשבון Cloud de Confiance על המשאבים שבהם השתמשתם בדף הזה, פועלים לפי השלבים הבאים.
פותחים את הקובץ
main.tf.במשאב
google_storage_bucket.default, מעדכנים את הערך שלforce_destroyל-true.החלת ההגדרות המעודכנות:
terraform applyכשתופיע בקשה, כותבים
yes.מוחקים את קובץ המצב:
rm backend.tfמגדירים מחדש את הקצה העורפי כך שיהיה מקומי:
terraform init -migrate-stateכשתופיע בקשה, כותבים
yes.מריצים את הפקודה הבאה כדי למחוק את משאבי Terraform:
terraform destroyכשתופיע בקשה, כותבים
yes.