Terraform Best Practices
Terraform consultingTwitter @antonbabenkoTerraform Weekly
Українська (Ukrainian)
Українська (Ukrainian)
  • Ласкаво просимо
  • Ключові концепції
  • Структура коду
  • Приклади структури коду
    • Terragrunt
    • Terraform
      • Малорозмірна структура із Terraform
      • Середня інфраструктура з Terraform
      • Велика структура Terraform
  • Умови найменувань
  • Стиль коду
  • FAQ (Часті запитання)
  • Посилання
  • Написання конфігурацій Terraform
  • Workshop
Powered by GitBook
On this page
  • Ресурс
  • Ресурсний модуль
  • Інфраструктурний модуль
  • Композиція
  • Джерело даних (data source)
  • Віддалений стан
  • Провайдер, постачальник (provisioner) і т.д.
  • Чому так важко?
Export as PDF

Ключові концепції

PreviousЛаскаво просимоNextСтруктура коду

Last updated 3 years ago

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

У цьому розділі описуються ключові поняття, які використовуються в книзі.

Ресурс

Ресурс - це aws_vpc, aws_db_instance і т.д. Ресурс належить провайдеру, включаючи аргументи, вихідні дані; він також має життєвий цикл . Ресурс можна створювати, отримувати, оновлювати та видаляти.

Ресурсний модуль

Ресурсний модуль - це колекція підключених ресурсів, які разом виконують спільну дію (наприклад, створює VPC, сабнети, NAT gateway і т.д.). Він залежить від конфігурації провайдера, яка може бути визначена в ньому або в структурах вищого рівня (наприклад, в модулі інфраструктури).

Інфраструктурний модуль

Інфраструктурний модуль - це колекція ресурсних модулів, які можуть бути логічно не підключені, але в поточній ситуації/проекті/налаштуваннях служать єдиній меті. Він визначає конфігурацію для провайдерів, які передаються до поточних ресурсних модулів і до ресурсів. Зазвичай він обмежується роботою в одній сутності на один логічний роздільник (наприклад, AWS регіон, Google проект).

Наприклад, модуль використовує ресурсні модулі ( та ) щоб керувати інфраструктурою, необхідною для роботи на .

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

Композиція

Композиція - це колекція інфраструктурних модулів, які можуть охоплювати декілька логічно відокремлених областей (наприклад, декілька AWS регіонів або декілька AWS акаунтів). Композиція використовується для опису повної інфраструктури, необхідної для всієї організації або проекту.

Композиція складається з інфраструктурних модулів, які, в свою чергу, складаються з ресурсних модулів, які потім реалізують індивідуальні ресурси.

Джерело даних (data source)

Джерело даних виконує лише read-only операції та залежить від конфігурації постачальника, використовується в ресурсних та інфраструктурних модулях.

Джерело даних terraform_remote_state діє як з'єднувальник для модулів і композицій вищого рівня.

Віддалений стан

Провайдер, постачальник (provisioner) і т.д.

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

Чому так важко?

Доступ до даних між молекулами (ресурсними та інфраструктурними модулями) здійснюється за допомогою вихідних даних модулів та джерел даних.

Якщо спробувати описати вище зазначені поняття у псевдовідношеннях, це може виглядати так:

composition-1 {
  infrastructure-module-1 {
    data-source-1 => d1

    resource-module-1 {
      data-source-2 => d2
      resource-1 (d1, d2)
      resource-2 (d2)
    }

    resource-module-2 {
      data-source-3 => d3
      resource-3 (d1, d3)
      resource-4 (d3)
    }
  }

}

data source дозволяє зовнішній програмі діяти, відкриваючи довільні дані для використання в інших місцях конфігурації Terraform. Як приклад можна назвати , де ім'я файлу обчислюється шляхом виклику зовнішнього Python скрипта.

Інший приклад - джерело даних робить HTTP GET запит на заданий URL і експортує інформацію про відповідь, яка часто корисна для отримання інформації з кінцевих точок, де рідний Terraform провайдер не існує.

Інфраструктурні модулі та композиції повинні зберігати свої у віддаленому місці, де їх зможуть отримати інші керованим способом (наприклад через ACL, версії, журналювання).

У той час як окремі ресурси – це атоми в інфраструктурі, ресурсні модулі - це молекули. Модуль — це найменший версійний блок, який можна спільно використовувати. Він має точний список аргументів, реалізує базову логіку, щоб виконувати потрібну функцію. Наприклад, модуль створює aws_security_group і aws_security_group_rule ресурси на основі вхідних даних. Цей ресурсний модуль сам по собі можна використовувати разом з іншими модулями для створення модуля інфраструктури.

Доступ між композиціями часто виконується використовуючи віддалений стан джерел даних. Існує .

всі аспекти конфігурації в деталях
AWS VPC Terraform module
terraform-aws-atlantis
terraform-aws-vpc
terraform-aws-security-group
Atlantis
AWS Fargate
terraform-aws-cloudquery
terraform-aws-modules
External
terraform-aws-lambda module
http
Terraform state
terraform-aws-security-group
багато способів обмінюватися даними між конфігураціями
Simple infrastructure composition