Авторизоваться
Аким Солянкин 09.02.2022 Опубликована

Как настроить Azure DevOps с помощью Terraform Cloud/Enterprise? 

В этой статье мы сосредоточимся на том, как развернуть инфраструктуру как код из среды Azure DevOps с помощью Terraform Cloud/Enterprise (TFE).

Для достижения этой цели существует два варианта:

  • Интеграция контроля версий TFE
  • Конвейеры Azure DevOps (ADO) с использованием команд CLI

В обоих вариантах мы развернем простой модуль вывода в Terraform.

output "hello_world" { 
    value = "Hello, World! We used the VSC/CLI workflow for this POC :)"
}

Весь код можно найти в моем репозитории GitHub.

Предположения

Вот некоторые предположения, которые вы должны иметь перед началом:

  • Базовые знания о конвейерах ADO
  • Организация TFE или Terraform Cloud
  • Рабочая область TF

Интеграция контроля версий TFE

Этот подход заключается в связывании конкретной ветки репозитория ADO, содержащей вашу конфигурацию TF, с рабочей областью TF Cloud.

Это можно использовать для автоматизации:

  • Выполнения спекулятивных планов, когда в этой ветке создается запрос на вытягивание.
  • Триггерные очереди TF запускаются, когда фиксация объединяется с этой веткой.

Конвейер ADO с использованием команд CLI

Этот подход имитирует ручные шаги по запуску terraform login и последующему введению токена TFE. Обычно при этом создается следующий файл конфигурации CLI (.terraformrc или terraform.rc):

credentials "app.terraform.io" {
     token = "xxxxxx.yyyyyyy.zzzzzzzzzzzzz"
  }

Чтобы автоматизировать этот шаг в вашем конвейере:

  • Добавьте в файл конфигурации TF значения вашей организации TF и ​​рабочей области:
terraform { 
    backend "remote"{ 
             organization = "YOUR-TFE-ORGANIZATION" #REPLACE_ME
             workspaces { 
                        name = "YOUR-TFE-WORKSPACE" #REPLACE_ME
                        } 
             }
}

Чтобы подключиться к TFE/Cloud, вам необходимо предоставить учетные данные токена API. Как поясняется в документации по TF, предоставленный токен должен быть либо токеном пользователя, либо токеном команды; токены организации нельзя использовать для действий CLI Terraform.

  • Сохраните токен TF API в группе переменных ADO как конфиденциальное значение.
  • Добавьте шаг в начало конвейера ADO для создания файла конфигурации CLI. Расположение файла можно указать с помощью переменной окружения TF_CLI_CONFIG_FILE
variables:
- group: terraform-env

steps:
- script: |
        RC_FILE=".terraformrc"
        cat > ${RC_FILE} << EOF
        credentials "app.terraform.io" {
          token = "$(terraform-api-token)"
        }
        EOF
        mv .terraformrc ~/.terraformrc
        export TF_CLI_CONFIG_FILE="~/.terraformrc"
  name: terraform_cloud_credentials
  displayName: 'Terraform Cloud Credentials'
  • Выполните остальные шаги TF (установка, инициализация, планирование и применение).
  • Добавьте последний шаг, чтобы очистить файл конфигурации CLI.

Полный конвейер ADO должен выглядеть примерно так:

variables:
- group: terraform-env

steps:
- task: charleszipp.azure-pipelines-tasks-terraform.azure-pipelines-tasks-terraform-installer.TerraformInstaller@0
  displayName: 'Use Terraform latest'

- script: |
        RC_FILE=".terraformrc"
        cat > ${RC_FILE} << EOF
        credentials "app.terraform.io" {
          token = "$(terraform-api-token)"
        }
        EOF
        mv .terraformrc ~/.terraformrc
        export TF_CLI_CONFIG_FILE="~/.terraformrc"
  name: terraform_cloud_credentials
  displayName: 'Terraform Cloud Credentials'

- task: TerraformCLI@0
  inputs:
    command: 'init'
    backendType: 'selfConfigured'
    allowTelemetryCollection: true

- task: TerraformCLI@0
  inputs:
    command: 'plan'
    allowTelemetryCollection: true

- task: TerraformCLI@0
  inputs:
    command: 'apply'
    allowTelemetryCollection: true
- script: |
        rm ~/.terraformrc
  name: terraform_cloud_credentials_cleanup
  displayName: 'Terraform Cloud Credentials Clean Up'

Что касается подхода VC, terraform plan запускает спекулятивный план в облачной рабочей области Terraform, а terraform apply запускает обычный план и применяет.

При запуске конвейера вы должны увидеть запуски «Запущено через CLI» в своей рабочей области:

Результаты запуска
Результаты запуска
Файл состояния
Файл состояния

Полный код можно найти в моем репозитории GitHub.

Коментарии
Авторизоваться что-бы оставить комментарий
Присоединяйся в тусовку
Наш сайт использует файлы cookie для вашего максимального удобства. Пользуясь сайтом, вы даете свое согласие с условиями пользования cookie