这是我成功的摘录
terraform plan
~ 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_instance
资源的一部分。我打算通过变量 security_groups
传递安全组 ID 列表,以便在资源创建期间,它将映射到 vpc_security_group_ids
。然而,通过上述计划,我看不出它是如何成功映射的。
我的问题是 - 我怎么知道
apply
会起作用? Known after apply
在这种情况下是 50-50 吗?另外,没有在 TF 文档中找到任何内容,所以如果有什么内容,如果有人能指出我的方向,我将不胜感激。
谢谢,
在 Terraform 语言中,有一种值“未知”的感觉,计划渲染器将其显示为
(known after apply)
,正如我们在此处看到的那样。
未知值源自提供者,提供者期望通过返回尽可能多的结果来响应规划请求,这些结果是他们能够根据现有信息预测的,但将他们在没有更多信息的情况下无法知道的任何内容标记为“未知” .
然后,在 Terraform 语言中,您在结果需要知道标记为未知的值的表达式中执行的任何操作都会导致该结果也未知。
在您的情况下,似乎您以列表
作为一个整体最终未知的方式构建了这个
security_groups
值。整个列表未知通常表示我们不知道列表的长度,因为如果我们知道列表的长度,那么它将是一个 known 列表,其中包含 unknown 值,可能像这样:
~ security_groups = [
+ (known after apply),
+ "sg-abc123",
+ (known after apply),
]
对于您的问题,最一般的答案是,如果您需要或希望在计划时了解某些信息,那么您需要仔细决定如何计算该结果,以便可以了解计划所需的信息。在您需要的地方可见。有时,尽管仔细考虑如何确定某些值,例如根据配置中已知的内容确定列表的长度,即使列表中的某些项目可能未知,也可以做到这一点。
例如,如果您使用设置了
count
的单个资源创建一组对象,则该资源的 length(...)
结果(如 length(aws_instance.example)
)将始终是已知值,因为 count
必须始终是已知的在计划期间。因此,其他派生操作(如 aws_instance.example[*].id
)可以生成包含未知值的已知列表,因此即使值本身未知,您仍然可以验证您是否拥有预期的元素数量。
在某些情况下,只要您想一步应用所有更改,就没有答案:Terraform 无法向您显示它不知道的内容。在这种情况下,如果了解特定值的结果是流程的重要组成部分,那么您可能会决定将配置拆分为两个单独的配置,然后按顺序单独应用。然后,您可以使用数据源允许第二个配置找到第一个配置创建的任何必要的对象。
depends_on
)。
即使依赖关系是隐式的,然后添加为显式依赖关系,也会发生这种情况。因此,理想情况下,如果不需要,请删除所有显式依赖项。