Введение

Terraform — это инструмент инфраструктуры как кода (IAC) с открытым исходным кодом, позволяющий декларативно определять, управлять и предоставлять ресурсы инфраструктуры, такие как серверы, базы данных и сети. Terraform позволяет создавать, изменять и уничтожать ресурсы инфраструктуры нескольких облачных провайдеров, таких как Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP) и многих других.

С помощью Terraform вы можете определить желаемое состояние ресурсов вашей инфраструктуры в файле конфигурации, известном как файл Terraform. Этот файл конфигурации написан на декларативном языке под названием HashiCorp Configuration Language (HCL), что упрощает его чтение и поддержку. После того как вы определили желаемое состояние, Terraform автоматически предоставит и настроит ресурсы инфраструктуры в соответствии с этим состоянием.

Terraform позволяет вам контролировать версии вашего кода инфраструктуры, сотрудничать с членами команды и повторно использовать код в нескольких проектах. Его обширная библиотека модулей, созданных сообществом, может быстро предоставить сложные ресурсы инфраструктуры, такие как кластеры Kubernetes или многоуровневые веб-приложения.

Пример файла конфигурации Terraform

Вот пример файла конфигурации Terraform, который создает экземпляр AWS EC2:

provider "aws" {
  region = "us-west-2"
}

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

  tags = {
    Name = "example-instance"
  }
}

В этом примере мы используем поставщика AWS для настройки подключения к региону AWS us-west-2. Затем мы определяем ресурс aws_instance с именем example, который будет использовать образ машины Amazon (AMI) с идентификатором ami-0c55b159cbfafe1f0 и будет использовать тип экземпляра t2.micro. Мы также добавили блок tags, чтобы дать экземпляру имя example-instance.

Когда мы запустим terraform apply с этой конфигурацией, Terraform создаст инстанс EC2 с указанными параметрами в регионе AWS. Terraform автоматически управляет созданием и настройкой экземпляра, упрощая создание и изменение ресурсов инфраструктуры.

Тестирование вашего кода

Вы можете создать исходный файл Terraform с блоком ресурсов экземпляра AWS EC2, о котором вы упоминали ранее, и сохранить его с расширением .tf. Затем создайте отдельный тестовый файл с ранее предоставленным тестовым кодом и сохраните его с расширением .py. Когда у вас будут готовы оба файла, вы можете запустить тестовый файл с помощью команды pytest, чтобы запустить тест и проверить, проходит ли он тест или нет. Вот шаги, которые вы можете выполнить:

Создайте новый файл с именем terraform-aws-ec2.tf и вставьте в него следующий код:

provider "aws" {
  region = "us-west-2"
}

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

  tags = {
    Name = "example-instance"
  }
}

Сохраните файл, а затем создайте новый файл с именем test_aws_ec2_instance.py и вставьте в него следующий тестовый код:

import pytest
import boto3

def test_ec2_instance():
    ec2 = boto3.client('ec2', region_name='us-west-2')
    instances = ec2.describe_instances(Filters=[{'Name': 'tag:Name', 'Values': ['example-instance']}])['Reservations'][0]['Instances']
    instance = instances[0]

    assert instance['InstanceType'] == 't2.micro'
    assert instance['ImageId'] == 'ami-0ami_1234367789798'
    assert instance['State']['Name'] == 'running'

Сохраните файл, откройте командную строку или терминал и перейдите в каталог, в котором вы сохранили оба файла. Выполните следующую команду, чтобы установить необходимые зависимости:

pip install pytest boto3

После установки зависимостей вы должны предоставить доступ к AWS и секретный ключ в качестве переменных среды, или вы можете использовать профиль AWS, настроенный на вашем локальном компьютере.

Вот как вы можете указать доступ к AWS и секретный ключ в качестве переменных среды:

export AWS_ACCESS_KEY_ID=<your_access_key>
export AWS_SECRET_ACCESS_KEY=<your_secret_key>

Кроме того, вы можете использовать профиль AWS, настроенный на вашем локальном компьютере. Вы можете создать профиль, выполнив следующую команду:

aws configure --profile <profile_name>

