המחבר בחר את הקרן החינמית והפתוחה כדי לקבל תרמית בתוכנית Write for DOnations.
מביא
Terraform מציע תכונות מתקדמות שנעשים יותר ויותר שימושיות כשהפרוייקט שלך גדל בגודל ובמורכבות. ניתן להקל על המחיר של שמירת ההגדרות המערכתיות המורכבות למסגרות רבות על ידי מבנה הקוד שמייצג את ההבעה המיינית וההכנסה של התבניות המערכתיות, ועל ידי הכנת עבודות עם הכלים על מנת להיות יותר קל לבדיקה והשלמה.
Terraform מקשר מצב מידע עם הבחזרה, שמקבע את המיקום ואת הדרך בה המידע נאחז ונשא. לכל מצב יש רק בחזרה אחת והוא מחובר להגדרה של המערכת התשתיתית. בחזרות מסוימות, כמו local
או s3
, יכולות לכלל מספר מצבים. במקרה זה, השילוב בין המצב לבחזרה והמערכת התשתיתית מתאר את הסדנה. סדנות מאפשרות לך להשתמש במקטעים מסוימים של אותה הגדרה של המערכת התשתיתית בלי לשים אותם בבחזרות נפרדות.
בהדרכה זו, תקימו בעצם מספר מקרים של התשתית בעזרת ערימות עבודה שונות. אחר כך, תקימו משאב יציב-מצב, שבהדרכה זו יהיה תוךלון DigitalOcean. לבסוף, תשימו את המודולים המוכנים מראש מהרשימת הטרפורפ, שאתם יכולים להשתמש בהם כדי להוסיף למשהו שלכם.
דרישות קדם
כדי להשלים את ההדרכה, תזדקקו ל:
- מס 'גישה פרטית' ב DigitalOcean, שניתן ליצור דרך הלוח בקרת ה DigitalOcean. אתם יכולים למצוא הוראות במסמכים המוצעים על המוצר הבאים איך ליצור מס 'גישה פרטית'.
- טרפורפ מו Installed על המכונה המקומית שלכם ופרוייקט מוגדר עם ספקtor ה DigitalOcean. סיימו שלב 1 ו שלב 2 מההדרכה איך להשתמש בטרפורפ עם DigitalOcean, והסיב למעשה בשם התיקייה של הפרוייקט
terraform-advanced
, במקוםloadbalance
. בזמן שלב 2, אל תכניסו את המשתנהpvt_key
ומשאב המפתח SSH.
הערה: ההדרכה הזו בודקה בדיוק עם טרפורפ 1.0.2
.
הגדלת מספר מקטעים משאבים באמצעות סדנאות
סדנאות רבות מועילות כשרוצים להגדיל או לבדוק גירסה מותאמת של התשתית העיקרית שלכם בלי ליצור פרוייקט נפרד ולהגדיר מחדש את המפתחות האUTHentification. אחרי שביצעתם את הפיתוח ובדיקת התכונה בסדנאות נפרדות, אתם יכולים לשלב את הקוד החדש לסדנא העיקרית ואולי למחוק את המצב הנוסף. כשאתם מתחילים פרוייקט Terraform, בהתנגדות למקור הרקע, Terraform יוצר סדנא בשם default
. היא תמיד נוכחית ואתה לא יכול למחוק אותה.
אך סדנאות רבות אינן פתרון מושלם ליצירת מספר סביבות, כמו לצורך הערגה והתפעול. לכן הסדנאות, שרק עוקבות אחר המצב, לא אחסנות את הקוד או השינויים שבו.
אזל ישראל, יש להשתמש בתחילית הטקסט המקורי ולתרגם אותו לעברית:
אין למען שחללי העבודה לא עוקבים אחר הקוד האמיתי, יש לנהל את ההפרדה בין קודים של חללי עבודה מרובים ברמת בקרת הגירסא (VCS) על ידי התאמתם לגרסאות תשתיתיהם. כיצד תוכל להשיג זאת תלוי בכלי VCS עצמו; לדוגמה, ב־Git branches יהיה חילוף מתאים. כדי להקל על הניהול של הקוד עבור סביבות מרובות, תוכל לחלק אותם ל־מודולים רהיטים, כדי להימנע מחזרה של קוד דומה עבור כל סביבה.
הפלטת משאבים בחללי עבודה
עכשיו תיצור פרוייקט שיִפְלַט דרופלט, אותו תיישם מחללי עבודה מרובים.
תאחסן את ההגדרה של הדרופלט בקובץ שנקרא droplets.tf
.
בהנחת שאתה נמצא בתיקיית terraform-advanced
, יצירו ופתחו אותו לעריכה על ידי הרצת:
הוסיפו את השורות הבאות:
ההגדרה הזו תיצור דרופלט שייריץ אובונטו 18.04 עם קור ראשון ו1 ג״ב זכרון באיזור fra1
. השם שלו יכיל את השם של החלל העבודה הנוכחי ממנו הוא מופלט. כאשר תסיימו, שמרו וסגרו את הקובץ.
יש ליישם את הפרוייקט לטררפורם כדי לבצע את הפעולות שלו עם:
התוצאה תרצה דומה לזו:
הנה בקשה להגיע לגיבוי הדופלוט בעבודת המרחב default
.
שם הדופלוט יהיה web-default
, בגלל שהמרחב שאתה מתחיל בו נקרא default
. אתה יכול לרשום את המרחבים כדי לוודא שהוא היחיד הזמין:
התוצאה תרצה דומה לזו:
Output* default
האסטריסקופ (*
) אומר שאתה כרגע מוכן את המרחב הזה.
יוצר ומעבר למרחב חדש בשם testing
, שאתה יהיה משתמש בו כדי לגיבות דופלוט שונה, על ידי הרצת workspace new
:
התוצאה תרצה דומה לזו:
OutputCreated and switched to workspace "testing"!
You're now on a new, empty workspace. Workspaces isolate their state,
so if you run "terraform plan" Terraform will not see any existing state
for this configuration.
אתה מתכוון ליישם את הגיבוי של הדופלוט בצורה נוספת על ידי הרצת:
התוצאה תהיה דומה להיצג הקודם:
OutputTerraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
# digitalocean_droplet.web ייצרה
+ resource "digitalocean_droplet" "web" {
+ backups = false
+ created_at = (known after apply)
+ disk = (known after apply)
+ id = (known after apply)
+ image = "ubuntu-18-04-x64"
+ ipv4_address = (known after apply)
+ ipv4_address_private = (known after apply)
+ ipv6 = false
+ ipv6_address = (known after apply)
+ ipv6_address_private = (known after apply)
+ locked = (known after apply)
+ memory = (known after apply)
+ monitoring = false
+ name = "web-testing"
+ price_hourly = (known after apply)
+ price_monthly = (known after apply)
+ private_networking = (known after apply)
+ region = "fra1"
+ resize_disk = true
+ size = "s-1vcpu-1gb"
+ status = (known after apply)
+ urn = (known after apply)
+ vcpus = (known after apply)
+ volume_ids = (known after apply)
+ vpc_uuid = (known after apply)
}
Plan: 1 to add, 0 to change, 0 to destroy.
...
שימו לב שטררפורם מתכוון לגיבות דופלוט בשם web-testing
, שהוא קרא אותו שונה מweb-default
. זה בגלל שהמרחבים default
וtesting
משאירים במרחבם סטטוסים נפרדים ואין להם ידע על משאביהם אחד על השני—אפילו שהם צאצאים מאותו קוד.
על מנת לוודא שאתה במרחב testing
, הוצא את שם המרחב הנוכחי שלך על ידי הרצת workspace show
:
התוצאה תהיה שם המרחב הנוכחי:
Outputtesting
למחיקת מרחב עבודה, עליך ראשית להרוס את כל המשאבים שהופרשו בה. אחר כך, אם הוא פעיל, עליך להחליף לאחר באמצעות workspace select
. מכיוון שהמרחב העבודה testing
כאן ריק, יכול להחליף לdefault
מיד:
תקבל פלט של Terraform שאישר את ההחלפה:
OutputSwitched to workspace "default".
אז תוכל למחוק אותו על ידי הרצת workspace delete
:
Terraform יבצע אז את המחיקה:
OutputDeleted workspace "testing"!
תוכל להרוס את הדרופלט שהפרשת במרחב העבודה default
על ידי הרצת:
הזן yes
כאשר יבקש ממך לסיים את התהליך.
בחלק זה, עבדת במרחבי עבודה רבים של Terraform. בחלק הבא, תפריש משאב בעל עצמה.
הפרישת משאבים בעלי עצמה
משאבים ללא עצמה לא שומרים כמות, לכן ניתן ליצור ולהחליף אותם במהירות, מכיוון שהם לא ייחודיים. משאבים בעלי עצמה, מצד שני, מכילים כמות שהיא ייחודית או שלא ניתן ליצור מחדש בקלות; לכן, דורשים אחסון כמות קבוע.
מכיוון שאולי תהיה צריכה להרוס משאבים כאלה, או שמשאבים רבים דורשים את הכמות שלהם, כדאי לאחסן אותה באנטיטות נפרדת, כמו הנפחים של DigitalOcean.
נפחים סופקים מקום אחסון إضافי. הם יכולים להיות מוצמדים לדימותים (שרתים), אך הם נפרדים מהם. בשלב זה, תגדיר את הנפח ותחבר אותו לדימות בקובץ droplets.tf
.
פתח אותו לעריכה:
הוסף את השורות הבאות:
כאן אתה מגדיר שני משאבים חדשים, הנפח עצמו והצירוף הנפח. הנפח יהיה בגודל 10GB, מקובע כ- ext4
, נקרא new-volume
, וממוקם באותה אזור כמו הדימות. מכיוון שהנפח והדימות הם ישויות נפרדות, יהיה עליך להגדיר אובייקט צירוף נפח כדי לחבר אותם. volume_attachment
לוקח את מספרי הדימות והנפח ומורה לענן DigitalOcean להפוך את הנפח זמין לדימות כהתקן דיסק.
ברגע שהשגת את זה, שמור וסגור את הקובץ.
תכנן את התצורה הזו על ידי הרצת:
הפעולות שתרצה לתכנן Terraform יהיו הבאות:
הפרטים הפלט הם שTerraform ייצור דימות, נפח, וצירוף נפח, שמחבר את הנפח לדימות.
כעת הגדרת וחברת נפח (משאב עם מצב) לדימות. בחלק הבא, תסקור מודולים טרהפורם יציבים וציבוריים שאפשר לשלב בפרויקט שלך.
הפניית למודולים מוכנים מראש
בנוסף ליצירת מודולים מותאמים אישית עבור הפרוייקטים שלך, ניתן גם להשתמש במודולים וספקים מוכנים ממפתחים אחרים שזמינים לציבור בריגיסטרי Terraform.
בחלק המודולים ניתן לחפש בבסיס נתונים של המודולים הזמינים ולמיין לפי ספקים כדי למצוא את המודול שיש בו את התיכונות הנחוצות לך. ברגע שמצאת אחד, ניתן לקרוא את התיאור שלו, שמכיל את ההזנים והפלטים שהמודול מספק, וגם את תלויות המודול והספק החיצוני.
עכשיו תוסיף את מודול מפתח SSH של DigitalOcean לפרוייקט שלך. תאחסן את הקוד בנפרד מההגדרות הקיימות בקובץ שנקרא ssh-key.tf
. יצירתו ופתיחתו לעריכה על ידי הרצת:
הוסף את השורות הבאות:
זהו קוד שמגדיר מקבצת clouddrove/droplet/digitalocean
מהרשימה ומציב חלק מהפרמטרים שהיא מציעה. הוא צריך להוסיף מפתח SSH ציבורי לחשבון שלך על ידי קריאתו מ ~/.ssh/id_rsa.pub
.
ברגע שתסיימו, שמו וסגיר את הקובץ.
לפני שתתכנן את הקוד הזה, עליך להוריד את המודול המצורף על ידי ריציית:
תקבל יוצאת דומה לדוגמה הבאה:
OutputInitializing modules...
Downloading clouddrove/ssh-key/digitalocean 0.13.0 for ssh-key...
- ssh-key in .terraform/modules/ssh-key
Initializing the backend...
Initializing provider plugins...
- Reusing previous version of digitalocean/digitalocean from the dependency lock file
- Using previously-installed digitalocean/digitalocean v2.10.1
Terraform has been successfully initialized!
...
עכשיו תוכל לתכנן את הקוד לשינויים:
תקבל יוצאת דומה לזה:
היוצאה מראה שאתה ייצר משאב מפתח SSH, מה שאומר שאתה הוריד והופעל את המודול מהקוד שלך.
סיכוי
פרויקטים גדולים יכולים להשתמש ב某些 תכונות מתקדמות של Terraform כדי לפחות מורכבות ולהקל על השימור. חדרי עבודה מאפשרים לך לבדוק חידושים חדשים בקוד שלך בלי לגעת בהגבלה הראשית הקיימת. אתה יכול גם לשילוב חדרי עבודה עם מערכת שליטה גרסאים כדי לעקוב אחר שינויים בקוד. שימוש במודולים מוכנים יכול גם לקצר את זמני הפיתוח, אך יכול להיות עליו עלויות נוספות או זמן נוסף בעתיד אם המודול יתפוגג.
הדיוקים האלה הם חלק מסדרת איך לנהל תשתית באמצעות Terraform. הסדרה מסתכלת על מספר תחומים של Terraform, מהתקנת Terraform בפעם הראשונה ועד לניהול פרוייקטים מורכבים.