Terraform——强大且灵活的 IaC 工具|平台工具链系列05

2024-03-14 18:50

本文主要是介绍Terraform——强大且灵活的 IaC 工具|平台工具链系列05,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Terraform 是由 HashiCorp 开发的开源基础设施即代码(IaC)工具。它允许用户以代码的方式定义和管理基础设施,这样就可以使用代码创建、修改和删除基础设施资源,例如虚拟机、存储账户和网络。Terraform 使用 HashiCorp 配置语言(HCL)的声明性语言来定义基础设施资源,易于阅读和学习,适用于开发人员和运维团队。同时,Terraform 还支持其他配置语言,如 JSON 和 YAML。

 

Terraform 作为一个成熟的开源项目,拥有庞大的用户群体和活跃的社区,在 GitHub 上有接近 40k 星星🌟。

 

01 Terraform 的关键特征

随着越来越多的企业使用云计算和实施自动化,使用可扩展、使其成为在可扩展、高效和一致的方式下管理基础设施变得越来越重要。Terraform 的关键特征在简化基础设施配置和管理方面发挥了关键作用。

 

基础设施即代码(IaC)

Terraform 的核心功能之一是支持基础设施即代码。使用 Terraform,用户就能够使用可读的配置文件来定义和管理基础设施,并可以进行版本控制、自动化和文档化基础设施设置,更容易与团队成员合作,并确保在不同环境中保持一致性。同时,Terraform 使用 HashiCorp 配置语言(HCL),简化了配置文件的编写,使 Terraform 对开发人员和运维团队都更易访问。

 

多云支持

Terraform 可以管理各种云提供商的资源。无论是在使用亚马逊云服务(AWS)、微软Azure、Google 云平台(GCP)或其他云提供商,Terraform 提供了一致的基础设施配置方法,消除了为每个平台学习不同的工具和语言的需求。

 

Execution Plan

Terraform 的执行计划(execution plan)对于安全地管理基础设施至关重要。该计划描述了 Terraform 将做什么,并在开始任何基础设施更改之前请求批准。通过此步骤,用户可以在 Terraform 对基础设施执行任何操作(包括创建、更新或删除基础设施)之前查看更改,防止意外和潜在不安全的更改。

 

模块化设计

Terraform 的模块化设计促进了代码的可重用性和可维护性。用户可以创建和共享模块以抽象和简化基础设施组件。这种模块化方法简化了大型和复杂基础设施的管理,提高了一致性,并使扩展基础设施变得更加容易。

 

状态管理

Terraform 维护状态文件,记录基础设施的当前状态。这个状态文件对于跟踪更改非常重要,用来确保期望的基础设施与实际基础设施相匹配。Terraform 自动处理状态管理,提供了一种可靠的方式来跟踪、审查和更新基础设施配置。

 

丰富的插件生态系统

Terraform 的插件生态系统扩展了其功能,可以与各种服务和提供商一起使用。无论是需要集成数据库、DNS 服务、监控工具还是自定义内部解决方案,用户都可以找到插件或创建自己的插件来扩展 Terraform 的功能。

 

强大的社区支持

Terraform 社区庞大且活跃。用户可以访问丰富的资源,包括文档、论坛和教程。在这里,用户可以寻求帮助、分享经验,并在使用 Terrafom 时找到解决常见问题和挑战的解决方案,或与其他用户进行交流讨论。

 

02 快速上手 Terraform

Terraform 提供成熟且完善的入门/教程。用户可以根据设备和需求来选择相应的教程快速上手 Terraform。

 

安装 Terraform

