Средства инициализации можно определять только внутри ресурса, но иногда при их выполнении хочется обойтись без привязки к определенному ресурсу. Это можно сделать с помощью сущности под названием null_resource, которая ведет себя как обычный ресурс Terraform, но при этом ничего не создает. Определив средство инициализации для null_resource, вы можете запустить свой скрипт в рамках жизненного цикла Terraform, не привязываясь ни к какому «настоящему» ресурсу:
resource "null_resource" "example" {
provisioner "local-exec" {
command = "echo \"Hello, World from $(uname -smp)\""
}
}
У null_resource есть удобный аргумент под названием triggers, который принимает ассоциативный массив с ключами и значениями. При любом изменении значений ресурс null_resource будет создаваться заново, запуская тем самым все средства инициализации, которые в нем определены. Например, если вы хотите выполнять средство инициализации внутри null_resource при каждом запуске команды terraformapply, можете воспользоваться встроенной функцией uuid(). При каждом вызове внутри аргумента triggers она возвращает новый, свежесгенерированный идентификатор UUID:
resource "null_resource" "example" {
# Используйте UUID, чтобы ресурс null_resource принудительно
# создавался заново при каждом вызове 'terraform apply'
triggers = {
uuid = uuid()
}
provisioner "local-exec" {
command = "echo \"Hello, World from $(uname -smp)\""
}
}
Теперь при каждом выполнении terraformapply будет запускаться средство инициализации local-exec:
Terraform: инфраструктура на уровне кода
·
Евгений Брикман