Как стать автором
Обновить

Terraform в России

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров12K

Сейчас в связи с санкциями публичный 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

Теги:
Хабы:
Всего голосов 19: ↑16 и ↓3+16
Комментарии19

Публикации

Истории

Работа

Ближайшие события

7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань