Terraform v0.11.9 + Providerr.aws v1.41.0
Я хочу знать, есть ли способ обновить ресурс, который создается не непосредственно в плане, а ресурсом в плане. Примером является создание управляемой Active Directory с помощью aws_directory_service_directory. Этот процесс создает группу безопасности, и я хочу добавить теги в группу безопасности. Вот фрагмент, который я использую для создания ресурса
resource "aws_directory_service_directory" "NewDS" {
name = "${local.DSFQDN}"
password = "${var.ADPassword}"
size = "Large"
type = "MicrosoftAD"
short_name = "${local.DSShortName}"
vpc_settings {
vpc_id = "${aws_vpc.this.id}"
subnet_ids = ["${aws_subnet.private.0.id}",
"${aws_subnet.private.1.id}",
]
}
tags = "${merge(var.tags, var.ds_tags, map("Name", format("%s", local.VPCname)))}"
}
Я могу ссылаться на недавно созданную группу безопасности, используя
"${aws_directory_service_directory.NewDS.security_group_id}"
Я не могу использовать это для обновления ресурса. Я хочу добавить все теги, которые у меня есть в каталоге, в систему безопасности, а также обновить тег имени. Я пробовал использовать средство обеспечения local-exec, но результаты не были согласованными, и получение карты тегов для команды без жесткого кодирования не сработало.
Спасибо
Итак, я попробовал местного провайдера, и теперь, похоже, он работает. Я переместил локального провайдера из ресурса службы каталогов в фиктивный ресурс. [код] ресурс "null_resource" "ManagedADTags" {Provider "local-exec" {command = "aws --profile $ {var.profile} --region $ {var.region} ec2 create-tags --resources $ {aws_directory_service_directory" .NewDS.security_group_id} --tags Key = Name, Value = $ {format ("$ {local.security_group_prefix} -% s", "ManagedAD")} "}} [code] Использование команды format позволило мне отправить на ресурс весь список тегов.
Большой! Если это решение сработало для вас, вы можете опубликовать его как ответ и даже принять его через 48 часов.





Я переместил локального провайдера из ресурса службы каталогов в фиктивный ресурс.
resource "null_resource" "ManagedADTags"
{
provisioner "local-exec"
{
command = "aws --profile ${var.profile} --region ${var.region} ec2 create-tags --
resources ${aws_directory_service_directory.NewDS.security_group_id} --tags
Key=Name,Value=${format("${local.security_group_prefix}-%s","ManagedAD")}"
}
}
(command = - однострочный)
Использование команды форматирования позволило мне отправить на ресурс весь список тегов. Terraform не «управляет» им, но позволяет мне обновлять его как часть плана.
Просто ударьте и по нему. Оказывается, теги распространяются из службы каталогов. Поэтому, если вы правильно пометите свой каталог, тег имени из вашей службы каталогов будет применен к группе безопасности.
Затем вы можете использовать ресурс aws_ec2_tag, который также работает с ресурсами, отличными от ec2, в сочетании с атрибутом поставщика ignore_tags. Пожалуйста, обратитесь к другой ответ, который я сделал по теме для более подробной информации.
aws уже предоставляет API для этого, где вы можете пометить ресурсы, а не только ресурс. не уверен, почему terraform не реализует это
это сложно! TF не может устанавливать теги напрямую, так как сам ресурс не создается. Я чувствую, что использование средства обеспечения local-exec все еще имеет надежду; Можете ли вы рассказать о том, что вы там пробовали?