במדריך הזה תלמדו איך לאחסן מצבי Terraform בקטגוריות של Cloud Storage.
כברירת מחדל, המצבים של Terraform נשמרים מקומית בקובץ בשם terraform.tfstate. ברירת המחדל הזו עלולה להקשות על צוותים להשתמש ב-Terraform כשמספר אנשים משתמשים ב-Terraform במקביל, וכל מכונה רואה את התשתית הקיימת בדרך משלה.
כדי למנוע בעיות כאלה, מוסבר כאן איך להגדיר מצב של שמירה ביעד מרוחק, שמצביע לקטגוריה של Cloud Storage. מצב של שמירה ביעד מרוחק הוא מאפיין של קצוות עורפיים של Terraform.
מטרות
במדריך הזה מוסבר איך:
- שימוש ב-Terraform כדי להקצות קטגוריה של Cloud Storage לאחסון מצב של Terraform.
- מוסיפים תבניות לקובץ ההגדרות של Terraform כדי להעביר את המצב מהקצה העורפי המקומי לקטגוריה של Cloud Storage.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.
כשמסיימים את המשימות שמתוארות במסמך הזה אפשר למחוק את המשאבים שיצרתם כדי להימנע מחיובים נוספים. מידע נוסף זמין בקטע הסרת המשאבים.
השימוש ב-Cloud Storage כרוך בעלויות של פעולות אחסון, קריאה וכתיבה, של תעבורת נתונים יוצאת (egress) ברשת ושל יצירת רפליקות.
במדריך הזה, החלוקה לגרסאות אובייקטים פועלת בקטגוריה של Cloud Storage, כדי לשמור את היסטוריית הפריסות. הפעלת החלוקה לגרסאות אובייקטים מייקרת את עלויות השימוש באחסון, אבל אפשר להוזיל אותן על ידי הגדרת ניהול מחזור החיים של אובייקטים כדי למחוק גרסאות ישנות של מצבים.
לפני שמתחילים
-
במסוף Google Cloud , מפעילים את Cloud Shell.
Terraform מותקן מראש ב-Cloud Shell.
אם אתם משתמשים במעטפת מקומית, מבצעים את הפעולות הבאות:
- מתקינים את Terraform.
-
יוצרים פרטי כניסה לאימות מקומי עבור חשבון המשתמש:
gcloud auth application-default login
אם מוחזרת שגיאת אימות ואתם משתמשים בספק זהויות חיצוני (IdP), ודאו ש נכנסתם ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
יוצרים או בוחרים 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 .
-
מפעילים את Cloud Storage API:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, נדרשת ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין של Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים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 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 בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את הפרויקט שמכיל את המשאבים, או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.
מחיקת הפרויקט
כדי לא לצבור חיובים בחשבון Google Cloud על המשאבים שבהם השתמשתם בדף הזה, פועלים לפי השלבים הבאים.
פותחים את הקובץ
main.tf.במשאב
google_storage_bucket.default, מעדכנים את הערך שלforce_destroyל-true.החלת ההגדרות המעודכנות:
terraform applyכשתופיע בקשה, כותבים
yes.מחיקת קובץ המצב:
rm backend.tfהגדרת הקצה העורפי כך שיהיה מקומי:
terraform init -migrate-stateכשתופיע בקשה, כותבים
yes.מריצים את הפקודה הבאה כדי למחוק את משאבי Terraform:
terraform destroyכשתופיע בקשה, כותבים
yes.