איך להשתמש בבלוק יבוא Terraform לייבוא משאבים

עם Terraform 1.5 ואילך, ניתן להשתמש בבלוק import כדי לנהל את יבוא המשאבים ישירות בתצורה שלך. תכונה זו מקלה על תהליך ייבוא התשתיות הקיימות לתחום הפעולה של Terraform, ומסירה את הצורך בפקודת CLI נפרדת terraform import.

במאמר זה, אנו מסבירים את בלוק היבוא וכיצד להשתמש בו כדי לייבא משאבים שונים.

מהו בלוק ייבוא של Terraform?

בלוק היבוא של Terraform שנכנס ב-Terraform v1.5.0 מספק גישה פורמלית לייבוא משאבים קיימים של תשתיות לקובץ מצב של Terraform. זה מאפשר לייבא משאבים להפוך לחלק בלתי נפרד מתהליך התכנון של Terraform – כגון משאבים מנוהלים אחרים – במקום להתייחס אליהם כפעולת מצב ישירה. 

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

התחביר עבור בלוק import ב-Terraform הוא כדלקמן:

Plain Text

 

  • to: מציין את כתובת המשאב בתצורתך שבה יתוודע המשאב המיובא.
  • id: מגדיר את המזהה הייחודי של המשאב הקיים ב-API של הספק. ודא שהספק Terraform שלך מוגדר כראוי לגישה למשאב המיובא.

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

בלוק ייבוא מול פקודת ייבוא של Terraform

בלוק import בTerraform מאפשר לך להגדיר משאבים ישירות בקובץ התצורה שלך, מה שמפשט את ניהול התשתית הקיימת.

בניגוד לכך, כאשר פקודת terraform import משמשת ללא בלוק import, היא מקשרת משאב קיים למצב של Terraform אך לא מייצרת אוטומטית את התצורה המתאימה בקוד שלך. עליך להוסיף את התצורה הזו באופן ידני לאחר מכן. פקודת הייבוא שימושית במיוחד לייבוא חד פעמי או למעבר תשתיות לניהול Terraform.

שתי השיטות דורשות טיפול זהיר כדי להבטיח עקביות בין מצב Terraform לתשתית בפועל. בלוקי Import מתאימים בדרך כלל לניהול משאבים מתמשך, בעוד שהפקודה העצמאית מתאימה היטב לייבוא מזדמן.

דוגמה 1: שימוש בבלוק הייבוא של Terraform כדי לייבא דלת S3

נניח שיש לנו דלת AWS S3 קיימת (my-existing-bucket) שברצונך לנהל עם Terraform.

בלוק המשאב מגדיר את דלת ה-S3 (aws_s3_bucket.example) והמאפיין bucket מגדיר את שם הדלת הקיימת:

Plain Text

 

הבלוק import מקשר את דלת ה-S3 הקיימת למשאב של Terraform.

  • to: ממפה את המשאב המיובא לכתובת של בלוק המשאב (aws_s3_bucket.example)
  • id: מציין את זיהוי היחודי של הדלת (my-existing-bucket).

כאשר אתה מריץ terraform plan, Terraform קורא את בלוק הייבוא, בודק את מצב הדלת הקיימת של S3, ומציג תצוגה מקדימה של השינויים שהוא יעשה בקובץ המצב. לאחר מכן, לאחר שנריץ terraform apply, Terraform מעדכן את קובץ המצב כך שיכלול את הדלת הקיימת, מממש אותה למשאב aws_s3_bucket.example.

לאחר הרצת terraform apply והבאת המשאב בהצלחה, זו פרקטיקה טובה להסיר את בלוק הimport. השארתו לא תגרום לנזק, אך הסרתו עוזרת לשמור על קונפיגורציה נקייה ומפחיתה בלבול פוטנציאלי במהלך ניהול מצבים עתידי.

דוגמה 2: שימוש בבלוק ה- Terraform Import כדי לייבא מופע EC2

נשקול דוגמה נוספת: יש לנו מופע EC2 קיים עם מזהה i-1234567890abcdef0 ורוצים להביא אותו לניהול של Terraform.

אנו מגדירים את משאב aws_instance שאנו רוצים ש-Terraform ינהל בבלוק הresource. ודאו שהמאפיינים (למשל, ami, instance_type) תואמים לקונפיגורציה של המופע הקיים:

Plain Text

 

בבלוק הimport:

  • to: ממפה את המשאב בקונפיגורציה שלכם (aws_instance.example) למשאב הקיים.
  • id: מציין את המזהה הייחודי של מופע ה-EC2 שאתם מייבאים.

ברגע שתוסיפו את בלוק המשאב וההצהרה על הייבוא לקובץ הקונפיגורציה של Terraform, הריצו terraform plan כדי לצפות בשינויים. לאחר מכן, הריצו terraform apply כדי לייבא את המשאב לקובץ מצב של Terraform.

לאחר הייבוא, Terraform ינהל את מופע ה-EC2 הקיים, ויבטיח שהקונפיגורציה שלו תישאר דקלרטיבית.

דוגמה 3: שימוש בבלוק יבוא של Terraform כדי לייבא קבוצת משאבים של Azure

בדוגמה הבאה, נייבא קבוצת משאבים של Azure.

יש לנו כבר קבוצת משאבים של Azure בשם example-resource-group באזור East US, ואנו רוצים לנהל אותה באמצעות Terraform.

למעשה, בתוך בלוק ה-resource, אנו מגדירים את המשאב azurerm_resource_group שבו ינהל Terraform:

Plain Text

 

בלוק הייבוא:

  • to: מצמצם את המשאב בתצורתך (azurerm_resource_group.example) למשאב הקיים ב-Azure.
  • id: מציין את זהות המשאב המלאה של קבוצת המשאבים. זכור להחליף את <subscription_id> ב-זהות המינוי האמיתית שלך.

הוסף את המשאב ואת בלוק הייבוא לקובץ התצורה שלך של Terraform. לאחר מכן, הריץ את הפקודה terraform plan כדי לצפות בשינויים ולהריץ terraform apply כדי לייבא את השינויים ואת המשאב לתוך קובץ המצב של Terraform.

האם ניתן להשתמש בבלוק הייבוא של Terraform באופן תנאי?

בלוק הייבוא של Terraform מיועד להיות דקלרטיבי ודורש ערכים ספציפיים הידועים בזמן התכנון. לכן, הוא לא יכול לשמש בתנאים בתוך קוד ה-Terraform שלך.

בלוק הייבוא אינו תומך בביטויים דינמיים או משתנים לקביעת מזהה הייבוא על סמך תנאים. ניסיונות להשתמש במבנים כמו count או משתנים בתוך בלוק הייבוא יגרמו לשגיאות, מכיוון ש-Terraform אינו מתיר ארגומנטים כאלה בהקשר זה.

נקודות מפתח

הכנסת בלוק הייבוא ב-Terraform 1.5+ מפשטת את ניהול המשאבים על ידי אפשרות הייבוא והגדרה ישירה של משאבים בתוך קבצי הקונפיגורציה. זה מתיישב עם עקרונות IaC על ידי הפחתת המורכבות והפיכת זה ליותר קל לשלב תשתיות קיימות בקונפיגורציות של Terraform.

Source:
https://dzone.com/articles/how-to-use-terraform-import-block