Terraform 改善基础架构的十个最佳实践

这篇具有很好参考价值的文章主要介绍了Terraform 改善基础架构的十个最佳实践。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Terraform 是一种非常流行的开源 IaC(基础设施即代码)工具,用于定义和提供完整的基础设施。Terraform 于 2014 年推出,其采用率已在全球范围内快速增长,越来越多的开发人员正在学习 Terraform 并尝试在其组织中部署基础设施。
 

如果您已经开始使用 Terraform,则必须采用最佳实践来更好地配置生产基础设施。本文章将总结10个关于 Terraform 改善基础架构的最佳实践。
 

结构化

当您使用 Terraform 处理大型生产基础设施项目时,需要遵循适当的目录结构来应对项目中可能出现的复杂性。建议为不同目的建立单独的目录。如果您在开发、暂存和生产环境中使用 Terraform,请为每个环境设置单独的目录。
 

Terraform 配置也应该是分开的,因为经过一段时间后,不断增长的基础设施的配置将变得更加复杂。
 

geekflare@geekflare:~$ tree terraform_project/
terraform_project/
├── dev
│ ├── main.tf
│ ├── outputs.tf
│ └── variables.tf
├── modules
│ ├── ec2
│ │ ├── ec2.tf
│ │ └── main.tf
│ └── vpc
│ ├── main.tf
│ └── vpc.tf
├── prod
│ ├── main.tf
│ ├── outputs.tf
│ └── variables.tf
└── stg
├── main.tf
├── outputs.tf
└── variables.tf

6 directories, 13 files

 

您可以在文件 main.tf 本身内编写所有的 Terraform 代码(模块、资源、变量、输出),同时为变量和输出设置单独的 Terraform 代码使其更具可读性和易于理解。
 

命名规则

Terraform 中使用命名规则让资源易于理解、一目了然。
 

例如,假设您要为项目中的不同环境创建三个不同的工作区。与其将环境命名为env1env2env3 ,不如尝试使用devstageprod 来命名。从名称本身来看,很明显每个环境都代表着不同的工作空间。资源、变量、模块等的也遵循类似的规则。
 

Terraform 中的资源名称应以相关资源名称开头,后跟下划线和其他详细信息。例如,用于在 AWS 中为 route table 创建 Terraform 对象的资源名称为 aws_route_table
 

所以如果正确地遵循命名规则,即使是复杂的代码也会更容易理解。
 

使用共享模块

强烈建议使用可用的官方 Terraform 模块。直接使用现有模块,能够有效节省时间和精力。Terraform registry 有很多现成可用的模块,企业可以根据需要对现有模块进行更改。
 

此外,每个模块应该只专注于基础设施的一个方面,比如创建 AWS EC2 实例、设置 MySQL 数据库等。举个例子,如果您想在 terraform 代码中使用 AWS VPC,可以直接使用 -simple VPC
 

module "vpc_example_simple-vpc" {
source
= "terraform-aws-modules/vpc/aws//examples/simple-vpc"
version = "2.48.0"
}

 

使用最新版本

Terraform 开发社区非常活跃,新功能发布频繁。建议在发布新的主要版本时使用最新版本的 Terraform。您可以轻松升级到最新版本。如果跳过多个主要版本,升级将变得非常复杂。
 

运行terraform -v命令以检查版本更新。

geekflare@geekflare:~$ terraform -v
Terraform v0.11.14
Your version of Terraform is out of date! The latest version
is 0.12.0. You can update by downloading from www.terraform.io/downloads.html

 

备份系统状态

请始终备份 Terraform 的状态文件,这些文件跟踪基础设施的元数据和资源。默认情况下,这些名为terraform.tfstate的文件本地存储在工作区目录中。
 

如果没有这些文件,Terraform 将无法确定在基础设施上部署了哪些资源。因此,必须备份状态文件。默认情况下,terraform.tfstate.backup会被创建并用来保存状态文件的备份。
 

geekflare@geekflare:~$ tree terraform_demo/
terraform_demo/
├── awsec2.tf
├── terraform.tfstate
└── terraform.tfstate.backup
0 directories, 3 files

如果要将备份状态文件存储到其他位置,在 terraform 命令中使用-backup标记并提供位置路径。大部分情况下,一个项目会有多个开发人员参与。因此为了让开发人员方便访问状态文件。应该使用terraform_remote_state数据源将其存储在远程位置。
 

