Terraform “地形平面图”;“应用后已知”如何知道插值是否成功?

Terraform “地形平面图”;“应用后已知”如何知道插值是否成功?,terraform,terraform-provider-aws,terraform-aws-modules,Terraform,Terraform Provider Aws,Terraform Aws Modules,下面是我成功的地形计划的摘录 ~ primary_network_interface_id = "eni-XXXXXXXXXXXXX -> (known after apply) ~ private_dns = "shshshshshshshshhs" -> (known after apply) ~ private_ip = "XXXXXXXXXXXXXXXX

下面是我成功的
地形计划的摘录

 ~ primary_network_interface_id = "eni-XXXXXXXXXXXXX -> (known after apply)
   ~ private_dns                  = "shshshshshshshshhs" -> (known after apply)
   ~ private_ip                   = "XXXXXXXXXXXXXXXXXX" -> (known after apply)
   + public_dns                   = (known after apply)
   + public_ip                    = (known after apply)
   ~ secondary_private_ips        = [] -> (known after apply)
   ~ security_groups              = [] -> (known after apply)
以上是作为内部模块导入的aws_实例资源的一部分。我打算通过变量
security\u groups
传递一个安全组ID列表,以便在创建资源期间,它将映射到
vpc\u security\u group\u ID
。然而,根据上述计划,我看不出它是如何成功映射的

我的问题是-我如何知道
apply
会起作用<代码>应用后已知在这种情况下是否为50-50?另外,我也没能在TF文档中找到任何东西,所以如果有什么,如果有人能告诉我,我将不胜感激


谢谢,

在Terraform语言中,有一种“未知”值的感觉,平面渲染器显示为
(应用后已知)
,正如我们在这里看到的

未知值源于提供者,期望提供者响应规划请求,返回尽可能多的结果,以根据现有信息进行预测,但将没有更多信息就无法知道的内容标记为“未知”

然后在Terraform语言中,在表达式中执行的任何操作,如果结果需要知道标记为未知的值,则会导致该结果也未知

在您的例子中,似乎您以一种方式构建了这个
security\u组
值,而列表作为一个整体最终是未知的。一个完整的未知列表通常表示我们不知道列表的长度,因为如果我们知道列表的长度,那么它将是一个包含未知值的已知列表,可能如下所示:

 ~ security_groups = [
     + (known after apply),
     + "sg-abc123",
     + (known after apply),
   ]
那么,对于你的问题,最一般的答案是,如果你需要或希望在计划时知道一些事情,那么你需要仔细决定如何计算结果,以便你需要了解计划的信息可以在你需要的地方看到。有时可以这样做,尽管您需要仔细考虑如何确定某些值,例如根据配置中已知的内容确定列表的长度,即使列表中的某些项可能未知

例如,如果您使用设置了
count
的单个资源创建一组对象,则该资源的
length(…)
结果,如
length(aws\u instance.example)
,将始终是一个已知值,因为在规划期间必须始终知道
count
。因此,其他派生操作(如
aws_instance.example[*].id
)可以生成一个包含未知值的已知列表,因此,即使这些值本身未知,您仍然可以验证是否具有预期的元素数


有些情况下,只要你想在一个步骤中应用所有的更改,就没有答案:Terraform无法向你展示它不知道的东西。在这种情况下,如果知道特定值的结果是流程的一个重要部分,那么您可能会决定将配置拆分为两个单独的配置,然后依次应用。然后,您可以使用来允许第二个配置查找由第一个配置创建的任何必要对象。

您只需应用并希望获得最佳效果。正如它所说的“申请后就知道了”。如果可能的话,您可以先在sandbox帐户中的一些虚拟资源上运行此操作进行测试,但最终,您必须应用并查看它是如何运行的。你也可以一个接一个地申请,而不是一次申请所有的东西。