במדריך הזה תלמדו איך לאחסן מצבי 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, כדי לשמור את היסטוריית הפריסות. הפעלת החלוקה לגרסאות אובייקטים מייקרת את עלויות השימוש באחסון, אבל אפשר להוזיל אותן על ידי הגדרת ניהול מחזור החיים של אובייקטים כדי למחוק גרסאות ישנות של מצבים.
לפני שמתחילים
-
In the Google Cloud console, activate Cloud Shell.
Terraform מותקן מראש ב-Cloud Shell.
אם אתם משתמשים במעטפת מקומית, מבצעים את הפעולות הבאות:
- מתקינים את Terraform.
-
Create local authentication credentials for your user account:
gcloud auth application-default login
If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.
-
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_IDwith a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_IDwith your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Storage API:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.gcloud services enable storage.googleapis.com
-
Grant roles to your user account. Run the following command once for each of the following IAM roles:
roles/storage.admingcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
Replace the following:
PROJECT_ID: Your project ID.USER_IDENTIFIER: The identifier for your user account. For examples, see Represent workforce pool users in IAM policies.ROLE: The IAM role that you grant to your user account.
לחלופין, אפשר ליצור תפקיד 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 כדי להבטיח שם ייחודי לקטגוריה של 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.
המאמרים הבאים