הקדמה
מידע יוצא מטרפורממשמש להוצאת מידע על משאבי התשתית ממצב הפרוייקט. באמצעות תכונות אחרות של השפה הגדרות ההאשיקורפ (HCL), שטרפורמ משתמש בו, ניתן לבצע שאילתת מידע על המשאבים ולשנות אותם למבנים מידע יותר מורכבים, כמו רשימות ומפרטים. היוצאות מועילות לספקת מידע לתוכנה חיצונית, שתוכל לפעול על המשאבים הנוצרים של התשתית.
במדריך הלימוד הזה, תלמדו על התחבית השפת היוצאות של טרפורמ ועל הפרמטרים שלה על-ידי בניית תשתית פשוטה שתשתייק דרפלטים. תגדלו גם את היוצאות באופן קודמטי על-ידי הממלאתן לג 'סון.
דרישות קדם
- תוקן פרטי לDigitalOcean, שניתן ליצור דרך לוח הבקר של DigitalOcean. אתם יכולים למצוא הוראות במסמך המוצר של DigitalOcean, איך ליצור תוקן פרטי לגישה.
- Terraform הותקן על המכונה המקומית שלך ופרויקט הוגדר עם הספקידor DigitalOcean. השלים את שלב 1 ואת שלב 2 של ההדרכה איך להשתמש בTerraform עם DigitalOcean, והזכר להגדיר את תיקיית הפרויקט כ
terraform-outputs
, במקוםloadbalance
. במהלך שלב 2, אל תכלול את המשתנהpvt_key
ואת משאב המפתח SSH. - הכרת מידע על סוגי הנתונים HCL והלולאות. למידע נוסף, ראה את ההדרכה איך לשפר את הגמישות על ידי שימוש במשתנים, תלויויות ותנאים בTerraform
הערה: ההדרכה נבדקה במיוחד עם Terraform 1.0.2
.
הגדרת פלטים
בחלק זה, תצהיר על Droplet, תפריד אותו לענן ותלמד על פלטים על ידי הגדרה של פלט שיראה את כתובת ה-IP של הDroplet.
מתוך התיקייה terraform-outputs
שיצרת כדרישה נחוצה, יצירה ופתיחה את קובץ הdroplets.tf
לעריכה:
הוסף את משאב הDroplet והגדרת הפלט הבאים:
אתה ראשית מדגיש משאב שנקרא web
. שם המשאב המובהק בענן יהיה test-droplet
, באזור fra1
, מנהל Ubuntu 20.04.
אחר כך, אתה מדגיש יציאה שנקראת droplet_ip_address
. בTerraform, יציאות משמשות לייצא ולהראות על ערכים פנימיים ומוחשיים ומידע על המשאבים. כאן, אתה מגדיר את השדה value
, שמקבל את המידע לייצוא, לכתובת IP של הDroplet המדגיש. בזמן ההכרזה, זה בלתי ידוע, אבל זה יהיה זמין לאחר ההגדרה של הDroplet. יציאות מוצגות ונגישות לאחר כל הגדרה.
שמיר וסגיר את הקובץ, והשגים את הפרוייקט על ידי הרצת ההצעה הבאה:
ניגש yes
להיות מיועד ליישם כאשר נבקש. סוף היציאה יהיה דומה לזה:
הכתובת IP המדגישה שייך לDroplet החדשה שאתה משדר. היציאה של הפרוייקט משדר את המשאבים לענן ומציג את היציאות בסוף, כשכל התכונות של המשאבים זמינות. בלי יציאת droplet_ip_address
, Terraform לא היה מציג מידע נוסף על הDroplet, חוץ משהו שהוא מושדר.
יציאות גם יכולות להיות מוצגות באמצעות הפקודה output
:
היציאה תרשם את כל הoutputs
בפרוייקט:
Outputdroplet_ip_address = ip_address
ניתן גם לבקש יציאה מסויימת על ידי ספציפיות שם בשם:
עבור droplet_ip_address
, היציאה תכל את הכתובת IP בלבד:
Outputip_address
חוץ מספציפיות הvalue
תיאור
: מובנה קצר של תיעוד שמפרט מה שהיצרה מראה.תלוי_ב
: מטא פרמטר זמין בכל משאב שמאפשר לך לספק בולט ברור משאבים של היצרה שטראפאיפ אינו מסוגל להבין באופן אוטומטי בזמן התכנון.רגיש
: מקבל ערך בולני, שמונע מהתוכן של היצרה מהצגה אחר ההגשה אם הוא מוגדר כtrue
.
המפרמטר רגיש
שימושי כשהמסרים של ההגשה של טראפאיפ יהיו זמינים בשירותים ציבוריים, אך התוכן של היצרה צריך להישאר חשאי. עכשיו תוספו את המפרמטר להגדרה של המשאב הזו.
פתח droplets.tf
עבור עריכה והוסף את השורה המואצית:
שמו וסגיר את הקובץ כשהסיים. הגשה את הפרוייקט שוב על ידי ביצוע:
היכנס yes
בעת ההתבקשות. תראו שהיצרה מוסווה:
אפילו אם הוא מותווה כרגיש
, היצרה ותוכן היצרה עדיין ישנה דרך עוד כניסויים, כמו צפייה במצב של טראפאיפ או שאילתת היצרות ישירה.
בשלב הבא, תיצרו מבנה של דרפלט ויציאה שונה, אז השמדו את הדרפלטים המוגדלים על ידי ביצוע:
היצרה בסוף יהיה:
Output...
Destroy complete! Resources: 1 destroyed.
הגדרת דרפלט ויציאה שהציגה את כתובת הIP שלה. עכשיו תלמדו על השימוש ביציאות כדי להציג מבנים מורכבים יותר כמו רשי
ייצור מבנים מורכבים
בחלק זה, תשתמשו במונחית count
כדי להריץ מספר דפלוטים מההגדרה אחת, ותיפרסמו את כתובות ה IP שלהם בצורות שונות.
בשימוש בלול ה for
תצטרכו לשנות את ההגדרה של משאב הדפלוט, אז פתחו אותה במחיצה:
ערוך אותה כך:
אתם ציינו ששלושה דפלוטים ייצורות בעזרת המונח count
והוספתם את המפתח המועד לשם שם הדפלוט, כדי שתוכלו להבחין ביניהם בעתיד. הסרו את היציאה הקיימת למטה. בהמשך, שמורו וסגורו את הקובץ.
יישם את הקוד על ידי ריצייה:
טרפרפורム יתכנן את יצירת שלושה דפלוטים מספרים, הם נקראים test-droplet-0
, test-droplet-1
ו test-droplet-2
. בעת ההזמנה, אנכי, כדי לסיים את התהליך. תראו את היציאה הבאה בסוף:
Output...
Apply complete! Resources: 3 added, 0 changed, 0 destroyed.
זה אומר שכל שלושה הדפלוטים נוספו בהצלחה ושכל המידע עליהם נאגד במצב הפרוייקט.
הדרך הקלה ביותר לגשת לתכונות המשאבים היא דרך הפלטות, אך יצירתם עבור כל דרפלט היא לא סקילביבית. הפתרון הוא להשתמש במחץ for
כדי לעבור דרך רשימת הדרפלטים ולאסוף את תכונותיהם, או להשתמש באמצעים אלטרנטיים (שאתה תלמד עליהם בשלב הבא של השלב).
אתה יוצא בהגדרה של פלט שיפיץ את כתוביות ה-IP של שלושת הדרפלטים, עם שמותיהם. פתח droplets.tf
לעריכה:
הוסף את השורות הבאות:
ערך הפלט droplet_ip_addresses
בנוי בעזרת מחץ for
. בגלל שהוא מוקף בספרות, הסוג המוצע שלו יהיה מפה. המחץ עובר דרך רשימת הדרפלטים, ועבור כל מינקוט, הוא מזוגג את שמו עם כתובת ה-IP שלו ומוסף אותם למפה המוצעת.
שמור וסגור את הקובץ, ואישום את הפרוייקט שוב:
הדבר הבא שאתה יעבור הוא להזין yes
כשתועד ותקבל את תוכן הפלט בסוף:
פלט droplet_ip_addresses
פרט את כתובות ה-IP של שלושת הדרפלטים המושלמים.
בעזרת הפקט ה output
של Terraform, אתה יכול לקבל את תוכן הפלט בעזרת פעולת הפקט הבאה:
תוצאת הפעולה תהיה דומה למה שנראה אחרי:
הפעילות בעזרת הפרינגווינג בעלת תמידיות ותומכת בהרבה מהשפות התכנות. דרך זו, אתה יכול באופן תכנות
שימוש בהבעות המקטע
הבעות המקטע מעניקות שיטה צריכה בקיצוניות למעבר על כל אלמנטים ברשימה, ולאסוף את תוכן של תערובת מכל אחד מהם, במהלך התהליך יוצרים רשימה. הבעת המקטע הבאה תוציא את כתוביות ה-IP של שלושת הדרפלטים המופיעים תלויים באותה הסינTAX:
הסימן [*]
מנווט דרך רשימה שמימין לה, ועבור כל אחד מהאלמנטים שבה, לוקח את תוכן של תערובתו המסוגלת מספרה מימין לשמאל. אם המידע מימין לשמאל אינו רשימה בעצמו, הוא יהפך לאחד בו הוא האלמנט היחיד.
ניתן לפתוח droplets.tf
עבור עריכה ולשנות את השורות הבאות כדי ליישם את זה:
אחרי שנשמר את הקובץ, ניתן ליישם את הפרויקט על ידי ביצוע הפקודה הבאה:
תקבל תוצאה שהיא עכשיו רשימה, והיא תכל רק את כתוביות ה-IP של הדרפלטים:
על מנת לקבל את התוצאה בפורמט ג 'יוני, ניתן לבצע את הפקודה הבאה:
התוצאה תהיה רשימה יחידה:
השתמשת בפלטים יחד עם בעות המקטע ולולאות for
כדי לייצא את כתוביות ה-IP של הדרפלטים המופיעים. גם קיבלת את תוכן התוצאה בעלון ג'יוני, ועכשיו תשתמש בכלי jq
– כלי לסניף דינמי בסיסים של ג'יוני על פי הבעיות ה
עיבוד היצאות בעזרת jq
בשלב זה, תתקעים ותלמדו את היסודות של jq
, כלי לעיבוד מסמכים JSON. תשתמשו בו כדי לפרש את היצאות של הפרויקט שלכם של Terraform.
אם אתם על Ubuntu, תבצעו את הפקודה הבאה כדי להתקעים jq
:
על macOS, תוכלו להשתמש ב Homebrew כדי להתקעים את זה:
jq
ייישמה את הביטוי העיבודי הנתונים על הקלט המסומן. המשימה הקלה ביותר ב jq
היא להדגים יפה את הקלט:
בעזרת המשתמש המייצג (.
) אומר שהמסמך JSON שנפרש מהקלט צריך ליצוא בלי שינויים:
ניתן לבקש רק הכתובת השנייה בעזרת תווספת רשימות, מספרת מאזero:
היצאת התוצאות תהיה:
כדי להפוך תוצאת העיבוד לרשימה, תקבעו את הביטוי בתווספת סלולרים:
תקבלו רשימה JSON מופיעה יפה:
ניתן לשלוף חלקים של רשימות במקום אבן אחת על ידי הצגת טווח של מספרים בתווספת רשימות:
היצאת התוצאות תהיה:
הטוורן 0:2
משחזר את האלמנטים הראשונים של הטורנים – החלק העליון של הטוורן (2
) אינו כללי, כך שרק אלמנטים במיקום 0
ו1
מוצאים.
עכשיו אתה יכול להשמיד את המשאבים המופעלים על-ידי הרצת:
בשלב זה, התקנת את jq
והשתמש בו על מנת לפרש ולשנות את הייצוא של הפרוייקט שלך של Terraform, שמתקנה שלושה טפלטים.
סיכום
למדת על היצאות של Terraform, והשתמשת בהם כדי להראות פרטים על המשאבים המופעלים ולייצא מבנים מידע לעיבוד חיצוני בעת האחרונה. השתמשת גם בהיצאות כדי להראות תכונות של משאב יחיד, כמו גם בשביל הצגת מפות ורשימות שמכילים תכונות משאבים.
עבור מידע מפורט יותר על התכונות של jq
, ביקורת את המדריך הרשמי.
המדריך הזה הוא חלק מסדריין איך לנהל תשתיות בעזרת Terraform. הסדריין כולו מציג בעיקרון מספר נושאים של Terraform, מהתקנת Terraform בפעם הראשונה ועד לניהול פרוייקטים מורכבים.