02
19
06
43
为了账号安全,请及时绑定邮箱和手机立即绑定

初学Terraform时我就希望知道的5个最佳实践技巧

标签:
云计算 容器
简介:

嘿,我是 Bobby,一名 DevOps 工程师,并且是 《Terraform 入门电子书》 的作者。

在这篇文章里,我将分享五个我希望在刚开始使用Terraform时就了解的最佳实践,这五个实践是关于Terraform的。这些建议将帮助你编写更干净、更易维护的基础设施即代码,并避免可能导致部署麻烦的常见错误。

前提条件

要跟上,你需要:

你应准备好。

  • Terraform的基本知识
  • 您系统上已安装的Terraform

如果你是刚接触 Terraform,我非常推荐你看我的《Terraform 入门指南》(这本书从基础讲起,一直到大规模基础设施管理),确保使用“Terraform”时都保持大写,以符合技术术语的习惯用法。

此处为空

始终使用远程状态存储

默认而言,Terraform 将状态文件 (terraform.tfstate) 存储在本地。但是,在实际项目中,这样做并不理想,因为:

  1. 本地状态文件可能会丢失,导致数据不一致的问题。
  2. 团队合作时需要一个共享状态以防止冲突。
  3. 如果状态文件没有得到妥善保护,敏感数据可能会泄露。

更好的做法是借助 Terraform Cloud、S3 等工具将您的状态存储在远程位置。

在 AWS S3 中存储 Terraform 状态示例

以下是一个Terraform配置示例,定义了S3后端的配置信息:
terraform {
  backend "s3" {
    bucket         = "my-terraform-state"  // 存储桶 = "my-terraform-state"
    key            = "state/terraform.tfstate"  // 键 = "state/terraform.tfstate"
    region         = "us-east-1"  // 区域 = "us-east-1"
    encrypt        = true  // 加密 = true
    dynamodb_table = "terraform-lock"  // DynamoDB表 = "terraform-lock"
  }
}

全屏模式, 退出全屏

这种设置:

  • 将状态文件存放在 AWS S3 中。
  • 对状态文件进行加密以确保安全。
  • 使用 DynamoDB 进行状态锁定,防止同时更新。

💡 小贴士: 如果你在使用 Terraform Cloud,它自带远程状态存储和锁定机制。

此处省略此处省略内容……

使用模块保持代码简洁(DRY)

最常见的 Terraform 错误之一是从一个项目复制粘贴 🍝 基础设施脚本到其他项目。相反,你应该这样做:使用 Terraform 模块来保持你的配置既可重用又易于维护。

比如说,不用为每个EC2实例重复写相同的代码,而是可以创建一个复用模块:

主模块目录结构示例:
modules/
  ec2-instance/
    main.tf
    variables.tf
    outputs.tf

点击这里切换到全屏模式,点击这里退出全屏

示例模块:简易的 EC2 模块 (main.tf)

    资源 "aws_instance" "web" {
      ami           = var.ami_id
      instance_type = var.instance_type
      标签 = {
        名称 = var.name
      }
    }

进入全屏,退出全屏

然后,在你的主的 Terraform 配置文件中,你可以调用这个模块:

    模块定义 "web_server" {
      来源路径        = "./modules/ec2-instance"
      ami_id        = "ami-12345678"
      instance_type = "t2.micro"
      实例名称      = "web-server"
    }

点击进入全屏模式 点击退出全屏模式

使用模块的好处有:包括

  • 一次定义基础设施并多次使用。
  • 只需修改单个模块,无需更新多个文件。
  • 保持你的主要配置文件简洁清晰。

    • *
第三步:实现 Terraform 工作空间以支持多环境部署

在管理多个环境(例如开发、测试、生产)时,很多人最初会直接复制粘贴 Terraform 文件。这将导致配置漂移和不一致。

更好的方法是使用Terraform工作区,这样你可以用同一份代码管理不同的环境配置。

示例:切换工作空间

terraform workspace new 测试环境
terraform workspace list
terraform workspace select 测试环境

您可以进入全屏模式,也可以退出全屏模式。

您可以在 Terraform 配置文件中使用 terraform.workspace

定义一个名为 example  aws_s3_bucket 资源,桶名设置为 "my-app-${terraform.workspace}"
// 注意:${terraform.workspace} 是 Terraform 工作区的占位符

进入全屏 退出全屏

这会根据工作区,如 my-app-devmy-app-staging 等,自动创建不同的 S3 存储桶。

💡 小贴士: 若你需要更复杂的环境配置,考虑使用独立的状态配置文件而不是工作区内的配置。


第 4 步 — 锁定提供者的版本以防止意外中断服务

Terraform 提供程序更新频繁,这些更新会引入不兼容的更改。如果不固定提供程序版本,运行 terraform apply 时,你的基础设施可能会突然无法运行。

例子:固定 Provider 版本

    terraform {
      required_providers {
        aws = {
          source  = "hashicorp/aws"
          version = "~> 5.0" # 锁定版本5
        }
      }

      required_version = ">= 1.5.0"
    }

点击这里进入全屏 点击这里退出全屏

这样一来:
通过这种方式:

  • 你在运行 Terraform 命令时防止意外变更。
  • 你的基础设施每次部署都能保持稳定。

💡 小贴士: 在将提供者版本更新到生产环境之前,最好先在单独的分支中测试更新。


在应用更改前使用 Terraform 进行 validate 和 format 检查(验证和格式化)

在运行 terraform apply 之前,最好先验证并格式化你的 Terraform 配置文件,以便尽早发现问题。

使用 terraform fmtterraform validate 检查代码格式和验证

terraform fmt, 使代码自动格式化,使其更规范  # 
terraform validate, 检查语法错误并确保代码正确无误  #

切换到全屏 退出全屏

也可以在 CI/CD 流水线中自动化此步骤,以确保代码的一致性。

    name: Terraform CI

    on: [push]

    jobs:
      validate:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v2
        - name: 配置 Terraform
          uses: hashicorp/setup-terraform@v1
        - name: 验证 Terraform
          run: terraform validate

切换到全屏模式 退出全屏模式

使用这些命令能确保...

  • 你的 Terraform 代码符合最佳实践。
  • 你在应用更改前就能发现问题。
  • 你的团队使用统一的代码风格。

    • *
小贴士:确保秘密安全通过环境变量

Terraform配置经常需要API密钥、密码和数据库凭据。在.tf文件中硬编码这些敏感信息存在重大安全隐患。

相反,建议使用环境变量或密钥管理工具。

环境变量示例

导出 TF_VAR_db_password="supersecretpassword" (设置数据库密码)
运行 terraform apply (应用配置)

切换到全屏模式,退出全屏

在 Terraform 中

    variable "db_password" {}

    resource "aws_db_instance" "example" {
      password = var.db_password
    }

全屏查看 退出全屏

更好的是,使用HashiCorp Vault或其他类似的密钥管理工具来安全地管理密钥。


总结

这些五个最佳实践:使用远程状态管理、利用模块、使用工作区、锁定提供器版本以及验证Terraform配置,将帮助你更高效地管理你的基础设施。

想深入了解Terraform的朋友,可以看看我的付费电子书(ebook)

👉 Terraform入门:

而且如果你正在 DigitalOcean 上搭建你的 Terraform 基础架构,你可以享受 $200 的免费信用额度 开始吧!

祝你地球改造愉快!🚀

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

0 评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消