Terraform 新手村指南,萌新必读!

terraform,新手村,指南,必读 · 浏览次数 : 70

小编点评

**基础设施即代码 (IaC) 简介** **什么是 IaC?** IaC 是使用代码和软件开发技术来配置和管理基础设施的实践。IaC 是一种自动化技术,通过将基础设施的配置定义为代码,自动生成和配置基础设施。 **IaC 的优势:** * **自动化:**可自动执行基础设施配置,减少手动配置的工作量。 * **版本控制:**可以利用版本控制工具管理基础设施配置。 * **测试:**可以利用测试工具来确保基础设施配置正确。 * **交付:**基础设施更改更容易交付,减少交付延迟。 **Terraform 简介:** Terraform 是一个流行的 IaC 工具,它使用声明式语言来定义和管理基础设施。 Terraform 提供以下功能: * 创建、修改和删除基础设施对象和资源。 * 访问和管理多个云厂商的云资源。 * 实现版本控制。 * 自动化部署。 **Terraform 架构:** Terraform 使用插件来管理基础设施。插件可以与基础设施平台和应用通信,并执行基础设施变更。 **Terraform 工作原理:** 1. 用户使用 Haschicorp Configuration Language (HCL) 或其他配置语言定义基础设施资源。 2. Terraform 构建一个配置图,该图描述基础设施的架构。 3. Terraform 执行配置图,创建和配置基础设施资源。 4. 当配置完成后,Terraform 应用更改,使基础设施达到目标状态。 **Terraform 最佳实践:** * 使用版本控制管理 Terraform 配置。 * 使用变量来管理配置。 * 使用模块来组织基础设施配置。 * 使用 Terraform 的日志记录功能跟踪基础设施变更。

正文

基础设施即代码(IaC)是指使用代码和软件开发技术来配置和管理基础设施的实践。IaC 背后的逻辑是尽量消除手动配置基础设施和资源的需求,比如服务器、负载均衡以及数据库等。由于基础设施是整个软件开发流程的一个组成部分,并且与应用交付更紧密地联系在一起,因此让基础设施的更改更容易交付十分重要。
 

使用代码来定义和管理基础设施及其配置,可以让开发者采用版本控制、测试和自动化部署等技术,这有助于避免各种应用问题产生,比如性能瓶颈、功能故障等。
 

Terraform 是一个被广泛使用的开源 IaC 工具,用户可以以声明式的方式来管理基础设施。借助 Terraform, 用户可以使用简单的配置语言管理多个不同云厂商的云资源,比如 AWS、Azure、GCP等。
 

本文将会介绍 Terraform 的基础,包括架构、工作原理、工作流程及最佳实践等方面的内容。
 

Terraform 架构

Terraform 是一款基于插件的工具,因此其有一个核心应用 Terraform,和上百个插件。核心应用提供了一个统一的层来管理 IaC 代码,并且它还会负责安装所需的插件,调用它们、管理状态等。另一方面,插件可以与基础设施平台和应用通信,如AWS、GCP、Grafana、Jenkins、GitLab等。其中一些插件由 Hashicorp 团队维护,另外的那些则是由第三方维护。每个人都可以编写并发布自己的插件,访问下方网站可以获取插件库:
https://registry.terraform.io/
 

 

Terraform 插件由两大主要类型:Provider 和 Provisioner。Provider 是通过 API 负责与实际基础设施或应用进行连接,并创建、修改和删除对象和资源。Provisioner 是负责连接已经配置好的基础设施并对其进行更改。例如,你可以使用 AWS Provider 来配置一个 EC2 实例,并在配置完成后远程执行 Provisioner 来在实例上执行某些命令行。(需要注意的是,Provisioner 通常不是最佳实践)
 

Terraform 核心概念

本节介绍一些 Terraform 中使用的核心概念/术语:
 

  • Variables:也被称为 input-variables(输入变量),它是 Terraform 模块使用的键值对,可以自定义。
  • Provider:一种插件类型,与 API 服务进行交互并访问相关资源。
  • Module:它是一个包含 Terraform 模板的文件夹,所有的配置都可以在这里定义。
  • State:它由 Terraform 管理的基础设施和相关配置的缓存信息组成。
  • Resources:它指一个或多个基础设施对象(计算实例、虚拟网络等)的块(block),这些对象用于配置和管理基础设施。
  • Data Source:它是由 provider 实现的,以返回外部对象的信息到 Terraform。
  • Output Values:这是 Terraform 模块的返回值,可以被其他配置使用。
  • Plan:这是指其中一个阶段,在这一阶段中会决定需要创建、更新或销毁什么,以便从基础设施的 real/current 状态转移到期望状态。
  • Apply:这一阶段会应用基础设施的更改 real/current 状态,以推动到期望状态。
     

Terraform 生命周期

Terraform 的生命周期由init、plan、apply和 destroy,4个阶段构成。
 

  • Terraform init 初始化工作目录,其中包括所有的配置文件。
  • Terraform plan 被用来创建执行计划以达到基础设施的期望状态。为了达到预期状态,会对配置文件进行更改。
  • Terraform apply 会对在 plan 阶段中定义的基础设施进行更改,从而使基础设施达到期望状态。
  • Terraform destroy 这一阶段用于删除所有的旧基础设施资源,这些资源在apply 阶段后被标记为污损(taint)。
     

