#automation #terraform #terraform-provider-aws #terraform-provider-azure #lambda-architecture
#автоматизация #terraform #terraform-поставщик-aws #terraform-provider-azure #лямбда-архитектура
Вопрос:
В основном это исследовательский вопрос, поскольку я не могу найти, где я могу запустить Terraform для своего варианта использования.
Я хочу создать веб-интерфейс, в который я могу ввести данные для настройки, нажать кнопку, и интерфейс сообщит Terraform о создании инфраструктуры. Я понимаю, что могу использовать cli или создать файл .tf, а затем использовать Jenkins для его запуска. Но я ищу способ в основном вызывать команды cli Terraform с помощью событий, таких как лямбда-вызов.
Должен ли я использовать sdk облачного провайдера для этого?
Кто-нибудь делал что-то подобное, и если да, не могли бы вы поделиться своим опытом?
Комментарии:
1. Я не могу понять, что вы имеете в виду под «вызовом команд командной строки Terraform с помощью событий, таких как лямбда-вызов». Можете ли вы объяснить это более четко?
2. Привет @Charlew, не уверен, как лучше объяснить это, если честно. Нам нужен cli Terraform, чтобы фактически использовать его из того, что я собрал, я хочу, чтобы пользовательский интерфейс запускал Terraform одним нажатием кнопки, запускал скрипт. Я пытаюсь сделать это как можно более бессерверным, но думаю, что контейнер с Terraform кажется единственным вариантом. Но как я могу вызвать команды Terraform одним нажатием кнопки?
3. Вам нужно создать интерфейс, чтобы показывать кнопки, которые вы хотите, клиенту, и серверную часть, чтобы это сбывалось, когда клиент нажимает соответствующую кнопку. Это нормально, что вы запускаете серверную часть в контейнере. Многие языки могут достичь этого. Все зависит от вас.
4. И как можно запустить команду cli в контейнере, не выполняя ее вручную самостоятельно?
5. После нажатия кнопки. С интерфейсом все в порядке, я просто не могу понять, как заставить контейнер работать с cli. Возможно, передать ему параметр?
Ответ №1:
Вы можете использовать SLD (Stack-Lifecycle-Deployment)
У него очень классный пользовательский интерфейс и rest api
Ответ №2:
Я думаю, что нашел что-то действительно полезное!
Вызов Lambda Terraform с использованием Python
Это было бы то, что я имел в виду, сгенерируйте файл плана Terraform, поместите его в корзину S3, а затем вызовите лямбда-вызов для запуска инфраструктуры. И все это можно сделать с помощью настройки конфигурации интерфейса и вызова API.
Я надеюсь, что это пригодится некоторым другим людям, и как только у меня это заработает, я мог бы вернуться и добавить к этому.
Комментарии:
1. Вы также можете заставить экземпляры EC2 запускать terraform plan и apply в вашей системе cicd.
2. Привет, @turtlesallday, спасибо, что прислали свой вариант. Да, это был бы мой отказоустойчивый переход, если бы я не смог заставить его работать с тем, что я имел в виду. Я пытаюсь сделать это решение как можно более бессерверным. Платите только за используемые вычисления или ресурсы. Это будет непросто, но я очень рад попытаться справиться с этим 🙂
3. Ваша проблема будет заключаться в том, что Terraform потребуется более 15 минут максимального времени выполнения лямбда-функции, потому что вы хотите сделать что-то вроде создания дистрибутива Cloudfront или домена Elasticsearch. Тогда Terraform будет прерван в середине выполнения, что приведет к зависанию ресурсов, не записанных в файл состояния, а файл состояния все еще заблокирован (при условии, что вы используете блокировку состояния, и вы должны), что может быть довольно катастрофическим.
4. @ydaetskcoR — да, похоже, это будет проблемой, и я не могу предположить, что период времени всегда будет одинаковым. Я также думал о Ansible, но опять же, максимальный период времени будет введен. Начинаю больше ориентироваться на контейнеры, запускаемые при событии, а затем выполняю сборку TF :/
5. Я запускаю Terraform как задание Gitlab CI для выполнения развертываний (где Terraform запускается в контейнере), и все в порядке. Наша инфраструктура CI автоматически масштабируется, поэтому нам не нужно много времени на разработку или затрат AWS на запуск. Я бы, конечно, рекомендовал что-то подобное, а не какую-то домашнюю вещь, как в вашем ответе.