Terraform 计划“应用后已知” - 如何知道我的插值是不是成功?
Posted
技术标签:
【中文标题】Terraform 计划“应用后已知” - 如何知道我的插值是不是成功?【英文标题】:Terraform Plan "Known after Apply" - How to know if my interpolation has succeeded?Terraform 计划“应用后已知” - 如何知道我的插值是否成功? 【发布时间】:2021-07-06 17:41:36 【问题描述】:这是我成功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 文档中发现任何内容,因此如果有任何内容,如果有人能指出我的方向,我将不胜感激。
谢谢,
【问题讨论】:
您只需申请并希望获得最好的结果。正如它所说的“应用后知道”。如果可能的话,您可以先在沙盒帐户中的一些虚拟资源上运行此操作以进行测试,但最终您必须申请并查看效果如何。您也可以一个一个地申请individual resources,而不是一次申请。 小澄清:您是否也从 terraform 创建安全组?或者您使用在 terraform 之外创建的现有资源? 【参考方案1】:在 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 无法向您展示它不知道的内容。在这种情况下,如果知道特定值的这些结果是您流程的重要部分,那么您可能决定将配置拆分为两个单独的配置,您将按顺序分别应用它们。然后,您可以使用data sources 允许第二个配置找到由第一个配置创建的任何必要对象。
【讨论】:
以上是关于Terraform 计划“应用后已知” - 如何知道我的插值是不是成功?的主要内容,如果未能解决你的问题,请参考以下文章