Создание базового шаблона Terraform в Azure с использованием Yeoman

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

Из этой статьи вы узнаете, как использовать Terraform с Yeoman. Terraform — это инструмент для создания инфраструктуры в Azure. Yeoman упрощает создание модулей Terraform.

В этой статье вы узнаете, как выполнить следующие задачи:

  • Создание базового шаблона Terraform с помощью генератора модулей Yeoman.
  • Тестирование шаблона Terraform с помощью двух различных методов.
  • Запуск модуля Terraform с помощью файла Docker.
  • Запуск модуля Terraform в собственном режиме в Azure Cloud Shell.

1. Настройка среды

  • Visual Studio Code: скачайте Visual Studio Code для своей платформы.

  • Docker: установите Docker для запуска модуля, созданного генератором Yeoman.

  • Язык программирования Go. Установка Go в качестве тестовых случаев, созданных Yeoman, — это код с помощью языка Go.

  • Nodejs:Install Node.js

  • Установка Yeoman. Выполните следующую команду: npm install -g yo.

  • Шаблон Yeoman. Выполните следующую команду, чтобы установить шаблон Yeoman для модуля Terraform: npm install -g generator-az-terra-module.

2. Создание каталога для модуля, созданного Yeoman

Шаблон Yeoman создает файлы в текущем каталоге. По этому вам необходимо создать каталог.

Этот пустой каталог необходимо поместить под $GOPATH/src. Дополнительные сведения об этом пути см. в статье Настройка GOPATH.

  1. Перейдите к родительскому каталогу, из которого нужно создать новый каталог.

  2. Выполните следующую команду, заменив заполнитель. В этом примере используется имя каталога GeneratorDocSample.

    mkdir <new-directory-name>
    

    mkdir

  3. Перейдите в новый каталог:

    cd <new-directory-name>
    

    Navigate to your new directory

3. Создание шаблона базового модуля

  1. Выполните следующую команду:

    yo az-terra-module
    
  2. Чтобы предоставить следующие сведения, следуйте инструкциям на экране.

    • Имя проекта модуля Terraform — для примера используется значение doc-sample-module.

      Project name

    • Использовать файл образа Docker? Введите y. Если ввести n, созданный код модуля будет поддерживать выполнение только в собственном режиме.

      Include Docker image file?

  3. Для просмотра созданных конечных файлов, перечислите содержимое каталога.

    ls
    

    List created files

4. Просмотр созданного кода модуля

  1. Запустите Visual Studio Code.

  2. В строке меню выберите "Открыть папку" > и выберите созданную папку.

    Visual Studio Code

Следующие файлы созданы генератором модуля Yeoman:

  • main.tf — определяет модуль, именуемый random-shuffle. Входные данные — это string_list. Выходные данные — это количество перестановок.
  • variables.tf — определяет входные и выходные переменные, которые использует модуль.
  • outputs.tf — определяет выходные данные модуля. Здесь это значение, возвращаемое random_shuffle, которое является встроенным модулем Terraform.
  • Rakefile — определяет шаги сборки. К этим действиям относятся:
    • build — проверяет форматирование файла main.tf.
    • unit — сгенерированная структура модуля не содержит код для модульного теста. Чтобы добавить здесь код, необходимо указать сценарий модульного теста.
    • e2e — запускает комплексный тест модуля.
  • test
    • Тестовые случаи написаны на языке Go.
    • Все коды в тесте — комплексные.
    • Комплексные тесты пытаются подготавливать все элементы, определенные в разделе fixture. Результаты в файле template_output.go сравниваются с предварительно определенными ожидаемыми значениями.
    • Gopkg.lock и Gopkg.toml: определяет зависимости.

Дополнительные сведения о генераторе Yeoman для Azure https://github.com/Azure/generator-az-terra-module см. в документации по Terratest.

5. Тестирование модуля Terraform с помощью файла Docker

В этом разделе показано, как тестировать модуль Terraform с помощью файла Docker.

Примечание.

В этом примере модуль выполняется не в Azure, а локально.

Убедитесь, что Docker установлен и запущен

Из командной строки введите docker version.

Docker version

Полученный результат подтверждает, что платформа Docker установлена.

Введите docker info, чтобы убедиться, что Docker действительно запущен.

Docker info

Настройка контейнера Docker

  1. Из командной строки введите

    docker build --build-arg BUILD_ARM_SUBSCRIPTION_ID= --build-arg BUILD_ARM_CLIENT_ID= --build-arg BUILD_ARM_CLIENT_SECRET= --build-arg BUILD_ARM_TENANT_ID= -t terra-mod-example ..

    Будет отображаться сообщение Успешно создан

    Message indicating a successful build

  2. В командной строке введите docker image ls, чтобы увидеть в списке созданный модуль terra-mod-example.

    List containing the new module

  3. Введите docker run -it terra-mod-example /bin/sh. После выполнения команды docker run вы перейдете в среду Docker. На этом этапе файл можно обнаружить с помощью команды ls.

    File list in Docker

Сборка модуля

  1. Выполните следующую команду:

    bundle install
    
  2. Выполните следующую команду:

    rake build
    

    Rake build

Запуск комплексного теста

  1. Выполните следующую команду:

    rake e2e
    
  2. Через несколько секунд появится сообщение Проверка пройдена.

    PASS

  3. Введите exit, чтобы завершить тест и выйти из среды Docker.

6. Создание и тестирование модуля с использованием генератора Yeoman

В этом разделе вы создадите и протестируете модуль в Cloud Shell, используя генератор Yeoman. Использование Cloud Shell вместо файла Docker значительно упрощает процесс. При использовании Cloud Shell все перечисленные ниже продукты предварительно установлены.

  • Node.js
  • Yeoman
  • Terraform

Запуск сеанса Cloud Shell

  1. Запустите сеанс Azure Cloud Shell через портал Azure, shell.azure.com или мобильное приложение Azure.

  2. Откроется страница приветствия Azure Cloud Shell. Выберите Bash (Linux).

    Welcome to Azure Cloud Shell

  3. Если вы еще не настроили учетную запись хранения Azure, откроется следующий экран. Щелкните Создать хранилище.

    You have no storage mounted

  4. Azure Cloud Shell запускается в оболочке, которую вы выбрали ранее, и отображает сведения о только что созданном облачном диске.

    Your cloud drive has been created

Подготовка каталога для хранения модуля Terraform

  1. На этом этапе служба Cloud Shell уже настроила для вас расположение GOPATH в переменных среды. Введите go env, чтобы увидеть путь.

  2. Создайте каталог $GOPATH, если он еще не существует: ВВОД mkdir ~/go.

  3. Создайте каталог в каталоге $GOPATH. Этот каталог используется для хранения различных каталогов проектов, созданных в этом примере.

    mkdir ~/go/src
    
  4. Создайте каталог для хранения модуля Terraform, заменив заполнитель. В этом примере используется имя каталога my-module-name.

    mkdir ~/go/src/<your-module-name>
    
  5. Перейдите в каталог модуля:

    cd ~/go/src/<your-module-name>
    

Создание и тестирование модуля Terraform

  1. Выполните следующую команду и следуйте инструкциям. Когда появится вопрос о необходимости создания файлов Docker, введите N.

    yo az-terra-module
    
  2. Выполните следующую команду, чтобы установить зависимости:

    bundle install
    
  3. Запустите сборку модуля с помощью следующей команды:

    rake build
    

    Rake build

  4. Запустите тест с помощью следующей команды:

    rake e2e
    

    Test-pass results

Устранение неполадок с Terraform в Azure

Устранение распространенных проблем при использовании Terraform в Azure

Следующие шаги