【发布时间】:2019-04-05 23:58:10
【问题描述】:
Terraform v0.11.9 + provider.aws v1.41.0
我想知道是否有办法更新不是直接在计划中创建而是由计划中的资源创建的资源。该示例使用 aws_directory_service_directory 创建托管 Active Directory 此过程创建一个安全组,我想将标签添加到安全组。这是我用来创建资源的 sn-p
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 配置程序,但结果不一致,并且在没有硬编码的情况下将标签映射到命令并不起作用。
谢谢
【问题讨论】:
-
这很难! TF 不能直接设置标签,因为它不是创建资源本身。我觉得使用 local-exec provisioner 还是有希望的;你能扩展一下你在那里尝试过的东西吗?
-
所以我尝试了本地提供商,现在似乎可以正常工作了。我将本地提供者从目录服务资源中移出并移到了一个虚拟资源中。 [代码] 资源 "null_resource" "ManagedADTags" { 供应商 "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 小时后接受。
标签: terraform terraform-provider-aws