Введение
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 упрощает управление ресурсами инфраструктуры и обеспечивает согласованность и воспроизводимость развертываний инфраструктуры.
Это все для этой статьи! Не стесняйтесь оставлять отзывы или вопросы в комментариях. Если вы нашли это захватывающим чтением, хлопайте в ладоши и подписывайтесь! Ваше здоровье!