Я собираюсь использовать внешний источник данных для создания ресурса AWS, который в настоящее время не поддерживается (подразделение AWS Organizations).Я провожу некоторое тестирование с созданием корзины S3, потому что рабочий процесс похож.Я использую внешний источник данных для вызова сценария bash и передачи параметров (например, имя сегмента, регион).
Сценарий проверяет, существует ли сегмент S3, и, если нет, создаетЭто.Сценарий написан так, чтобы он возвращал успех и т. Д., Если он уже существует.
Я вижу, что сценарий выполняется даже на этапе "terraform plan", и, по-видимому,Аргумент stdin или переменная окружения передаются в сценарий для указания фазы плана / применения / уничтожения.Можно ли это сделать / сделать вывод?В идеале скрипт должен вызываться с «планом», а затем возвращаться, если ресурс уже существует.Затем можно создать фазу «применить», если необходимо.
Возможно ли получить фазу Terraform (планировать / применить / уничтожить) в сценарии?Или другие способы избежать полного запуска сценария на этапе планирования?
В качестве напоминания, в конечном счете, я не пытаюсь создать корзину S3 (потому что я знаю, что уже могу сделать это в Terraform), яхочу создать организационную единицу, но это более простой рабочий процесс для тестирования с ...
Пример кода вызова:
data "external" "create_bucket" {
program = ["bash", "create_bucket.sh"]
query = {
region = "ca-central-1"
bucket_name = "mytestbucket"
}
}
Также попытался использовать local-exec:
Когда у меня есть следующий код вызова:
variable "bucket_name_list" {
type = "list"
default = ["neilp-dummylist-1","neilp-dummylist-2",
"neilp-dummylist-3"]
}
module "local" {
source = "../local"
bucket_name_list = ["${var.bucket_name_list}"]
bucket_region = "ca-central-1"
}
С модулем:
resource "null_resource" "test" {
count = "${length(var.bucket_name_list)}"
provisioner "local-exec" {
command = "aws s3api create-bucket
--bucket
${element(var.bucket_name_list, count.index)}
--create-bucket-configuration
LocationConstraint=${var.bucket_region}"
}
}
Проблема здесь в том, что он просто отслеживает количество записей в bucket_name_list
,и если я изменю значение, но количество записей останется неизменным, он не заметит.