Terraform 的工作原理

Terraform 可以让用户通过配置文件定义和管理整个基础设施和版本控制。这主要由 Terraform 架构中的两个主要组件来实现这一目标:Core 和 Provider。
 

Terraform Core 如何工作

要完成工作,Terraform core 需要使用2个输入源。第一个源将用户配置输入到 Terraform,并定义需要创建或配置什么资源。第二个输入源包括向Terraform提供的关于当前基础设施设置情况的数据。
 

Terraform 会获取这些输入信息并决定下一步应该如何进行。它采用用户指定的期望状态,并将其与当前状态进行对比,进而对架构进行配置以消除两种状态之间的差距。Terraform core 本质上是要计算出需要创建、更新或删除的内容,以便全面配置基础设施。
 

Terraform Provider 如何工作

第二个让 Terraform 运行的关键组件是 provider。常见的是云厂商,如 AWS 或 Azure,但其他基础设施或平台服务工具也可以。例如,Kubernetes 也是 Terraform 用的一个 provider。
 

Terraform 有上百个不同技术的 Provider 可供用户访问。例如,如果你正在使用 AWS,Terraform 可以访问 EC2 实例和在这一技术栈内的其他资源。接着,用户可以在不同层级上创建基础设施,比如在 Azure 上构建 Kubernetes。
 

这就是 Terraform 的工作原理:使用 Core 和 Provider 功能来快速完成应用程序和基础设施的设置,并且仅仅使用代码即可。
 

Terraform 工作流程

Terraform 的工作流程由以下3个步骤组成:
 

Step 1:写

在 Terraform 工作流程的第一步中,用户需要使用 Haschicorp Configuration Language (HCL)来将基础设施资源声明为代码。
 

Step 2:审核

接下来,Terraform 会展示其计划,它会根据用户设置的期望状态和现有资源的当前状态进行比较,来增加或移除资源。
 

Step 3:应用

最终,接受计划的更改,来增加或删除任何基础设施资源。然后基础设施将在 Terraform 的帮助下进行全面部署。
 

Terraform 最佳实践

  • 使用版本控制来管理 Terraform 配置
  • 在存储后端远程保存你的 Terraform 状态
  • 使用变量来确保你的配置更灵活和可复用
  • 使用模块来整理你的配置并将其共享给他人
  • 使用 terraform plan 命令来在应用之前预览更改
     

总结

Terraform 是 IaC 领域备受开发者青睐的开源工具,本文介绍了 Terraform 的基础,包括其工作流程、工作原理、核心概念以及架构解释,希望可以帮助你初步了解这个强大的工具。除了 Terraform 本身拥有强大的功能之外,还有非常完善的配套文档和教程,帮助开发者快速上手使用。
 

教程地址:
https://developer.hashicorp.com/terraform/tutorials

与Terraform 新手村指南,萌新必读!相似的内容:

Terraform 新手村指南,萌新必读!

基础设施即代码(IaC)是指使用代码和软件开发技术来配置和管理基础设施的实践。IaC 背后的逻辑是尽量消除手动配置基础设施和资源的需求,比如服务器、负载均衡以及数据库等。由于基础设施是整个软件开发流程的一个组成部分,并且与应用交付更紧密地联系在一起,因此让基础设施的更改更容易交付十分重要。 使用代码

20个最佳实践提升Terraform工作流程|Part 1

将 Terraform 管理laC的技能提升到一个新的水平。

20个最佳实践提升Terraform工作流程|Part 2

将 Terraform 管理 IaC 的技能提升到一个新的水平。

Terraform 系列-Terraform 项目的典型文件布局

系列文章 👉 Terraform 系列文章 典型文件布局 - modules/ - services/ - webserver-cluster/ - examples/ - main.tf - outputs.tf - vars.tf - user-data.sh - README.md - [

Terraform 系列-什么是 IaC?

聊到 Terraform, 必然绕不开 IaC 这个概念?那么,什么是 IaC?

Terraform 系列-Terraform 简介

系列文章 👉 Terraform 系列文章 前言 最近在使用 Terraform 来置备 OCI 的 Always Free Tier, 发现它非常好用。总结学习下:Terraform 的基础知识。 什么是 Terraform? Terraform 是一种基础架构即代码(IaC)工具,可让您安全高

Terraform 系列-Terraform Cloud 比 Terraform OSS 有哪些增强?

系列文章 👉 Terraform 系列文章 前言 最近在使用 Terraform Cloud 来置备 OCI 的 Always Free Tier, 发现它非常好用,相比 Terraform OSS, 用起来省心多了。 也借此总结学习下:Terraform Cloud 比 Terraform OS

Terraform 系列-使用 for-each 对本地 json 进行迭代

## 系列文章 * [Terraform 系列文章](https://ewhisper.cn/tags/Terraform/) * [Grafana 系列文章](https://ewhisper.cn/tags/Grafana/) ## 概述 前文 [Grafana 系列 - Grafana Ter

Terraform 系列-批量创建资源时如何根据某个字段判断是否创建

这几天碰到一个情况, 使用 Terraform 批量创建日志数据源时, 有的数据源类型是 ElasticSearch, 有些是 Opensearch. 那么, 如何根据某个字段(如:`es_type`)判断是否创建?

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

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