Сейчас в связи с санкциями публичный 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)
runalsh
14.04.2024 08:29Сначала долго не понимал, почему всё не работает
Потому что есть 2 репы.
https://releases.hashicorp.com/ она стандартно как у вас в проекте и https://hashicorp-releases.yandexcloud.net/
https://registry.terraform.io/ отсюда берутся json, но через запрос к 1.
Получилось реализовать через proxy_pass , но помню что возник ещё третий домен (или путь к апи), который пришлось добавлять. К сожалению, всё похоронилось с удалением VPS хостером.
Пример (не рабочий) есть тут https://terrateam.io/blog/terraform-registry-cache
Tony-Sol
14.04.2024 08:29+2Terraform в целом после смены типа лицензии стало сложнее использовать, а opentofu, емнип, не блокировал свои реестры
(осталось дождать вменяемого состояния развития проекта openbao, как альтернативы hashicorp vault)
chemtech
14.04.2024 08:29https://registry.comcloud.xyz/ (также доступен как https://registry.nationalcdn.ru/)
jonasas Автор
14.04.2024 08:29Вот ей я пользовался пока не закончился домен. И её нельзя поставить в свой контур.
oller
14.04.2024 08:29Сейчас без буржуйского vpn как-то совсем грустно
Все эти полумеры с левыми зеркалами и левыми прокси вызывают больше вопросов, чем дают ответы
Купить виртуалку и поднять на ней тот же openvpn не составляет проблемы, цена виртуалку 100-300р в месяц, ну и стоит ли искать кучу вариантов обхода, или уже забрать vpn?
jonasas Автор
14.04.2024 08:29Для локального использования — вполне. Но бывают более сложные ситуации, когда так делать нельзя. Например, контур без интернета, но с http прокси, который смотрит в интернет.
VenbergV
14.04.2024 08:29+1К большому сожалению, многие VDS/VPS для доступа к hashicorp не подходят. Похоже hashicorp ведет свои черные списки поставщиков услуг.
Angry_Bel
14.04.2024 08:29+1А почему не подходит Тофу?
Да в нем огромное количество минусов, не совсем понятно как он будет двигаться дальше, и будет ли обратная совместимость с терраформ как сейчас.
Но прямо сейчас все работает из коробки с теми же провайдерами, даже файл состояния можно подсунуть терраформовский и все ок.
Я долгое время гонял тофу на ежедневных чеках релиза, работает ок, ничего странного не замечено (падает там же на тех же провайдерах с той же вероятностью).
Там mpl 2.0 - никаких танцев с бубнами и мыслей а вдруг... И вроде как скоро обновятся до 1.7.1 - уйдет не немного проблем.
jonasas Автор
14.04.2024 08:29Надо пробовать.
Когда вся инфраструктура построена на технологии, переходить на другую (хоть и на словах совместимую) достаточно затратно. По крайней мере дороже, чем поставить зеркало.Kliffoth
14.04.2024 08:29Интересное наблюдение: с terraform периодически не разворачиваются 2 объекта из нескольких десятков. Причину не удалось выявить, повторный прогон всё исправляет. С Tofu такого не происходило никогда.
shurup
14.04.2024 08:29Когда вся инфраструктура построена на технологии,
Пару месяцев назад в LinkedIn мелькал вот такой интересный кейс в защиту OpenTofu.
ckpunT
Без ВПН можно использовать зеркала Яндекс и Селектел (возможно не только их)
runalsh
У них нет всех провайдеров,
только свои.ckpunT
https://hashicorp-releases.yandexcloud.net/terraform-provider-aws/
runalsh
Не хвататет. Вот небольшой проект
hashicorp/helm,hashicorp/kubernetes,hashicorp/external,hashicorp/null,gavinbunney/kubectl,hashicorp/http,devops-rob/terracurl,hashicorp/template,hashicorp/local,hashicorp/vault,hashicorp/tls
ckpunT
если следовать настройкам из доки яндекса, то доступны все
trabl
Наверное у любого уважающего себя облака в РФ есть свои зеркала. В чём проблема у ТС я так и не понял.