以下示例将备份到 S3。
 

data "terraform_remote_state" "vpc" {
backend = "s3"
config = {
bucket = “s3-terraform-bucket”
key = “vpc/terraform.tfstate"
region = “us-east-1”
   }
}

 

锁定状态文件

可能有多个场景,其中不止一个开发人员试图同时运行 Terraform 配置。这可能导致 terraform 状态文件损坏甚至数据丢失。锁定机制能够有效防止此类情况发生,确保一次只有一个人在运行 terraform 配置,并且没有冲突。
 

下面是使用 DynamoDB 锁定位于远程位置的状态文件的示例。
 

resource “aws_dynamodb_table” “terraform_state_lock” {
name = “terraform-locking”
read_capacity = 3
write_capacity = 3
hash_key = “LockingID”

attribute {
name = “LockingID”
type = “S”
   }

}
terraform {
backend “s3” {
bucket = “s3-terraform-bucket”
key = “vpc/terraform.tfstate”
region = “us-east-2”
dynamodb_table = “terraform-locking”
   }
}

 
当多个用户尝试访问状态文件时,DynamoDB 数据库名称和主键将用于状态锁定并保持一致性。注意:并非所有后端都支持锁定。
 

使用自变量

self变量是一种特殊的变量,当您在部署基础设施之前不知道变量的值时可以使用它。假设您要使用仅在 terraform apply 命令后部署的实例的 IP 地址,也就是在它启动并运行之前您是不知道 IP 地址的。
 

在这种情况下,您可以使用自变量self.ATTRIBUTE。在这个例子中,您可以使用self.ipv4_address作为自变量来获取实例的 IP 地址。这些变量只允许在 terraform 配置的连接和配置块上使用。
 

connection {
host = self.ipv4_address
type = "ssh"
user = var.users[2]
private_key = file(var.private_key_path)
}

 

最小化爆炸半径

爆炸半径(Blast Radius)是衡量如果流程没有按计划进行时可能发生的损害的量度。
 

例如,如果您在基础设施上部署了一些 Terraform 配置,但配置没有得到正确应用,那么对基础设施造成的损害会有多大。因此,为了尽量减少故障影响范围,建议每次配置的基础设施数量不宜过多。即便出现问题,对基础设施的损害也能控制在较小范围,并且可以迅速得到纠正。一次性配置大量基础设施是非常危险的
 

使用 var 文件

在 terraform 中,您可以创建一个带有扩展名的文件<em>.</em>tfvars,并使用-var-file此文件传递给 terraform apply 命令。这个方式可以帮助您传递那些您不想放入 terraform 配置代码中的变量。
 

始终建议通过-var-file在本地传递密码、密钥等变量,而不是将其保存在 terraform 配置或远程位置版本控制系统中。
 

例如,如果您想使用 terraform 启动 ec2 实例,您可以使用-var-file传递访问密钥和其他机密信息。创建文件 terraform.tfvars 并将密钥放入此文件中。
 

geekflare@geekflare:~$ gedit terraform.tfvars

access_key = "AKIATYWSDFYU5DUDJI5F"
secret_key = "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"

 
然后在 terraform 命令中使用这个 var 文件。
 

geekflare@geekflare:~$ terraform apply -var-file=/home/geekflare/terraform.tfvars

 

使用 Docker

当您运行 CI/CD 流水线构建作业时,建议使用 docker 容器。Terraform 提供了可以直接使用的官方 Docker 容器。如果需要更改 CI/CD 服务器,您可以轻松地在容器内传递基础设施。
 

在生产环境上部署基础设施之前,您还可以在 docker 容器上测试基础设施,非常容易部署。通过结合 Terraform 和 Docker,您可以获得可移植、可重用、可重复的基础设施。
 

参考链接:
https://geekflare.com/terraform-best-practices/文章来源地址https://www.toymoban.com/news/detail-476673.html

