Усе, що вам потрібно знати про Terraform — для початківців

Перед тим як обговорювати деталі про Terraform, важливо зрозуміти, що саме він робить і яку користь може принести. У цій статті ми розглянемо основні моменти, які допоможуть вам розпочати знайомство з Terraform.

Ви дізнаєтеся наступне:
- Що таке IaC (Infrastructure as Code, Інфраструктура як код)?
- Що таке Provider (Постачальник) і як його налаштувати?
- Основні команди, такі як init, plan і apply.
- Що таке State файли?

IaC, або Infrastructure as Code (Інфраструктура як код), — це спосіб записувати та відстежувати всі конфігураційні файли вашої інфраструктури в одному місці. Це також означає, що ви можете рефакторити та повторно використовувати свій код у разі змін в інфраструктурі. Це не лише економить час, але й зменшує необхідність вручну налаштовувати ресурси на хмарних платформах. Ще однією перевагою Terraform є його декларативність, що допомагає вам реалізувати ресурси, якщо ви забудете впровадити певні передумови для розгортання ресурсу, що неможливо при ручному налаштуванні.
Нижче наведена схема, яка допоможе вам зрозуміти, як працює IaC.

pic

Загальний принцип роботи Terraform

Provider (Постачальник) — це плагін Terraform, який дозволяє вам взаємодіяти з хмарними платформами або іншими платформами, такими як Docker, Kubernetes, Helm тощо, використовуючи їх API для розгортання та управління ресурсами на цих платформах.
Нижче наведено приклад того, як викликається provider у файлі Terraform.

provider "aws" {  
 region = "us-east-1"  
 access_key = "your-access-key"  
 secret_key = "your-secret-key"  
}

Не обов'язково надавати access_key та secret_key, оскільки у вас вже має бути налаштований AWS Command Line Interface (CLI). Я детальніше поясню це далі.

Є також концепція required providers (необхідних постачальників). Уявімо, що ви працюєте в команді, де є кілька розробників або автоматизаційних агентів, які хочуть запускати конфігураційні файли. У такому разі всім розробникам необхідно використовувати одну й ту ж версію постачальника, щоб уникнути помилок і несумісностей під час змін в інфраструктурі. Тому використовують required provider, щоб додати обмеження на версію.

terraform {  
 required_providers {  
 aws = {  
 source = "hashicorp/aws"  
 version = "~> 5.0"  
 }  
 }  
}

Ви можете додати необхідного постачальника, додавши блок terraform у свою конфігурацію або за допомогою файла блокування залежностей.

Щоб зрозуміти основні команди, ми будемо розгортати S3 бакет (хмарну службу зберігання) і будемо використовувати AWS як наш Provider.

  • Передумови
    — Встановіть Terraform: Terraform
    — Встановіть AWS CLI: AWS CLI
  • Існує три способи розгортання ресурсів у хмарі:
  • Хмарні платформи (Наприклад: вебсайт AWS)
  • AWS CLI (інтерфейс командного рядка для розгортання ресурсів без необхідності входити в хмарну платформу).
  • SDK

Переконайтеся, що ви виконали всі вищезгадані передумови, перш ніж рухатися далі.

Створіть каталог.

C:~\GitProjects>mkdir deploy-s3  
C:~\GitProjects>cd deploy-s3

Використовуйте будь-який редактор коду, який вам зручний, я використовую Visual Studio Code.
Ми створимо два файли: main.tf та providers.tf

Вставте наступний код у файл providers.tf:

provider "aws" {  
 region = "us-east-1"  
}  

*Я використовую "us-east-1" як мій регіон, ви можете використовувати будь-який інший регіон,   
або також залишити "us-east-1"*

Тепер ми створимо файл main.tf з таким вмістом для створення S3 бакету.

terraform {  
 required_providers {  
 aws = {  
 source = "hashicorp/aws"  
 version = "~> 5.0"  
 }  
 }  
}  
resource "aws_s3_bucket" "new-student-registration-tf" {  
 bucket = "learn-terraforms-deploy-s3"  
 force_destroy = true  

 tags = {  
 Name = "learn-terraforms"  
 Environment = "Dev"  
 }  
}

Тепер не обов'язково додавати блок terraform з required_providers, але зазвичай краще це зробити для обмеження версії.
Також я використав нижче наведене посилання, щоб написати код для створення S3 бакету в main.tf, це фактично документація AWS, створена Terraform для розгортання ресурсів AWS.
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/s3_bucket

Наступний крок — відкрити термінал і ввести "terraform init"

pic

Ця команда повідомляє Terraform, що це директорія Terraform, і ініціалізує її.
Після успішного виконання команди ви побачите щось подібне до нижньої скріншоту, а також буде створено файл “.terraform.lock.hcl” і папка “.terraform”.

pic

Наступний крок — спланувати ресурси, ввівши “terraform plan”.

Ця команда покаже вам, які ресурси будуть розгорнуті на вашій хмарній платформі. Виглядати це буде якось так:

pic

вивід terraform plan

Можливо, ви побачите “known after apply” у виводі terraform plan. Це означає, що ці значення з'являться після виконання terraform apply.

Тепер наступний крок — виконати “Terraform apply”, після чого ви отримаєте повідомлення з питанням, чи впевнені ви, що хочете розгорнути цей ресурс. Введіть “yes” і натискайте Enter.

pic

вивід terraform apply

Виконайте команду “terraform show”, щоб перевірити всі значення ресурсів, які були створені.

Як тільки terraform apply буде виконано успішно, ви побачите, що в вашій директорії з'явиться файл terraform.tfstate, який відстежує вашу поточну конфігурацію розгортання. Цей файл .tfstate також називають “state файли”.
Щоразу, коли ви хочете додавати чи змінювати свою інфраструктуру, Terraform спершу перевірить ваш файл tf.state та порівняє його з новими розгортаннями чи змінами, які ви хочете зробити. В залежності від змін, він розгортає або оновлює їх у вашому state файлі та на хмарній платформі. Тому переконайтеся, що ваші файли конфігурації ресурсів синхронізовані з ресурсами на хмарній платформі.

Основною метою state файлів є те, щоб ваша директорія Terraform була синхронізована з ресурсами вашої хмарної платформи.

Коли все буде готово, ви можете знищити всі ресурси, створені в цій директорії, за допомогою команди “terraform destroy”, а потім ввівши “yes” і натисканням “Enter” для підтвердження.

При роботі над реальними проектами, я рекомендую не використовувати “terraform destroy”, оскільки це може видалити всі ресурси в хмарі. Натомість ви можете використовувати “terraform plan” та “terraform apply” для переналаштування.

Також ви можете перевірити хмарну платформу, щоб перевірити ресурси, які ви розгорнули через Terraform.

Після того як ми розгорнули S3 бакет, ви можете побачити VPC та публічну підмережу, створену/розгорнуту у вашому обліковому записі AWS, хоча ви не створювали жодної підмережі чи VPC у вашому файлі Terraform.
Це відбувається тому, що обліковий запис AWS за замовчуванням має VPC та публічну підмережу для вас.

Ось діаграма, яка допоможе зрозуміти, як S3 бакет розгортається у вашому обліковому записі AWS:

pic

Дякую! 🙂

Перекладено з: Everything you need to know about Terraform- As a Beginner

Leave a Reply

Your email address will not be published. Required fields are marked *