Пользователи службы Cloud Assembly, которым необходимо проектировать и запускать интеграции Terraform без подключения к Интернету, могут настроить среду выполнения, используя данный пример.

Примечание: Чтобы получить источник для создания образа, при настройке выполняется кратковременное подключение к Интернету. Если временное подключение невозможно, выполните эти действия вне отключенного сайта.

Этот процесс предполагает, что у вас есть собственный реестр Docker и вы можете получить доступ к его репозиториям без подключения к Интернету.

Создание настраиваемого образа контейнера

  1. Создайте образ настраиваемого контейнера, который содержит двоичные файлы подключаемого модуля поставщика Terraform.

    В следующем файле Dockerfile показан пример создания настраиваемого образа с поставщиком Terraform GCP.

    Для загрузки базового образа projects.registry.vmware.com/vra/terraform:latest в файле Dockerfile требуется доступ через Интернет к реестру VMware Harbor на сайте projects.registry.vmware.com.

    Настройки брандмауэра или прокси-сервера могут вызвать сбой сборки образа. Может потребоваться разрешить доступ к сайту releases.hashicorp.com для загрузки двоичных файлов подключаемого модуля поставщика Terraform. Тем не менее в качестве альтернативы можно использовать частный реестр для предоставления двоичных файлов подключаемого модуля.

    FROM projects.registry.vmware.com/vra/terraform:latest as final
     
    # Create provider plug-in directory
    ARG plugins=/tmp/terraform.d/plugin-cache/linux_amd64
    RUN mkdir -m 777 -p $plugins
      
    # Download and unzip all required provider plug-ins from hashicorp to provider directory
    RUN cd $plugins \
        && wget -q https://releases.hashicorp.com/terraform-provider-google/3.58.0/terraform-provider-google_3.58.0_linux_amd64.zip \
        && unzip *.zip \
        && rm *.zip
      
    # For "terraform init" configure terraform CLI to use provider plug-in directory and not download from internet
    ENV TF_CLI_ARGS_init="-plugin-dir=$plugins -get-plugins=false"
  2. Выполните сборку, проставьте теги и отправьте настраиваемый образ контейнера в свой репозиторий Docker на отключенном сайте.
  3. В Cloud Assembly на отключенном сайте в разделе Инфраструктура > Подключения > Интеграции перейдите к интеграции среды выполнения Terraform.
  4. Создайте или отредактируете параметры контейнера в среде выполнения, чтобы добавить репозиторий для настраиваемого образа контейнера. Созданный настраиваемый образ контейнера в примере имеет имя registry.ourcompany.com/project1/image1:latest.
    Образ контейнера Terraform

Локальное размещение интерфейса командной строки Terraform

  1. Загрузите двоичные файлы интерфейса командной строки Terraform.
  2. Отправьте двоичные файлы интерфейса командной строки Terraform на свой локальный веб-сервер или FTP-сервер.
  3. В службе Cloud Assembly выберите Инфраструктура > Настроить > Версии Terraform.
  4. Создайте или отредактируйте версию Terraform, чтобы она содержала URL-адрес двоичных файлов интерфейса командной строки Terraform, размещенных на вашем локальном сервере.
  5. Если для локального веб-сервера или FTP-сервера требуется проверка подлинности, выберите Базовая проверка подлинности и введите имя пользователя и пароль для доступа к серверу.

    Чтобы изменить тип проверки подлинности, требуется роль администратора облака в Cloud Assembly.

    URL-адрес интерфейса командной строки Terraform

Проектирование и развертывание конфигураций Terraform

При наличии среды выполнения можно добавить файлы конфигурации в Git, спроектировать для них облачные шаблоны и развернуть.

Сведения о начале работы см. в Подготовка Cloud Assembly для конфигураций Terraform.

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

В ходе развертывания откройте развертывание в Cloud Assembly. На вкладке "Журнал" найдите события Terraform и нажмите Показать журналы справа. Если локальный поставщик Terraform работает, в журнале появляются следующие сообщения.

Initializing provider plugins

Terraform has been successfully initialized

Чтобы получить более надежный журнал, можно вручную отредактировать код облачного шаблона и добавить TF_LOG: DEBUG, как показано в примере ниже.

resources:
  terraform:
    type: Cloud.Terraform.Configuration
    properties:
      providers:
        - name: google
          # List of available cloud zones: gcp/us-west1
          cloudZone: gcp/us-west1
      environment:
        # Configure terraform CLI debug log settings
        TF_LOG: DEBUG
      terraformVersion: 0.12.29
      configurationSource:
        repositoryId: fc569ef7-f013-4489-9673-6909a2791071
        commitId: 3e00279a843a6711f7857929144164ef399c7421
        sourceDirectory: gcp-simple

Создание собственного базового образа

VMware иногда обновляет базовый образ на projects.registry.vmware.com/vra/terraform:latest. Он может устарел и может содержать уязвимости.

Чтобы создать собственный базовый образ, используйте следующий файл Dockerfile.

FROM alpine:latest as final
RUN apk add --no-cache git wget curl openssh