Я работаю над веб-сервисом, размещенным на AWS, который позволяет пользователю раскручивать ящик, выполнять над ним работу, а затем снова вращать ящик. поскольку это зависит от исключительного использования графического процессора, это не проблема стандартных контейнеров + ELB - задача должна быть единственной, что выполняется в этом блоке, и когда она завершится, я хочу завершить работу экземпляра.
Я покопался в Terraform, но похоже, что природа его состояния затрудняет вращение таких ящиков (мне пришлось бы постоянно изменять файл .tf, чтобы добавлять или удалять машины). я прав насчет этого?
в идеале мне нужен вызов ip_address_of_new_box = api.provisionNewBoxInVPCAndRunContainer (). Затем я мог бы поместить этот IP-адрес в свою базу данных, и служба будет опрашивать его, пока не завершит свою задачу, и в это время она вызовет "api.shutDownBox (ip_address_of_new_box)"
я должен отказаться от управления этим вручную с помощью Boto или есть что-то умное, что я могу здесь сделать?
Спасибо!
Ваша проблема здесь определенно не в "стандартном" варианте использования Terraform. Кажется, что это разбивается на три подзадачи:
Terraform может помочь вам решить подзадачи 1 и 3 с помощью несколько необычного использования:
terraform apply
чтобы создать экземпляр и спрятать файл состояния где-нибудь, чтобы его можно было найти после завершения задания.terraform destroy
, чтобы выключить экземпляр.Предполагается, что этот процесс завершается каким-то сценарием оркестрации, использующим Terraform в качестве реализации шагов 1 и 3.
Terraform вносит в таблицу здесь автоматическое поддержание состояния (в данном случае только идентификатор экземпляра), так что экземпляр может быть полностью отключен, хотя, если вы уверены, что экземпляр EC2 - это все, что вам когда-либо понадобится, Terraform - это скорее всего, здесь будет излишним, по сравнению с простым использованием API EC2 напрямую и сохранением идентификатора экземпляра и IP-адреса самостоятельно в каком-то хранилище для конкретного приложения.
Другой вариант - использовать внешнюю службу оркестровки, например AWS Data Pipeline, которые могут координировать процесс запуск экземпляра, запустив на нем вычислительную задачу, сохранив где-нибудь результат, а затем выключив экземпляр.
В этом случае будет одноразовая задача по настройке самого конвейера данных и связанного с ним Task Runner, который запустит ваш экземпляр EC2, а затем постоянное использование будет включать запуск конвейера с помощью API конвейера данных.
В принципе, Terraform можно использовать для координации одноразовой настройки конвейера данных и текущих изменений его конфигурации. Однако на момент написания Terraform еще не поддерживает Data Pipeline, поэтому потребуется альтернативный подход.