להתחיל עם Terraform עבור Windows ו-Terraform EC2

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

אחד השימושים של טרהפורם הוא בCI/CD. טרהפורם מאפשר לך:

הסרטונים האחרונים שלי

  • ליצור סביבת בדיקות
  • להפעיל יישום
  • לבצע בדיקות אינטגרציה
  • להרוס את סביבת הבדיקות

כל השלבים מבוצעים באופן אוטומטי גם. ואין צורך במרכז נתונים!

דרישות מוקדמות

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

  • A Windows 10 device
  • חשבון AWS
  • CLI של AWS מותקן ומוגדר במכשיר הזה. אתה יכול ללמוד איך להתקין אותו כאן ואיך להגדיר אותו כאן.
  • (אופציונלי) Visual Studio Code עם ההרחבה של טרהפורם

התקנת אפליקצית טרהפורם וינדוס

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

הדרך הקשה

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

  1. הורד את הגרסה המתאימה של Terraform מ-דף ההורדות של HashiCorp. במקרה שלי, זו הגרסה ל-Windows בסיבית 64 ביט.
  2. צור תיקייה בדרייב C:\ שבו תוכל לשים את הקובץ הנפרץ של Terraform. אני מעדיף לשים את המתקינים בתת-תיקייה (לדוגמה, C:\tools) שבה תוכל לשים את הבינארים.
  3. לאחר שההורדה מסתיימת, לך ומצא אותה ב-מערכת הקבצים. פתח את הקובץ zip לתיקייה שיצרת בשלב 2.
  4. פתח את תפריט ההתחלה שלך והקלד "סביבה" והדבר הראשון שיופיע צריך להיות ערוך את משתני הסביבה של המערכת. לחץ על זה וצריך לראות את החלון הזה.
System Properties

5. לחץ על משתני הסביבה… בתחתית ותראה את זה:

Windows environment variables

6. מתחת לחלק התחתון שבו כתוב משתנים של המערכת, מצא אחד בשם Path ולחץ על עריכה. תראה אז רשימה של מיקומי התכניות הנדרשות לווינדוס בכל רגע נתון.

7. לחץ על חדש והוסף את נתיב התיקייה שבו נמצא terraform.exe לתחתית הרשימה. זה צריך להיראות כך כשתסיים.

Editing the system path

8. לחץ על אישור בכל התפריטים שפתחת עד שאין עוד.

9. כדי לוודא שווינדוס זוהה את הנתיב החדש, פתח פורמט קוד פרום/פושר-שלט והזן refreshenv.

10. בדוק שההתקנה הצליחה על ידי הזנת terraform --version. אם זה מחזיר גרסה, אתה בסדר.

הדרך הקלה

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

כדי להתקין את Terraform עם Chocolatey, עשה את השלבים הבאים:

  1. פתחו את מסוף הפקודות/PowerShell כמנהל מערכת והתקינו את Chocolatey באמצעות הפקודה מהדף ההתקנה שלהם.
  2. לאחר שהתהליך הושלם, הפעילו choco install terraform. אם תרצו, תוכלו גם להוסיף -y בסופו כדי להסכים אוטומטית להתקנתו במכשיר שלכם.

לאחר שהפקודה תופעל, תקבלו משהו דומה לזה:

Chocolatey v0.10.13
2 validations performed. 1 success(es), 1 warning(s), and 0 error(s).

Installing the following packages:
terraform
By installing you accept licenses for the packages.
Progress: Downloading terraform 0.12.6... 100%

terraform v0.12.6 [Approved]
Downloading terraform 64 bit
  from 'https://releases.hashicorp.com/terraform/0.12.6/terraform_0.12.6_windows
Download of terraform_0.12.6_windows_amd64.zip (15.32 MB) completed.
--SNIP--

3. בדקו אם ההתקנה הצליחה על ידי הזנת terraform --version.

הדרך בלינוקס

I can almost hear what you’re thinking. Wait a minute Chris, didn’t you say this was going to cover installing Terraform on Windows?

