Сейчас в связи с санкциями публичный Terraform репозиторий https://registry.terraform.io блокирует доступ из подсанкционных регионов.

Когда мы пытаемся обойти блокировки на локальных устройствах, это не представляет большой сложности. Например, включив VPN с выходом в другом регионе. Но бывают ситуации, когда включать VPN затруднительно или не целесообразно.

Я столкнулся с этим, когда перестали работать запуски terraform команд в CI/CD процессах, которые запускались в эфемерных контейнерах. Поднимать VPN в контейнере? Поднимать VPN на ноде? Выглядит как overengineering.

Попытка 1

Погуглив, нашёл в интернете сервис, реализующий Provider Network Mirror Protocol. Большой плюс в простоте использования. Достаточно было в домашней директории создать файл .terraformrc:

provider_installation {
    network_mirror {
        url = "https://provider-registry-protocol-name/"
    }
}

и всё работает!

Но с этим подходом было две проблемы:

  • а что там внутри? Исходного кода не вижу. А не внедрят ли мне что-то нехорошее в скачиваемые пакеты?

  • а что если оно в один прекрасный момент умрёт? Все мои процессы встанут.

Риски принял, работал с этим подходом.

Но вот в один прекрасный день всё действительно умерло: закончилась аренда домена того сервиса (не буду уточнять какого). И всё у меня сломалось.

Попытка 2

Нужно было срочно всё завести обратно, завтра отпуск, а ничего не работает.

Первыми на ум пришли прокси и обратный прокси. Обратный прокси проще делается, начал с него. Завёл элементарный nginx с простым proxy_pass в неподсанкционном регионе, оттопырил его в свою сеть и поменял в .terraformrc адрес на свой.

Сначала долго не понимал, почему всё не работает. Потом с удивлением обнаружил, что API Provider Network Mirror Protocol вообще не похож на API самого репозитория (Provider Registry Protocol). Зачем они так сделали — не понятно. Нужен сервис, который будет мапить один API в другой. В интернете такого не нашёл в свободном доступе. Решил написать свой в опенсорс.

Попытка 3. Решение

Итак, написал опенсорс сервис, который реализует протокол Provider Network Mirror Protocol. Любой желающий может его развернуть в своей инфраструктуре и не сомневаться во внутренностях.

Ссылка на исходный код https://github.com/jonasasx/terraform-registry-mirror.

Кому не охота или нет возможности разворачивать его самостоятельно, может воспользоваться моей инсталляцией: https://terraform-registry-mirror.ru/. Пока она запущена в качестве прототипа (не рассчитана на большую нагрузку). Но если увижу к ней интерес, то подготовим к нагрузкам.

Для работы достаточно создать файл в домашней директории .terraformrc:

provider_installation {
    network_mirror {
        url = "https://terraform-registry-mirror.ru/"
    }
}

Это можно легко сделать и в любой CI/CD джобе.

Кому интересно помочь с проектом: добро пожаловать, заводите тикеты, присылайте пулл реквесты, оставляйте комментарии.

Спасибо за внимание!

PS связь со мной: https://t.me/jonasasx

Комментарии (17)


  1. ckpunT
    14.04.2024 08:29
    +6

    Без ВПН можно использовать зеркала Яндекс и Селектел (возможно не только их)


    1. runalsh
      14.04.2024 08:29

      У них нет всех провайдеров, только свои.


      1. ckpunT
        14.04.2024 08:29
        +1

        1. runalsh
          14.04.2024 08:29

          Не хвататет. Вот небольшой проект

          hashicorp/helm,hashicorp/kubernetes,hashicorp/external,hashicorp/null,gavinbunney/kubectl,hashicorp/http,devops-rob/terracurl,hashicorp/template,hashicorp/local,hashicorp/vault,hashicorp/tls


          1. ckpunT
            14.04.2024 08:29
            +3

            если следовать настройкам из доки яндекса, то доступны все


    1. trabl
      14.04.2024 08:29

      Наверное у любого уважающего себя облака в РФ есть свои зеркала. В чём проблема у ТС я так и не понял.


  1. runalsh
    14.04.2024 08:29

    Сначала долго не понимал, почему всё не работает

    Потому что есть 2 репы.

    1. https://releases.hashicorp.com/ она стандартно как у вас в проекте и https://hashicorp-releases.yandexcloud.net/

    2. https://registry.terraform.io/ отсюда берутся json, но через запрос к 1.

    Получилось реализовать через proxy_pass , но помню что возник ещё третий домен (или путь к апи), который пришлось добавлять. К сожалению, всё похоронилось с удалением VPS хостером.

    Пример (не рабочий) есть тут https://terrateam.io/blog/terraform-registry-cache


  1. Tony-Sol
    14.04.2024 08:29
    +2

    https://opentofu.org/ ?

    Terraform в целом после смены типа лицензии стало сложнее использовать, а opentofu, емнип, не блокировал свои реестры

    (осталось дождать вменяемого состояния развития проекта openbao, как альтернативы hashicorp vault)


  1. chemtech
    14.04.2024 08:29

    1. jonasas Автор
      14.04.2024 08:29

      Вот ей я пользовался пока не закончился домен. И её нельзя поставить в свой контур.


  1. oller
    14.04.2024 08:29

    Сейчас без буржуйского vpn как-то совсем грустно

    Все эти полумеры с левыми зеркалами и левыми прокси вызывают больше вопросов, чем дают ответы

    Купить виртуалку и поднять на ней тот же openvpn не составляет проблемы, цена виртуалку 100-300р в месяц, ну и стоит ли искать кучу вариантов обхода, или уже забрать vpn?


    1. jonasas Автор
      14.04.2024 08:29

      Для локального использования — вполне. Но бывают более сложные ситуации, когда так делать нельзя. Например, контур без интернета, но с http прокси, который смотрит в интернет.


    1. VenbergV
      14.04.2024 08:29
      +1

      К большому сожалению, многие VDS/VPS для доступа к hashicorp не подходят. Похоже hashicorp ведет свои черные списки поставщиков услуг.


  1. Angry_Bel
    14.04.2024 08:29
    +1

    А почему не подходит Тофу?

    Да в нем огромное количество минусов, не совсем понятно как он будет двигаться дальше, и будет ли обратная совместимость с терраформ как сейчас.

    Но прямо сейчас все работает из коробки с теми же провайдерами, даже файл состояния можно подсунуть терраформовский и все ок.

    Я долгое время гонял тофу на ежедневных чеках релиза, работает ок, ничего странного не замечено (падает там же на тех же провайдерах с той же вероятностью).

    Там mpl 2.0 - никаких танцев с бубнами и мыслей а вдруг... И вроде как скоро обновятся до 1.7.1 - уйдет не немного проблем.


    1. jonasas Автор
      14.04.2024 08:29

      Надо пробовать.
      Когда вся инфраструктура построена на технологии, переходить на другую (хоть и на словах совместимую) достаточно затратно. По крайней мере дороже, чем поставить зеркало.


      1. Kliffoth
        14.04.2024 08:29

        Интересное наблюдение: с terraform периодически не разворачиваются 2 объекта из нескольких десятков. Причину не удалось выявить, повторный прогон всё исправляет. С Tofu такого не происходило никогда.


      1. shurup
        14.04.2024 08:29

        Когда вся инфраструктура построена на технологии,

        Пару месяцев назад в LinkedIn мелькал вот такой интересный кейс в защиту OpenTofu.