Где я могу запустить terraform?

#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 на запуск. Я бы, конечно, рекомендовал что-то подобное, а не какую-то домашнюю вещь, как в вашем ответе.