כן, זה עדיין קיים. אך אחת התכונות ב־Windows 10 היא תת־מערכת ה־Windows עבור לינוקס, או WSL. זה מאפשר לך להריץ פקודות לינוקס ב־Windows.

  1. התקינו את WSL. אני לא מתכוון להיכנס לעומק כאן על איך להתקין ולהגדיר את WSL, אך אם ברצונכם להמשיך ואין לכם כרגע את זה מוגדר. משולבת קטע של TechSnips שעשיתי על נושא זה ניתן למצוא למטה.

2. בשלך WSL shell, הריצו apt-get install unzip. תצטרכו את זה כדי לחלץ את הבינאריים של Terraform מאוחר יותר.

3. הורידו את Terraform על ידי הפעלת wget https://releases.hashicorp.com/terraform/0.12.6/terraform_0.12.6_linux_amd64.zip. זכרו להחליף את הגרסה והארכיטקטורה באחד שמתאימים הטוב ביותר למכשיר שלכם. תוכלו למצוא את הרשימה המלאה של הגרסאות של Terraform כאן.

4. הריץ unzip terraform_0.12.6_linux_amd64.zip terraform כדי לפרוץ את תוכן ה-zip לתיקייה בשם terraform.

5. לאחר שהקובץ ZIP נפרץ, יהיה עליך להעביר אותו למקום הנגיש על ידי נתיב המערכת. למרבה המזל, ב-Linux יש תיקייה שמשתמשים יכולים להוסיף לה בינאריים כברירת מחדל. העבר את הבינארי של Terraform לשם על ידי הרצת mv terraform /usr/local/bin/. התיקייה /usr/local/bin כבר מוגדרת בנתיב המערכת שלך.

6. ודא כי ההתקנה הצליחה על ידי הרצת terraform --version.

אוטומציה של מקרן Terraform של EC2 ב-AWS

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

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

הגדרת סקריפט של TF

  1. במקום cmd או PowerShell רץ כמנהל, הרץ mkdir hello-terraform ואז cd ./hello-terraform.
  2. פעם שיש לך ספרייה, יהיה עליך לקבוע סקריפט Terraform. למטה דוגמה של סקריפט שאתה יכול להשתמש בו. זהו סקריפט טיפוסי של Terraform שמשתמש בספק AWS provider ליצירת resource של מקום AWS.

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

# Terraform HCL

provider "aws" {
  region = "us-east-1"
  shared_credentials_file = "~/.aws/credentials"
  profile = "default"
}

resource "aws_instance" "ubuntu" {
  ami           = "ami-07d0cf3af28718ef8"
  instance_type = "t2.micro"

  tags = {
    Name = "HelloTerraform"
  }
}

# Terraform HCL

3.   שמור את הסקריפט למעלה כ- main.tf בתיקיית העבודה שלך.

הבנת סקריפטי TF

#Terraform HCL

provider "aws" {
  region = "us-east-1"
  shared_credentials_file = "~/.aws/credentials"
  profile = "default"
}

לפני שתמשיך, תבחן את הבלוק למטה ומה הוא מצהיר.

#Terraform HCL

בלוק זה אומר ל-Terraform EC2 איזה ספק להשתמש. יש ספקים לכל ספקי הענן המרכזיים, וגם לספקי on-prem. אם אתה מתקדם יותר ואתה יודע לכתוב ב-Golang, תוכל גם לכתוב ספק משלך.

בלוק זה אומר ל-Terraform להשתמש בספק AWS ובמפתחות גישה בקובץ ~/.aws/credentials תחת שם הפרופיל default. קובץ זה יוצר כאשר אתה מגדיר את AWS CLI עם פקודת aws config כפי שנאמר בדרישות.

כדאי גם לשים לב ש-~/ הוא תרגום קצר לתיקיית המשתמש הנוכחית. אם אתה מגיע מרקע של Windows, זה שווה ל-$env:USERPROFILE או %USERPROFILE%. אך Terraform לא תומך בתיקונים אלו בזמן כתיבת התשובה.

