我工作的公司的大多数AWS基础设施都是使用Terraform描述和管理的。
我们有几种不同的服务,包括集装箱后端和CDN前端。
从Route53域和名称空间到ELB、ECS和CloudFront,都有很多事情要做
现在发生的问题之一是,主要是因为Route53 DNS,检查、刷新和验证地形状态需要很长时间。
这就是我们试图解决的问题:
如何大幅减少刷新/检查tf状态所需的时间
将其移动到一个单独的存储库显然不是一个好主意,因为这会使所有与Route53相关的变量都无法访问,或者可能已经过时。
我来这里是因为我在研究一个类似的问题。TF在走图方面似乎很糟糕,所以你的东西越相互关联,它的性能就越差。我有2300个资源。在一台有足够内存和处理器的机器上进行规划需要49分钟才能在没有峰值的情况下以并行度10运行。第三个花费在刷新状态上,这可能无法减少,因为它被AWS CLI调用绑定。但是,在状态刷新之前和之后的第三个时间段似乎主要是TF在图中乱晃(基于日志(。
我发现一些讨论似乎表明,代码的结构可能会极大地影响计划时间,特别是for_each
(链接#1(的使用。由于我的代码库大量使用了这一点,我觉得这很有趣。YMMV;(
您应该将状态分解为具有合理逻辑区别的组件子状态,例如"前端"、"缓存"或任何对公司组织和分类基础设施有意义的状态。
在使变量可访问方面,您可以将其他状态声明为数据源并从中提取(假设它们具有您感兴趣的值的有效输出(。