Всем привет,

Надеюсь, что у всех все хорошо и они наслаждаются процессом обучения Devops. Я также работаю над дорожной картой DevOps со ссылками на бесплатные ресурсы. Следуйте за мной, чтобы вы могли получить уведомление, когда оно будет готово, на ваш почтовый ящик.

Итак, не теряя времени, приступим к изучению терраформирования. Прежде чем я хочу кое-что прояснить, я собираюсь опубликовать серию блогов, где вы узнаете о терраформировании от основ до продвинутого уровня. Если вы будете следовать этой серии, я гарантирую, что вы будете лучше, чем 98% разработчиков terraform.

Начнем с краткого представления о терраформировании и с того, почему нам это нужно. Terraform — это волшебный инструмент для создания компьютерных устройств и управления ими. Он помогает людям создавать и контролировать объекты в облаке, такие как серверы, базы данных и сети, с помощью кода.

Нам нужен Terraform, потому что он облегчает жизнь людям, работающим с компьютерами. Вместо того, чтобы нажимать кнопки и делать что-то вручную, вы можете написать код, сообщающий Terraform, что вы хотите, и он сделает всю тяжелую работу за вас. Это означает, что вы можете более эффективно создавать ресурсы своего компьютера и управлять ими, экономить время и избегать ошибок. Итак, terraform — это удобный инструмент, который помогает нам работать разумнее в мире технологий.

Люди обычно путают Terraform и Ansible. Оба эти инструмента великолепны. Эти инструменты действительно облегчают нашу жизнь как инженера DevOps. Итак, мы собираемся узнать больше об этих различиях.

Terraform и Ansible — мощные инструменты автоматизации инфраструктуры, но они служат разным целям и имеют некоторые ключевые различия:

1. Цель:
— Terraform: Terraform в основном используется для предоставления и управления инфраструктурой в виде кода. Он фокусируется на создании и настройке ресурсов инфраструктуры, таких как виртуальные машины, сети и базы данных у различных поставщиков облачных услуг.
— Ansible: Ansible — это инструмент управления конфигурацией и автоматизации, который фокусируется на настройке и управлении уже предоставленным программным обеспечением и системами. Он не ограничивается облачной инфраструктурой, но может управлять серверами, приложениями и даже сетевыми устройствами.

2.Подход:
— Terraform: Terraform использует декларативный подход. Вы определяете желаемое состояние вашей инфраструктуры в коде, а Terraform определяет, как этого добиться, создавая, обновляя или удаляя ресурсы по мере необходимости.
— Ansible: Ansible использует императивный подход. Вы указываете точные шаги и задачи, которые необходимо выполнить на своих серверах или системах. Это больше похоже на написание сценария, который сообщает Ansible, что делать для достижения желаемой конфигурации.

3.Управление состоянием:
— Terraform: Terraform поддерживает файл состояния, в котором отслеживается текущее состояние инфраструктуры. Это помогает Terraform понять, какие изменения были внесены и что необходимо обновить.
— Ansible: Ansible не поддерживает отдельный файл состояния. Он работает непосредственно с целевыми системами, что упрощает управление конфигурациями, но менее подходит для отслеживания изменений в инфраструктуре.

4. Агент против агента:
— Terraform: Terraform не требует агентов, то есть не требует установки какого-либо программного обеспечения в целевой инфраструктуре. Он напрямую взаимодействует с API, предоставляемыми облачными провайдерами.
— Ansible: Ansible также не требует агентов, но для выполнения задач ему требуется доступ по SSH или WinRM (для Windows) к целевым машинам.

5. Примеры использования:
— Terraform лучше всего подходит для предоставления и управления облачными ресурсами и инфраструктурой. Он отлично подходит для создания основы вашей инфраструктуры.
— Ansible идеально подходит для настройки, оркестрации и автоматизации задач на существующих серверах, независимо от того, находятся ли они в облаке или локально. Он превосходно справляется с развертыванием приложений, установкой программного обеспечения и управлением системой.

6. Язык:
— Terraform: Terraform использует язык конфигурации HashiCorp (HCL) для определения кода инфраструктуры.
— Ansible: Ansible использует YAML для определения задач и воспроизведения в своих книгах сценариев.

Таким образом, Terraform и Ansible дополняют друг друга во многих сценариях автоматизации инфраструктуры. Terraform используется для предоставления и настройки самой инфраструктуры, а Ansible используется для настройки и управления программным обеспечением и системами, работающими в этой инфраструктуре. В зависимости от ваших потребностей вы можете использовать один или оба этих инструмента в своем рабочем процессе автоматизации.

В terraform мы кодируем для обеспечения нашей инфраструктуры. Terraform использует HCL в качестве языка программирования для построения инфраструктуры. Итак, давайте узнаем больше о HCL и его синтаксисе.

Язык конфигурации HashiCorp (HCL) — это предметно-ориентированный язык, предназначенный для написания файлов конфигурации, используемых такими инструментами HashiCorp, как Terraform, Vault, Consul и другими. Это относительно просто и легко понять. Вот базовое введение в HCL:

1. Основы синтаксиса HCL:

-Блоки: HCL использует блоки для определения конфигураций. Блоки начинаются с открывающей скобки `{` и заканчиваются закрывающей скобкой `}`. Например:

resource "aws_instance" "example" {
 ami = "ami-0c55b159cbfafe1f0"
 instance_type = "t2.micro"
 }

- Атрибуты: внутри блоков вы определяете атрибуты, используя синтаксис `ключ = значение`. Значения могут быть строками, числами, логическими значениями или сложными структурами данных. Например:

resource "aws_instance" "example" {
 ami = "ami-0c55b159cbfafe1f0"
 instance_type = "t2.micro"
 }

- Комментарии: вы можете добавлять комментарии к файлам HCL, используя `#` или `//`:

# This is a comment

2. Переменные и типы данных:

- Переменные: вы можете определить переменные для параметризации ваших конфигураций. Переменные объявляются с использованием блокаvariable:

variable "region" {
 type = string
 default = "us-west-2"
 }

Типы данных: HCL поддерживает несколько типов данных, включая «строку», «число», «bool», «список», «карта» и пользовательские типы.

variable "subnet_ids" {
 type = list(string)
 default = ["subnet-12345678", "subnet-87654321"]
 }

3. Выражения и функции:

Выражения. Вы можете использовать выражения для управления значениями и их объединения. Например:

resource "aws_instance" "example" {
 ami = var.region == "us-west-2" ? "ami-12345678" : "ami-87654321"
 instance_type = "t2.micro"
 }

- Функции: HCL включает несколько встроенных функций для манипулирования строками, преобразования типов и многого другого. Например:

locals {
 app_name = upper("myapp")
 }

4.Блоки и модули:

- Блоки внутри блоков: вы можете вкладывать блоки в другие блоки, чтобы определить сложные конфигурации:

resource "aws_security_group" "example" {
 name_prefix = "example-"
 
 ingress {
 from_port = 80
 to_port = 80
 protocol = "tcp"
 cidr_blocks = ["0.0.0.0/0"]
 }
 }

- **Модули**: модули позволяют повторно использовать и инкапсулировать конфигурации. Вы можете создавать свои собственные модули или использовать модули сообщества:

 module "example" {
 source = "./my-module"
 region = var.region
 }
 

5. Особенности Terraform:

- Управление состоянием: Terraform использует файл состояния для отслеживания текущего состояния вашей инфраструктуры. Вам не нужно напрямую взаимодействовать с этим файлом; Terraform сделает это за вас.

Поставщики: в Terraform вы указываете поставщика (например, AWS, Azure) для настройки своих ресурсов. Провайдеры определяются в отдельном блоке вашей конфигурации.

- Зависимости ресурсов: вы можете определить зависимости между ресурсами, чтобы гарантировать, что они создаются и уничтожаются в правильном порядке.

Это очень простое введение в HCL. Чтобы овладеть навыками, вам следует изучить официальную документацию HashiCorp и поработать с примерами. Кроме того, использование таких инструментов, как Terraform с HCL, в практических сценариях поможет вам более эффективно понять его использование и возможности.

Проект — — — — Практические занятия ⌨

Чтобы создать локальный файл с использованием HCL Terraform (язык конфигурации HashiCorp), вы можете использовать источник данных local_file. Ниже приведен пример того, как создать локальный текстовый файл и предоставить соответствующую документацию для каждого раздела кода Terraform:

# Terraform Configuration to Create a Local Text File
# Introduction:
# This Terraform script demonstrates how to create a local text file using the `local_file` data source.
# Provider Configuration:
provider "local" {
 # Local provider does not require any specific configuration.
}
# Local File Data Source:
data "local_file" "example" {
 # Description:
 # Define the content of the local text file.
 # In this example, we are creating a simple text file with a message.
 
 # Path to the file to be created (relative to the current directory).
 # Make sure the directory exists before applying this configuration.
 filename = "${path.module}/example.txt"
 
 # Content of the text file.
 # You can modify this to include the desired content.
 content = "Hello, Terraform!\nThis is a local text file created by Terraform.\n"
}
# Output:
output "file_content" {
 # Description:
 # Output the content of the created local text file.
# Value to be displayed when querying the output.
 value = data.local_file.example.content
# Description for this output.
 description = "Content of the local text file."
}

Вот разбивка кода с комментариями:

1. Введение. Содержит краткий обзор того, что делает скрипт Terraform.

2. Конфигурация поставщика. В этом разделе определяется конфигурация поставщика. В данном случае мы используем локального провайдера, который не требует особых настроек конфигурации.

3. Источник данных локального файла: блок `data` определяет источник данных local_file. Он указывает имя файла (путь) и содержимое создаваемого локального текстового файла.

4. Вывод. В этом разделе определяется выходная переменная, которая отображает содержимое локального текстового файла при запросе. Он включает описание выходной переменной.

Чтобы использовать этот скрипт Terraform:

1. Сохраните его в файл `.tf`, например, `local_file_example.tf`.

2. Убедитесь, что каталог, в котором вы запускаете Terraform, имеет соответствующие разрешения для создания файлов.

3. Запустите следующие команды Terraform в том же каталоге, что и ваш файл `.tf`:

terraform init
terraform apply

Это создаст локальный текстовый файл (example.txt) в текущем каталоге с указанным содержимым. Затем вы можете просмотреть содержимое, запросив выходные данные:

terraform output file_content

В этом примере показано, как создать локальный файл с помощью Terraform HCL, и предоставляется документация для каждого раздела кода, объясняющая его назначение и использование.