#Terraform HCL

resource "aws_instance" "ubuntu" {
  ami           = "ami-07d0cf3af28718ef8"
  instance_type = "t2.micro"

  tags = {
    Name = "HelloTerraform"
  }
}

הבלוק הבא מתאר מופע EC2 של Terraform, ומה לבנות אותו באמצעות. אם תבדוק את מסמכי התיעוד של Terraform עבור aws_instance, תוכל לראות שכמה מהפרמטרים נדרשים; כמה אופציונליים. במקרה זה, הפרמטרים הנדרשים הם זיהוי ה-AMI (ami-07d0cf3af28718ef8) עבור Ubuntu 18.04 LTS ו־t2.micro עבור סוג המופע.

על ידי מעבר בלוק תגית עם המפתח Name והערך HelloTerraform, תגית זו תועבר גם למופע שיווצר. זה אופציונלי.

terraform init

#Terraform HCL

Refreshing Terraform state in-memory prior to plan...
The refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.

------------------------------------------------------------------------

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  בניית מופע EC2 של Terraform של AWS: בדיקה
  + resource "aws_instance" "ubuntu" {
      + ami                          = "ami-07d0cf3af28718ef8"
      + arn                          = (known after apply)
      + associate_public_ip_address  = (known after apply)
      + availability_zone            = (known after apply)
      + cpu_core_count               = (known after apply)
      + cpu_threads_per_core         = (known after apply)
      + get_password_data            = false
...
--SNIP--

Plan: 1 to add, 0 to change, 0 to destroy.

------------------------------------------------------------------------

Note: You didn't specify an "-out" parameter to save this plan, so Terraform
can't guarantee that exactly these actions will be performed if
"terraform apply" is subsequently run.

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

לפני שתבצע שינויים, Terraform EC2 מאפשר לך לראות מה ייווצר על ידי הרצת terraform plan. הנה מה שהוא יפליט:

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value:    

# ייווצר aws_instance.ubuntu

aws_instance.ubuntu: Creating...
aws_instance.ubuntu: Still creating... [10s elapsed]
aws_instance.ubuntu: Still creating... [20s elapsed]
aws_instance.ubuntu: Still creating... [30s elapsed]
aws_instance.ubuntu: Creation complete after 33s [id=i-07cefd2a426a179b5]

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

בניית מופע EC2 של AWS: יצירה

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

פעם אחת שתכתוב 'כן', טראפורם EC2 יתחיל להגדיר את מקרא ה-EC2 של טראפורם על ידי קריאה ל- AWS APIs עם מפתח הגישה בקובץ ההרשאות שלך. זה עשוי לקחת זמן מסוים. לאחר השלמת התהליך, תראה משהו כמו מטה:

Plan: 0 to add, 0 to change, 1 to destroy.

Do you really want to destroy all resources?
  Terraform will destroy all your managed infrastructure, as shown above.
  There is no undo. Only 'yes' will be accepted to confirm.

  Enter a value: 

הרסת מופע EC2 של AWS

aws_instance.ubuntu: Destroying... [id=i-07cefd2a426a179b5]
aws_instance.ubuntu: Still destroying... [id=i-07cefd2a426a179b5, 10s elapsed]
aws_instance.ubuntu: Still destroying... [id=i-07cefd2a426a179b5, 20s elapsed]
aws_instance.ubuntu: Still destroying... [id=i-07cefd2a426a179b5, 30s elapsed]
aws_instance.ubuntu: Destruction complete after 30s

Destroy complete! Resources: 1 destroyed.

לאחר שתסיים עם סביבת הבדיקה, תוכל להרוס את המופע.

במסוף cmd/PowerShell שלך, הקלד terraform destroy. כמו בפקודת apply, תראה רשימת משאבים שטראפורם הולך להרוס ואז הזמן לפני הריסתם בפועל.

פעם שתקליד כן, טראפורם EC2 יתחיל להרוס את המופע ויאשר כשהוא מסיים.

Source:
https://adamtheautomator.com/terraform-windows/