Files
netology-devops/src/homework/07-terraform/7.3/readme.md

5.4 KiB
Raw Blame History

Выполнение домашнего задания по теме "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

Инициализируем проект и создаем воркспейсы.

  1. Выполните terraform init:
  • если был создан бэкэнд в S3, то терраформ создат файл стейтов в S3.
  • иначе будет создан локальный файл со стейтами.
  1. Создайте два воркспейса stage и prod.
  2. В уже созданный yandex_compute_instance добавьте зависимость типа инстанса от вокспейса, что бы в разных ворскспейсах использовались разные instance_type.
  3. Добавим count. Для stage должен создаться один экземпляр, а для prod два.
  4. Создайте рядом еще один yandex_compute_instance, но теперь определите их количество при помощи for_each, а не count.
  5. Что бы при изменении типа инстанса не возникло ситуации, когда не будет ни одного инстанса добавьте параметр жизненного цикла create_before_destroy = true в один из рессурсов yandex_compute_instance.
  6. При желании поэкспериментируйте с другими параметрами и рессурсами.

В виде результата работы пришлите:

  • Вывод команды terraform workspace list.
  • Вывод команды terraform plan для воркспейса prod.

// todo