Я использую Terraform для создания кластера AWS EMR, который использует точечные экземпляры в качестве основных экземпляров.
Я знаю, что могу использовать переменную bid_price
в блоке core_instance_group
на ресурсе aws_emr_cluster
, но я не хочу жестко кодировать цены, так как мне придется менять их вручную каждый раз, когда меняется тип экземпляра .
Используя веб-интерфейс AWS, я могу выбрать «Использовать по требованию в качестве максимальной цены» . Это именно то, что я пытаюсь воспроизвести, но в Terraform.
Сейчас я пытаюсь решить мою проблему, используя источник данных aws_pricing_product
. Вы можете увидеть, что у меня так далеко ниже:
data "aws_pricing_product" "m4_large_price" {
service_code = "AmazonEC2"
filters {
field = "instanceType"
value = "m4.large"
}
filters {
field = "operatingSystem"
value = "Linux"
}
filters {
field = "tenancy"
value = "Shared"
}
filters {
field = "usagetype"
value = "BoxUsage:m4.large"
}
filters {
field = "preInstalledSw"
value = "NA"
}
filters {
field = "location"
value = "US East (N. Virginia)"
}
}
data.aws_pricing_product.m4_large_price.result
возвращает json
, содержащий сведения об одном продукте (вы можете проверить ответ в примере здесь ). Фактическая цена по запросу скрыта где-то внутри этого json, но я не знаю, как ее получить (изображение, сгенерированное с помощью http://jsonviewer.stack.hu/):
Я знаю, что смогу решить эту проблему, используя внешний источник данных и перенаправив выходные данные вызова aws cli к чему-то вроде jq, например:
aws pricing get-products --filters "Type=TERM_MATCH,Field=sku,Value=8VCNEHQMSCQS4P39" --format-version aws_v1 --service-code AmazonEC2 | jq [........]
Но я бы хотел знать, есть ли способ достичь того, что я пытаюсь сделать с помощью чистой Terraform. Заранее спасибо!