Перед тим як обговорювати деталі Terraform, важливо зрозуміти, що саме він робить і яку користь він може принести. У цьому матеріалі ми дізнаємось основні речі, які необхідно знати про Terraform, що можуть стати відправною точкою для вашої подорожі вивчення Terraform.
Ви зрозумієте наступне:
- Що таке IaC (Infrastructure as Code)?
- Що таке Provider (Постачальник) і як його налаштувати?
- Основні команди, такі як init, plan і apply.
- Що таке файли стану (State files)?
IaC (Infrastructure as Code) або інфраструктура як код — це спосіб написання та відстеження всіх конфігураційних файлів вашої інфраструктури в одному місці. Це також означає, що ви можете рефакторити та повторно використовувати свій код у разі змін в інфраструктурі. Це не тільки економить час, але й зменшує потребу в ручному налаштуванні ресурсів на хмарних платформах. Ще одна перевага Terraform полягає в тому, що він є декларативним, що означає, що він допомагає вам впроваджувати ресурси, якщо ви забудете реалізувати деякі передумови для розгортання конкретного ресурсу, чого не можна досягти при ручному налаштуванні.
Нижче наведена схема, яка допоможе вам зрозуміти, як працює IaC.
Загальний вигляд того, як працює Terraform
Providers (Постачальники) — це плагіни 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 (AWS CLI). Я розповім про це детальніше трохи пізніше.
Існує також таке поняття, як required providers (обов'язкові постачальники). Припустимо, ви працюєте в команді, де кілька розробників або автоматизаційних агентів хочуть запускати конфігураційні файли. Важливо, щоб у всіх розробників була одна й та сама версія постачальника, щоб уникнути помилок та непослідовностей під час змін в інфраструктурі. Ось чому ми використовуємо required provider (обов'язковий постачальник) для додавання обмеження на версію.
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
Ви можете додати required provider (обов'язковий постачальник), додавши блок terraform у вашій конфігурації або за допомогою файлу блокування залежностей.
Щоб зрозуміти основні команди, ми будемо розгортати S3 bucket (хмарне сховище) і будемо використовувати AWS як наш постачальник.
- Попередні кроки
— Встановіть Terraform: Terraform
— Встановіть AWS CLI: AWS CLI - Є три способи, якими можна розгортати ресурси в хмарі:
- Хмарні платформи (наприклад: вебсайт AWS)
- AWS CLI (командний інтерфейс для розгортання ресурсів без необхідності входити в хмарну платформу).
- SDK
Переконайтесь, що ви завершили попередні кроки перед тим, як рухатись далі.
Ст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 bucket.
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 bucket у main.tf, це фактично документація AWS, створена Terraform для розгортання ресурсів AWS.
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/s3_bucket
Наступний крок — відкрити термінал і набрати “terraform init”
Ця команда повідомляє Terraform, що це каталог Terraform, і ініціалізує його.
Після успішного виконання команди ви побачите щось подібне до цього скріншоту, а також створення файлу “.terraform.lock.hcl” та папки “.terraform”.
Наступний крок — спланувати ресурси, набравши “terraform plan”.
Ця команда покаже вам, які ресурси будуть розгорнуті на вашій хмарній платформі. Вигляд має бути приблизно таким:
виведення terraform plan
Ви можете побачити “known after apply” (відомо після застосування) у виведенні terraform plan. Це означає, що ці значення будуть видні після того, як ви виконаєте terraform apply.
Наступний крок — виконати “Terraform apply”, після чого вам буде запропоновано підтвердити, чи хочете ви розгорнути цей ресурс. Скажіть “yes” і натисніть Enter.
виведення terraform apply
Виконайте команду “terraform show”, щоб перевірити всі значення ресурсів, які були створені.
Якщо terraform apply успішно завершиться, ви побачите, що в вашій директорії створюється файл terraform.tfstate, який відслідковує поточну конфігурацію розгортання. Цей файл .tfstate також називають “state files” (файли стану).
Кожного разу, коли ви хочете додати або змінити свою інфраструктуру, Terraform спочатку перевірить ваш файл tf.state і порівняє його з новими розгортаннями або змінами, які ви плануєте зробити. На основі цих змін Terraform виконає розгортання або оновлення змін у вашому state файлі та на хмарній платформі. Тому важливо, щоб ваші конфігураційні файли ресурсів були синхронізовані з ресурсами на вашій хмарній платформі.
Основна мета файлів стану — забезпечити синхронізацію вашого каталогу Terraform з ресурсами хмарної платформи.
Коли ви завершите, можете знищити всі ресурси, створені в цій директорії, виконавши команду “terraform destroy”, а потім наберіть “yes” і натисніть “Enter” для підтвердження.
При роботі з реальними проєктами я рекомендую не використовувати “terraform destroy”, оскільки ця команда може видалити всі ресурси на хмарній платформі. Замість цього ви можете використовувати “terraform plan” та “terraform apply” для переналаштування.
Також ви можете перевірити хмарну платформу, щоб переконатися, що ресурси були розгорнуті через Terraform.
Після того, як ми розгорнули S3 bucket, ви можете побачити, що VPC та публічний підмережу були створені/розгорнуті у вашому акаунті AWS, хоча ви не створювали жоден підмережу або VPC у вашому файлі Terraform.
Це тому, що у вашому AWS акаунті за замовчуванням створено VPC та публічну підмережу.
Ось діаграма, яка допоможе вам зрозуміти, як S3 бакет розгортається у вашому AWS акаунті:
Дякую! 🙂
Перекладено з: Everything you need to know about Terraform- As a Beginner