Я пишу Шлем Диаграмма для пользовательского приложения, которое нам нужно будет использовать в различных средах в моей организации.У этого приложения есть несколько частей в Kubernetes (именно поэтому я пишу диаграмму Хелма) и другие части вне K8S, более конкретно различные ресурсы в AWS, которые я кодифицировал как Terraform .
Одним из таких ресурсов является лямбда-функция , которую я использовал для API Gateway .Это означает, что когда я запускаю Terraform в новой среде, он создает функцию Lambda и присоединяет к ней конечную точку шлюза API с новым URL-адресом, который AWS генерирует для этой конечной точки.У меня Terraform записывает этот URL как выходную переменную , и, кроме того, у меня нелокальный бэкэнд , настроенный так, чтобы Terraform сохранял свое состояние удаленно.
То, что я хочу сделать, это связать их обоих прямо из Хелма.Мне нужен способ запуска Terraform, чтобы он вызывал мою лямбду, и таким образом сохраняет сгенерированный URL-адрес шлюза API в своем файле удаленного состояния.Затем, когда я устанавливаю свою диаграмму Хелма, мне бы хотелось, чтобы Хелм был достаточно умен, чтобы автоматически извлекать файл удаленного состояния Terraform, чтобы получить URL-адрес, который необходим конечной точке шлюза API, для использования в качестве переменной в моей диаграмме.
В настоящее время мне нужно либо скопировать и вставить, либо использовать Bash.Я могу сделать это с помощью bash-скрипта, похожего на этот:
#!/bin/bash
terraform init
terraform plan -out=tfplan.out
terraform apply tfplan.out
export WEBHOOK_URL=$(terraform output webhook_url)
helm install ./mychart --set webhook.url="${WEBHOOK_URL}"
Но использование Bash-скрипта для этого не идеально.Он требует, чтобы я запускал его в том же каталоге, что и файлы Terraform (потому что команда вывода должна вызываться из этого каталога), и он не учитывает различные методы аутентификации, которые мы могли бы использовать.Более того, другие разработчики в команде могут захотеть запускать Terraform и Helm напрямую, и им не нужно полагаться на собственный скрипт bash, чтобы сделать это для них.Поскольку этот bash-скрипт эффективно действует как «оператор», а поскольку Helm уже является своего рода оператором, мне интересно, есть ли какой-нибудь способ сделать это полностью в Helm?
Удаленное состояние Terraformфайлы в конечном итоге просто файлы JSON.Я использую бэкэнд Консула, но я так же легко могу использовать бэкэнд S3 или любой другой;в конце дня Terraform где-нибудь проявит свое состояние в виде файла JSON, где (предположительно) Хелм сможет прочитать его и выбрать конкретное выходное значение.За исключением того, что я не уверен, достаточно ли силен Хелм, чтобы сделать это.Просматривая их документацию, я не увидел ничего, кроме написания ваших обычных шаблонов values.yaml для указания значений по умолчанию.Имеются ли в Helm какие-либо функции, связанные с выполнением запросов REST для внешнего JSON?Это то, что можно сделать?