乐趣区

关于运维:20个最佳实践提升Terraform工作流程|Part-2

在上一部分,咱们一起探讨了构建 Terraform 我的项目的一些策略,以及应用 Terraform 治理 IaC 的局部最佳实际。明天,咱们将持续深入研究将 Terraform 代码晋升到新程度的具体要点,心愿可能为你和你的团队提供有意义的提醒和领导。
 

标记资源

当呈现问题或试图找出基础设施的哪一部分导致云费用激增时,弱小且统一的标记策略将提供微小帮忙。您还能够在须要时依据标签制订一些拜访控制策略。像定义命名规定一样,尽量保持一致并始终相应地标记资源。
 

Terraform 参数标签应申明为最初一个参数(如果相干,仅 depends_on 或生命周期参数应在标签之后定义)。
 

在进行标记时,能够定义一些实用于提供者治理的所有资源的default_tags。如果应用的提供程序不反对默认标签,则须要手动将这些标签传递到模块并将它们利用到资源。
 

引入策略即代码(PaC)

随着业务团队和基础设施规模的扩充,对个人用户的信赖通常会升高。这时应该制订一些政策来确保咱们的零碎持续运行且放弃平安。制订政策即代码流程使咱们可能定义大规模平安和可承受的规定,并主动验证这些规定。
 

施行秘密管理策略

当开始应用 Terraform 时,秘密治理可能不是首要任务,但最终还是要回到定义解决秘密的策略。
 

如所有教程所说,切勿以明文模式存储秘密并将其提交到版本控制系统中。能够通过应用 TF_VAR 设置环境变量并应用 sensitive = true 标记敏感变量来传递秘密。
 

或者采纳更成熟的解决方案,即设置一个秘密存储(例如 Hashicorp Vault 或 AWS Secrets Manager)来解决对机密信息的拜访。这样,就能够爱护动态秘密并强制执行加密。还能够抉择更高级的性能,例如密钥轮换和审核日志。不过须要留神的是,这种办法通常会为企业带来应用此托管服务的老本。
 

测试 Terraform 代码

与所有其余代码一样,IaC 代码应该通过相应测试。运行 terraform plan 是验证更改是否能疾速按预期工作的最简略办法。接下来,能够对 Terraform 代码执行一些动态剖析而无需利用它。单元测试也是验证零碎不同局部是否失常运行的一种抉择。
 

另一步骤是将 Terraform linter 集成到 CI/CD 流水线中,并尝试捕捉与云提供商、已弃用的语法、强制施行最佳实际等相干的任何潜在谬误。
 

在正式进行以上步骤前,能够通过启动来设置一些集成测试复制沙箱环境,在此环境中验证所有是否按预期工作,收集后果,而后销毁沙箱,并将其利用到生产中。
 

启用调试 / 故障排除

当呈现问题时,咱们必须疾速无效地收集所有必要的信息来解决问题。你会发现在这些状况下设置 Terraform 日志级别以进行调试很有帮忙。

TF_LOG=DEBUG

还通过设置 TF_LOG_PATH 环境变量将日志保留在文件中。
 

尽可能构建模块

如果社区中没有实用于你的用例的模块,能够尝试构建本人的模块。个别会从一些根底的货色开始构建,随着基础设施的成熟,你可能须要回到简略的模块并向其增加更多功能。当在另一个环境中复制代码时,须要做的就是从该模块创立一个对象,并应用新环境的正确参数去进行填充。
 

应用循环和条件

你的代码应该可能创立资源的多个实例,因而倡议对可能从一种环境更改为另一种环境的实例应用 countfor_each。这样将可能灵便地应用雷同的代码来适应许多不同的用例,并为参数提供通用性。
 

应用函数

除了循环和条件之外,Terraform 函数对于在代码中实现通用性也至关重要。它们使您的代码更加动静并确保您的配置是 DRY(Don’t repeat yourself)的。函数容许您执行各种操作,例如将表达式转换为不同的数据类型、计算长度以及构建简单变量。
 

充分利用动静模块

如果没有动静模块,代码就无奈达到 DRY 状态。当此性能可用时,可能实现依照您喜爱的形式构建资源的灵活性。例如,某些云提供商没有用于平安组规定的专用资源,并且这些规定通常嵌入在平安组自身中。利用动静模块,你只须要更改输出即可。但如果没有动静模块,每当增加新规定时则须要相应更改配置。
 

应用 Terraform WorkSpace

请应用 Terraform Workspace,这样你将可能在不同的环境中重复使用雷同的配置。
 

应用生命周期模块(Lifecycle Block)

有时代码中可能有一些简单的条件。比方,有一个脚本必须在资源标签上更改 Terraform 之外的某些内容(当然并不倡议这样做)。这时能够应用生命周期模块来疏忽标签上的更改,确保不会回滚到以前的版本。
 

如果有些资源,因为某种原因它看似工作失常,但你必须在不停机的状况下从新创立它,那么生命周期模块也能够提供帮忙。这时能够应用 create_before_destroy=true 来实现此目标。
 

应用变量验证

Terraform 在验证变量是否接管正确的输出方面做得十分好,然而如果想要限度某些内容并且没有施行 PaC 该怎么办?这时能够应用变量验证。此验证块存在于变量外部,能够参考 Terraform 官网阐明 [1] 理解更多。
 

灵便利用辅助工具

Terraform 是最罕用和最受青睐的 IaC 工具之一,其社区也是十分宏大且沉闷的。与这个社区一起,有许多辅助工具被发明以帮忙用户更好地应用 Terraform。当然为咱们的工作流程抉择和采纳正确的工具并不是件简略的事,通常须要一个试验阶段。这里咱们总结出一些有用的工具清单供大家参考:

  • tflint – Terraform linter,用于查看打算无奈捕捉的谬误。
  • tfenv – Terraform 版本管理器
  • checkov – Terraform 动态剖析工具
  • terratest – 帮忙您对 Terraform 进行自动化测试的 Go 库
  • pre-commit-terraform – 用于自动化的 pre-commit git hooks
  • terraform-docs – 从模块疾速生成文档
  • atlantis – Terraform 我的项目合作工作流程
  • terraform-cost-estimation – 为您的打算提供老本估算服务
     

利用 IDE 扩大

如果你在编写 Terraform 代码时应用 Visual Studio Code 或任何其余 IDE,则能够利用其扩大来放慢开发过程,并确保代码格局正确。在 vscode 上,您能够应用 Anton Kulikov 构建的 Terraform 扩大。请记住在本地计算机上安装 Terraform 以确保其失常工作。
 

 

总 结

咱们摸索了 Terraform 和 IaC 的许多不同最佳实际,剖析了解决和构建 Terraform 我的项目的各种选项,并理解了采纳辅助工具如何让咱们的生存更轻松。当然这些并不是必须自觉遵循的秘诀,咱们心愿通过这篇文章,可能成为提供领导和提醒并触发你构建本人的最佳 Terraform 工作流程和我的项目的指南。
 

原文链接
https://spacelift.io/blog/terraform-best-practices
参考链接
1.https://developer.hashicorp.com/terraform/language/values/var…

 

退出移动版