5.4 KiB
Выполнение домашнего задания по теме "7.3. Основы и принцип работы Terraform".
Q/A
Задание 1
Создадим бэкэнд в S3
Документация по подключению бэкенда s3 к terraform:
Первым шагом необходимо создать сервисный аккаунт по документации. Для этого необходимо выполнить следующую команду:
yc iam service-account create --name my-robot
Следующим шагом нужно добавить сервисному аккаунту роль editor по документации.
Далее необходимо создать новый ключ доступа. Для этого нужно выполнить команду:
yc iam access-key create --service-account-name my-robot
Из вывода необходимо сохранить значения ключей key_id и secret, которыми необходимо заполнить
значения переменных окружения YC_STORAGE_ACCESS_KEY и YC_STORAGE_SECRET_KEY соответственно.
Для удобства, унесём файл с переменными окружения на верхний уровень: .env.example и .env.
Затем необходимо создать новый бакет с именем netology-tf-state в Object Storage по инструкции.
После всех приготовлений нужно вынести конфигурацию провайдера в файл provider.tf и обновить конфигурацию следующим образом:
terraform {
required_providers {
yandex = {
source = "yandex-cloud/yandex"
}
}
required_version = ">= 0.13"
backend "s3" {
endpoint = "storage.yandexcloud.net"
bucket = "netology-tf-state"
region = "ru-central1"
key = "tf/default.tfstate"
access_key = "service_account_access_key_id"
secret_key = "service_account_access_key_secret"
skip_region_validation = true
skip_credentials_validation = true
}
}
provider "yandex" {
token = "auth_token_here"
cloud_id = "cloud_id_here"
folder_id = "folder_id_here"
zone = "ru-central1-a"
}
Как и в прошлый раз, сам провайдер конфигурируется из переменных окружения. При этом настроить backend из переменных окружения напрямую невозможно из-за ограничений terraform.
Для этого необходимо воспользоваться флагом конфигурации -backend-config у команды terraform init.
Таким образом, команда инициализации примет вид:
source .env
cd ./terraform \
&& env $(cat ../.env) terraform init \
-backend-config="access_key=${YC_STORAGE_ACCESS_KEY}" \
-backend-config="secret_key=${YC_STORAGE_SECRET_KEY}"
Задание 2
Инициализируем проект и создаем воркспейсы.
- Выполните
terraform init:
- если был создан бэкэнд в S3, то терраформ создат файл стейтов в S3.
- иначе будет создан локальный файл со стейтами.
- Создайте два воркспейса
stageиprod.- В уже созданный
yandex_compute_instanceдобавьте зависимость типа инстанса от вокспейса, что бы в разных ворскспейсах использовались разныеinstance_type.- Добавим
count. Дляstageдолжен создаться один экземпляр, а дляprodдва.- Создайте рядом еще один
yandex_compute_instance, но теперь определите их количество при помощиfor_each, а неcount.- Что бы при изменении типа инстанса не возникло ситуации, когда не будет ни одного инстанса добавьте параметр жизненного цикла
create_before_destroy = trueв один из рессурсовyandex_compute_instance.- При желании поэкспериментируйте с другими параметрами и рессурсами.
В виде результата работы пришлите:
- Вывод команды
terraform workspace list.- Вывод команды
terraform planдля воркспейсаprod.
// todo