安装 Terraform 的最简便方式就是使用操作系统的包管理器。访问 Terraform 官方文档(https://developer.hashicorp.com/terraform/tutorials/aws-get-started)查看各个操作系统上的安装说明。

 

要检查一切是否正常,请运行terraform 命令,这里还罗列了一些其他实用命令:

 

$ terraform
Usage: terraform [global options] <subcommand> [args]The available commands for execution are listed below.
The primary workflow commands are given first, followed by
less common or more advanced commands.Main commands:init          Prepare your working directory for other commandsvalidate      Check whether the configuration is validplan          Show changes required by the current configurationapply         Create or update infrastructuredestroy       Destroy previously-created infrastructure

 

AWS CLI

这里我们将在 AWS 上使用 Terraform 来配置基础设施,因此需要安装 AWS CLI。Terraform 使用 AWS CLI 进行 API 调用来执行预置任务。登录 AWS Web 控制台为 Terraform 创建用户,按照下方进行选择。

 
在这里插入图片描述
 

现在为该用户提供管理角色,建议在处理项目时遵循最小权限原则。

 
在这里插入图片描述
 

成功创建用户后,记得记录访问密钥 ID 和秘密访问密钥。

 
在这里插入图片描述

 

我们需要在刚刚安装的 AWS CLI 中配置这些凭证。打开终端并运行 aws configure命令来配置默认凭据。我已将该区域保留为默认值,因为我使用的是相同的区域。如果需要,请选择您选择的区域。

 

sumeetninawe@Sumeets-MacBook-Pro tf-tuts % aws configure
AWS Access Key ID [****************PYVK]: ****PYVK
AWS Secret Access Key [****************duMt]: ****duMt
Default region name [eu-central-1]: 
Default output format [None]: 
sumeetninawe@Sumeets-MacBook-Pro tf-tuts %

 

至此,我们已成功设置环境准备开始使用 Terraform 和 AWS。

 

注意:如果您硬编码凭证或使用其他方法访问 AWS,Terraform 无需 AWC CLI 即可进行 API 调用。

 

Terraform Provider

Terraform 在其应用程序架构中实现了模块化方法。我们下载的 Terraform 二进制文件是执行核心 Terraform 功能所需的核心模块。任何不涉及调用任何云提供商 API 的操作或 CLI 命令都是该二进制文件的核心功能。

 

为了与云提供商(在我们的示例中为 AWS)合作,Terraform 实例化了相应的模块。它将二进制文件下载到项目的根目录中。我们指定 Terraform 使用特定版本的AWS provider,以便 Terraform 项目可以配置 AWS 资源。

 

现在我们来创建 Terraform 项目。在系统中创建一个目录,然后在您选择的 IDE 中打开该路径。所有 Terraform 代码都会进入 .tf 在此目录的根目录中创建的文件中。创建第一个名 provider.tf 为此空目录的文件并编写提供程序块,如下所示。

 

terraform {required_providers {aws = {source  = "hashicorp/aws"version = "~> 4.19.0"}}
}

 

如前所述,Terraform 使用 HCL 语法。一种声明性配置语言,可帮助我们声明要使用 Terraform 配置的云资源。在 provider.tf 文件中,我们指定了一个 terraform block,在其中声明了另一个 block 代表 required_providers

 

required_providers包含一个 attribute aws,具有几个属性的对象被分配到该属性。这些属性定义了AWS provider 的 source 和需求的 version。特定于提供商的文档保存在 registry 中。要检查可用提供程序的最新版本并使用 AWS 配置各种类型的资源,请参阅 Terraform registry 官方文档(https://registry.terraform.io/)。

 

上面的代码指示 Terraform 使用版本 4.19.0 初始化 AWS provider。保存 provider.tf 文件。现在在根目录中运行terraform init命令并观察如下输出以初始化 Terraform 项目:

 

sumeetninawe@Sumeets-MacBook-Pro tf-tuts % terraform initInitializing the backend...Initializing provider plugins...
- Finding hashicorp/aws versions matching "~> 4.19.0"...
- Installing hashicorp/aws v4.19.0...
- Installed hashicorp/aws v4.19.0 (signed by HashiCorp)Terraform has created a lock file .terraform.lock.hcl to record the provider
selections it made above. Include this file in your version control repository
so that Terraform can guarantee to make the same selections by default when
you run "terraform init" in the future.Terraform has been successfully initialized!You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.
sumeetninawe@Sumeets-MacBook-Pro tf-tuts %

 

如我们所见,Terraform 已成功初始化所需版本的 AWS provider。如果我们查看根目录,就会发现它包含以下内容。

 
在这里插入图片描述

 

除了provider.tf 和 README.md 文件之外,我们还有.terraform.lock.hcl` 文件和一个名为.terraform的子目录。这里的锁定文件用于管理下载的模块二进制文件的校验。子目录用来下载 AWS provider 插件二进制文件。

 

如需了解更多 Terraform 上手教程,可参考官方文档(https://developer.hashicorp.com/terraform/docs)。

这篇关于Terraform——强大且灵活的 IaC 工具|平台工具链系列05的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/809379

相关文章

Linux之platform平台设备驱动详解

《Linux之platform平台设备驱动详解》Linux设备驱动模型中,Platform总线作为虚拟总线统一管理无物理总线依赖的嵌入式设备,通过platform_driver和platform_de... 目录platform驱动注册platform设备注册设备树Platform驱动和设备的关系总结在 l

基于Python实现简易视频剪辑工具

《基于Python实现简易视频剪辑工具》这篇文章主要为大家详细介绍了如何用Python打造一个功能完备的简易视频剪辑工具,包括视频文件导入与格式转换,基础剪辑操作,音频处理等功能,感兴趣的小伙伴可以了... 目录一、技术选型与环境搭建二、核心功能模块实现1. 视频基础操作2. 音频处理3. 特效与转场三、高

MySQL 8 中的一个强大功能 JSON_TABLE示例详解

《MySQL8中的一个强大功能JSON_TABLE示例详解》JSON_TABLE是MySQL8中引入的一个强大功能,它允许用户将JSON数据转换为关系表格式,从而可以更方便地在SQL查询中处理J... 目录基本语法示例示例查询解释应用场景不适用场景1. ‌jsON 数据结构过于复杂或动态变化‌2. ‌性能要

基于Python开发一个图像水印批量添加工具

《基于Python开发一个图像水印批量添加工具》在当今数字化内容爆炸式增长的时代,图像版权保护已成为创作者和企业的核心需求,本方案将详细介绍一个基于PythonPIL库的工业级图像水印解决方案,有需要... 目录一、系统架构设计1.1 整体处理流程1.2 类结构设计(扩展版本)二、核心算法深入解析2.1 自

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

基于Python实现一个图片拆分工具

《基于Python实现一个图片拆分工具》这篇文章主要为大家详细介绍了如何基于Python实现一个图片拆分工具,可以根据需要的行数和列数进行拆分,感兴趣的小伙伴可以跟随小编一起学习一下... 简单介绍先自己选择输入的图片,默认是输出到项目文件夹中,可以自己选择其他的文件夹,选择需要拆分的行数和列数,可以通过

Python使用pip工具实现包自动更新的多种方法

《Python使用pip工具实现包自动更新的多种方法》本文深入探讨了使用Python的pip工具实现包自动更新的各种方法和技术,我们将从基础概念开始,逐步介绍手动更新方法、自动化脚本编写、结合CI/C... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

Python使用OpenCV实现获取视频时长的小工具

《Python使用OpenCV实现获取视频时长的小工具》在处理视频数据时,获取视频的时长是一项常见且基础的需求,本文将详细介绍如何使用Python和OpenCV获取视频时长,并对每一行代码进行深入解析... 目录一、代码实现二、代码解析1. 导入 OpenCV 库2. 定义获取视频时长的函数3. 打开视频文

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

sqlite3 命令行工具使用指南

《sqlite3命令行工具使用指南》本文系统介绍sqlite3CLI的启动、数据库操作、元数据查询、数据导入导出及输出格式化命令,涵盖文件管理、备份恢复、性能统计等实用功能,并说明命令分类、SQL语... 目录一、启动与退出二、数据库与文件操作三、元数据查询四、数据操作与导入导出五、查询输出格式化六、实用功