乐趣区

关于后端:终极指南Terraform的进阶技巧

如果您曾经对 Terraform 一目了然,并冀望本人的 IaC 技能有进一步晋升的话,这篇文章很适宜您!在本文中,咱们将分享一些 Terraform 的高级应用技巧。从应用模块(module)、工作区(workspace)到治理近程状态存储、自定义 provider 等技巧,帮忙您轻松、高效地治理基础设施。无论您治理的是小型网站还是大规模的云基础设施,这些技巧都将让您对 Terraform 的掌控力再上一层楼。
 

太长不看版

  • Terraform 模块是可复用的 Terraform 代码包,其中封装了一组资源并且能在多个 Terraform 配置中应用。
  • 近程状态存储容许用户在共享地位存储状态,比方 S3 bucket 或者 Terraform 云工作区,这使得合作和治理基础设施更不便。
  • Terraform 工作区容许用户治理单个 Terraform 配置的多个实例,每个实例都有其状态。
  • 自定义 provider 能够让用户治理那些不被 Terraform 原生反对的资源,比方自定义 API 或某些自研的技术。
  • 在创立资源后,Terraform provisioner 能够在下面运行脚本或者命令。对于在新创建的资源上配置软件或运行测试,Provisioner 非常有用。

 

Tips & Tricks:Terraform 进阶技能

Terraform 是治理 IaC 的弱小工具,罕用常新。在这一部分咱们将摸索 Terraform 的进阶技能,包含 Terraform 模块、近程状态存储、Terraform 工作区以及自定义 Provider。
 

1、Terraform 模块

Terraform 模块是可复用的 Terraform 代码包,其中封装了一组资源并且能在多个 Terraform 配置中应用。模块能够将基础设施的复杂度形象进去,并且代码能够重复使用,进而容许用户以模块化和可组合的形式定义基础设施。
 
要创立一个 Terraform 模块,你须要在独自的目录中定义一组资源,并该目录有本人的 main.tf 文件。而后,您能够在次要的 Terraform 配置中应用模块块(module block)和传递任何必要的变量来调用模块。例如,这里有一个简略的 Terraform 模块,定义了一个 AWS EC2 实例:
 

# modules/ec2/main.tf
resource "aws_instance" "example" {
 ami = var.ami
 instance_type = var.instance_type
 tags = var.tags
}

# main.tf
module "ec2" {
 source = "./modules/ec2"
 ami = "ami-1234567890"
 instance_type = "t2.micro"
 tags = {Name = "example-instance"}
}

 

2、近程状态存储

默认状况下,Terraform 在磁盘上将状态存储到本地,但如果在团队环境中工作或有多个 Terraform 配置时,会导致一些问题呈现。近程状态存储能够让用户将状态存储在一个共享的地位,比方 S3 bucket 或者 Terraform 云工作区,这使得合作和治理基础设施更不便。
 

要应用近程状态存储,您须要在 Terraform 配置中配置一个后端,以下是一个简略的示例,展现如何应用 S3 Bucket 来进行近程状态存储:
 

terraform {
 backend "s3" {
 bucket = "my-bucket"
 key = "terraform.tfstate"
 region = "us-west-2"
 }
}

 

3、Terraform 工作区

Terraform 工作区容许用户治理单个 Terraform 配置的多个实例,每个实例都有其状态。当您须要在同个 Terraform 代码库中治理多个环境时(如 dev、staging、生产环境),这一性能非常有用。
 

应用 terraform workspace new 命令创立一个新工作区;要在工作区之间切换,应用 terraform workspace select 命令。以下示例是如何应用工作空间来治理一个开发和一个生产环境:
 

terraform workspace new dev
terraform apply

terraform workspace new prod
terraform apply

 

4、自定义 Provider

自定义 provider 能够让用户治理那些不被 Terraform 原生反对的资源,比方自定义 API 或某些自研的技术。只管 Terraform 内置大量 provider,但有时还是须要应用自定义的 provide。
 

首先,须要写一个 provider 插件,它是一个合乎 Terraform 插件协定的 Go 二进制文件。实现 Provider 插件构建之后,您能够在 Terraform 配置中应用 Provider 块对它进行配置。例如,以下配置是应用一个自定义的 provider 来治理专有云平台的资源:
 

provider "mycloud" {
 api_key = "my-api-key"
 endpoint = "https://api.mycloud.com"
}

resource "mycloud_instance" "example" {
 name = "example-instance"
 image = "ubuntu-18.04"
 size = "small"
}

 

5、Terraform Provisioners

在创立资源后,Terraform provisioner 能够在下面运行脚本或者命令。对于在新创建的资源上配置软件或运行测试,Provisioner 非常有用。
 

在 Terraform 中有 2 种类型的 provisioner:local-exec 和 remote-exec。Local-exec 在运行 Terraform 的机器上本地运行命令,remote-exec 在资源上运行命令。下方示例配置应用了 local-exec provisioner 来在 AWS EC2 实例上运行脚本:
 

resource "aws_instance" "example" {
 ami = "ami-1234567890"
 instance_type = "t2.micro"

provisioner "local-exec" {command = "echo'Hello, World!'> /tmp/hello.txt"}
}

 

总结

Terraform 是一款治理 IaC 的弱小工具,这些进阶技能能够进一步点亮您的 Terraform 技能树。通过应用上述提到的技巧,您可能以模块化、可扩大以及高效的形式来治理您的基础设施。无论您是在治理小型网站还是大规模的云基础设施,Terraform 所具备的灵活性以及性能都能满足您的需要。
 

原文链接:
https://faun.pub/the-ultimate-guide-to-advanced-terraform-tec…

退出移动版