Эта команда предложит вам ввести ключ доступа AWS, секретный ключ, регион по умолчанию и формат вывода. После того, как вы настроили свой профиль, вы можете установить переменную окружения AWS_PROFILE на имя вашего профиля:

export AWS_PROFILE=<profile_name>

После установки соответствующих переменных среды вы можете запустить Terraform локально и пройти аутентификацию с помощью AWS. Запустите следующую команду, чтобы запустить тест:

pytest test_aws_ec2_instance.py

Если тест пройден, вы должны увидеть вывод, подобный следующему:

============================= test session starts ==============================
platform win32 -- Python 3.8.5, pytest-6.2.5, py-1.10.0, pluggy-1.0.0
rootdir: C:\path\to\directory\with\test\and\terraform\files
collected 1 item

test_aws_ec2_instance.py .                                                [100%]

============================== 1 passed in 1.54s ===============================

Поздравляем! Вы успешно протестировали код Terraform для создания экземпляра AWS EC2 с помощью Pytest.

Сделай сам

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

resource "local_file" "example" {
  filename = "example.txt"
  content  = "Hello, world!"
}

Этот файл конфигурации использует тип ресурса с именем local_file Создайте файл с именем «example.txt» и содержимым «Hello, world!».

Чтобы протестировать эту конфигурацию Terraform локально, вы можете выполнить следующие действия:

Установите Terraform на свой локальный компьютер

Вы можете выполнить следующие шаги, чтобы установить Terraform в Ubuntu через командную строку. Обновите индекс пакета:

sudo apt update

Установите утилиту unzip, которая будет использоваться для распаковки архива Terraform:

sudo apt install unzip

Загрузите последний пакет Terraform с официального сайта, используя curl. Вы можете найти URL-адрес для загрузки последней версии Terraform на странице загрузки Terraform.

Например, чтобы загрузить Terraform v1.0.9, вы можете использовать следующую команду:

curl -O https://releases.hashicorp.com/terraform/1.0.9/terraform_1.0.9_linux_amd64.zip

Это вывод, который вы увидите:

Разархивируйте загруженный архив, чтобы извлечь бинарный файл Terraform:

unzip terraform_*.zip

Выход:

Переместите двоичный файл terraform в каталог вашей системы PATH, например /usr/local/bin:

sudo mv terraform /usr/local/bin/

Убедитесь, что Terraform установлен правильно, выполнив следующую команду:

terraform version

Это должно вывести версию Terraform, которую вы установили.

Вот и все! Теперь у вас должен быть установлен Terraform в вашей системе Ubuntu и готов к использованию. Далее давайте создадим ваш первый файл терраформирования, применим изменения и протестируем его!

Создайте новый каталог для ваших файлов Terraform и перейдите к нему в терминале. Создайте новый файл с именем main.tf и скопируйте в него указанную выше конфигурацию. Запустите команду terraform init, чтобы инициализировать рабочий каталог.

Запустите команду terraform plan, чтобы увидеть предварительный просмотр изменений, которые будут сделаны.

Запустите команду terraform apply, чтобы применить изменения и создать локальный файл.

Убедитесь, что файл создан, выполнив команду cat example.txt для отображения его содержимого.

Вы должны увидеть сообщение «Hello, world!» в вашем терминале. Вы также можете написать тесты для своей конфигурации Terraform, используя среду тестирования, например pytest. Вот пример теста, который проверяет содержимое локального файла:

import os

def test_local_file():
    with open(os.path.join(os.getcwd(), "example.txt")) as f:
        contents = f.read()
        assert contents == "Hello, world!"

Чтобы запустить этот тест, сохраните его в файл с именем test_main.py в том же каталоге, что и ваш файл main.tf. Затем выполните команду pytest test_main.py. Тест должен быть пройден, указывая на то, что локальный файл был успешно создан и содержит ожидаемое содержимое.

Заключение

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

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

Это все для этой статьи! Не стесняйтесь оставлять отзывы или вопросы в комментариях. Если вы нашли это захватывающим чтением, хлопайте в ладоши и подписывайтесь! Ваше здоровье!