Terraform v0.11.9+provider.aws v1.41.0
我想知道是否有一种方法可以更新不是直接在计划中创建而是由计划中的资源创建的资源。示例是使用aws_directory_service_directory
创建托管Active 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}"
我不能用它来更新资源。我想将目录中的所有标记添加到安全性中,并更新Name标记。我尝试过使用本地exec provisioner,但结果不一致,并且在没有硬编码的情况下将标记映射到命令也不起作用。
感谢
我将本地提供程序从目录服务资源中移到了一个虚拟资源中。
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 =
为单线(使用format命令可以将整个标签列表发送到资源。Terraform并不"管理"它,但它确实允许我将其作为计划的一部分进行更新。
然后,您可以将aws_ec2_tag
资源与provider属性ignore_tags
结合使用,该资源也适用于非c2资源。请参阅我对这个话题的另一个回答,了解更多细节。
aws已经公开了api,您可以在其中标记资源,而不仅仅是资源。不确定terraform为什么没有实现
也可以点击这个。原来标记是从目录服务传播的。因此,如果您对目录进行了适当的标记,则目录服务中的name标记将应用于安全组。