到了这里,关于Terraform 改善基础架构的十个最佳实践的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 云计算:从基础架构原理到最佳实践之:云计算架构设计与规划

    作者:禅与计算机程序设计艺术 云计算是指利用网络将地理分布的计算机系统、存储设备、应用服务等资源集合起来,通过软件控制其自动化执行,并按需提供所需的计算能力、存储空间及其他资源,实现信息的高速、低成本、弹性可靠地流动和共享。云计算的核心技术包括

    2024年02月08日
    浏览(53)
  • 云计算:从基础架构原理到最佳实践之:云计算监控与优化

    作者:禅与计算机程序设计艺术 云计算(Cloud Computing)是一种利用互联网平台提供的网络服务的模式,基于Internet的基础设施,利用计算机、存储、网络等资源的动态组合,构建、管理和使用信息系统的能力,实现数据的自动处理、自动提取、自动分布式存储、自动调配、自

    2024年02月07日
    浏览(45)
  • 云计算:从基础架构原理到最佳实践之:云计算网络与存储

    作者:禅与计算机程序设计艺术 云计算作为一种新型的服务方式,无疑将会成为下一个发展阶段的计算模式。很多企业或个人都认为云计算将改变传统IT的格局。传统的IT环境主要面临以下三个问题: 1.硬件成本高 云计算需要大量的服务器、存储设备和带宽等资源,因此价格

    2024年02月07日
    浏览(45)
  • 云计算:从基础架构原理到最佳实践之:云计算概述与发展历程

    作者:禅与计算机程序设计艺术 随着信息技术的不断发展,在国际化进程中,越来越多的人们开始把注意力转移到了云计算这个新兴领域,而这一热门技术也带动了一些新的变化。由于云计算的快速发展和普及,使得许多IT企业和开发者都开始关注其背后的技术细节。因此,

    2024年02月08日
    浏览(54)
  • 云计算:从基础架构原理到最佳实践之:云计算服务模型与部署

    作者:禅与计算机程序设计艺术 云计算(Cloud Computing)是一种新兴的基于网络的计算服务方式,它利用廉价、灵活的服务器资源池,向用户提供计算平台、存储、数据库、应用开发等多种服务。云计算的出现使得服务提供商不再依赖于本地服务器,大幅度降低了成本、提升了

    2024年02月04日
    浏览(50)
  • 云计算:从基础架构原理到最佳实践之:云计算容器编排与管理

    作者:禅与计算机程序设计艺术 云计算作为一种新型的信息技术服务已经得到越来越多人们的关注。云计算主要通过利用网络将分布在不同地域的数据中心、服务器、存储设备和应用资源集合起来,并提供给用户高度可靠、高效的服务。云计算的概念从2006年由美国计算机科

    2024年02月04日
    浏览(43)
  • 云计算:从基础架构原理到最佳实践之:云计算备份与灾难恢复

    作者:禅与计算机程序设计艺术 云计算正在快速发展,其带来的新兴模式、技术与工具层出不穷。随着云计算平台规模扩大,越来越多的公司开始采用云计算提供的服务,例如数据库服务、容器服务等。这些云服务由底层的基础设施提供支持,用户只需关注业务逻辑开发,就

    2024年02月08日
    浏览(46)
  • 云计算:从基础架构原理到最佳实践之:云计算容量规划与预测

    作者:禅与计算机程序设计艺术 云计算是当前IT领域的一个热门词汇,特别是在互联网公司崛起、移动互联网蓬勃发展的当下,云计算带动了大数据、机器学习、人工智能等新兴技术的迅速发展。随着云计算的不断发展,各种云产品的出现也促使越来越多的企业转向或考虑云

    2024年02月08日
    浏览(63)
  • 云计算:从基础架构原理到最佳实践之:云计算数据隐私与合规

    作者:禅与计算机程序设计艺术 随着互联网的飞速发展,云计算技术成为服务业不可或缺的一部分。基于云计算的各类应用已成为普及的现象,并且在各行各业中广泛流传。作为行业内知名企业之一,国内外云服务平台都纷纷推出了各自的解决方案。然而,安全、合规等方面

    2024年02月08日
    浏览(58)
  • TCP的十个核心机制

    TCP协议是传输层的重点协议, 负责将数据从发送端传输到接收端. TCP协议是传输控制协议, 顾名思义也就是对数据的传输进行控制的协议. TCP 协议有很多, 我们今天就介绍其最重要的十个核心机制, 即 : 确认应答 超时重传 连接管理 滑动窗口 流量控制 拥塞控制 延迟应答 捎带应

    2024年02月10日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包