了解 Terraform 语法和配置文件

2023-10-23

Terraform 由 HashiCorp 开发,是一款因其在基础设施即代码 (IaC) 方面的强大功能而广为人知的工具。本综合指南旨在让您深入了解 Terraform 语法,特别关注配置文件。

了解 Terraform 语法

Terraform 使用其称为 HashiCorp 配置语言 (HCL) 的语言。 HCL 被设计为人类可读且机器友好,使其成为声明性配置的有效语法。

HCL 由块、参数和表达式组成:

  1. Blocks:这些是 HCL 中的容器结构。它们有一个类型、零个或多个标签,以及一个包含任意数量的参数和嵌套块的主体。
  2. 论据:参数将值分配给特定名称。它们出现在块内。
  3. 表达式:它们引用引用或值并执行操作以生成新值。

Terraform 脚本中这三个组件的基本示例可以是:

1
2
3
4
resource “aws_实例” “例子” {
  ami= “ami-a1b2c3d4”
  实例类型 = “t2.micro”
}

在上面的配置中:

  • 资源是块类型,以 aws_instance 和 example 作为标签。
  • ami 和 instance_type 是参数,“ami-a1b2c3d4”和“t2.micro”作为各自的值。
  • 字符串“ami-a1b2c3d4”和“t2.micro”是简单的表达式,代表它们自己。

Terraform 配置文件文件结构

Terraform 配置可以跨越多个文件以便更好地组织。 Terraform 将目录中的所有 .tf 文件视​​为单个配置并将它们合并在一起。

以下是 Terraform 配置文件的基本示例:

1
2
3
4
5
6
7
8
provider "aws" {
  region = “美国西部2”
}
 
resource “aws_实例” “例子” {
  ami= “ami-a1b2c3d4”
  实例类型 = “t2.micro”
}

该文件以 AWS 的提供商配置开头,指定区域。接下来,声明一个 AWS EC2 实例及其必要的配置详细信息。

变量和输出

Terraform 配置文件还允许声明变量和输出。

变量是使用变量块声明的,可用于自定义配置的行为:

1
2
3
4
5
6
7
8
9
variable “实例类型” {
  描述 = “用于我们的 EC2 实例的实例类型”
  default     = “t2.micro”
}
 
resource “aws_实例” “例子” {
  ami= “ami-a1b2c3d4”
  实例类型 = var.实例类型
}

在此示例中,声明了变量instance_type,随后将其用于确定AWS EC2实例的实例类型。

另一方面,输出是使用输出块声明的,并显示 Terraform 部署的结果:

1
2
3
output “实例 ID” {
  value = aws_实例.example.id
}

Terraform 部署后,将输出创建的 EC2 实例的实例 ID。

条件表达式和函数

Terraform 支持使用条件表达式和函数来创建动态配置:

1
2
3
4
5
6
7
8
9
10
variable “创建新安全组” {
  描述 = “是否新建安全组”
  default     = true
}
 
resource “aws_安全_组” “例子” {
  count  = var.创建新安全组 ? 1 : 0
  name   = “例子”
  vpc_id = aws_vpc.example.id
}

这里,count 参数被赋予一个条件表达式。如果 create_new_security_group 为 true,则会创建新的安全组。如果没有,则不会创建安全组。这 ?和 : 符号在此上下文中的作用类似于 if-else 子句。

数据源

数据源允许获取或计算数据以在 Terraform 配置中的其他位置使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
data “aws_ami” “例子” {
  最近的 = true
 
  filter {
    name   = "name"
    values = [“我的阿米”]
  }
 
  owners = ["self"]
}
 
resource “aws_实例” “例子” {
  ami= data.aws_ami.example.id
  实例类型 = “t2.micro”
}

在此示例中,数据源用于动态查找将用于启动 EC2 实例的 AMI。

Modules

Terraform 中的模块是一起使用的多个资源的容器。模块可以从其他模块调用,这使您可以从简单的构建块构建复杂的架构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
module "vpc" {
  source = “terraform-aws-modules/vpc/aws”
  version = "2.77.0"
 
  name = "my-vpc"
  cidr = “10.0.0.0/16”
  
  # other 必要的 配置 here...
}
 
resource “aws_实例” “例子” {
  ami= “ami-a1b2c3d4”
  实例类型 = “t2.micro”
  vpc_security_group_ids = [module.vpc.default_security_group_id]
}

在这里,我们使用 Terraform 模块注册表中的 VPC 模块,然后在启动 EC2 实例时使用该模块创建的安全组。

了解 Terraform 语法及其核心组件(包括提供程序、资源、变量、输出、数据源和模块)后,您可以有效地编写、管理 Terraform 配置文件并对其进行故障排除。请记住,练习是掌握 Terraform 的关键。快乐地球化!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

了解 Terraform 语法和配置文件 的相关文章

  • 如何在 Linux 上设置 LogMeIn (Hamachi) VPN

    Hamachi 用于使用或设置 VPN 并通过 VPN 网络连接系统 这提供了一种快速 更简单的方法来创建 VPN 网络和连接系统 您可以在 logmein com 上创建免费帐户并创建网络 您可以使用免费帐户在每个网络中添加最多 5 个系
  • Java 技巧:将字符串转换为日期

    在 Java 编程领域 日期和时间操作是一项基本技能 但是 日期通常作为字符串传递 这需要将这些字符串转换为 Date 对象以进行有效操作 在本综合指南中 我们将详细介绍在 Java 中将字符串转换为日期的过程 了解基础知识 表示日期的字符
  • UFW:通用防火墙规则和命令

    防火墙是一种安全系统 它根据预定义的安全规则监视和控制传入和传出的网络流量 它是任何安全网络的重要组成部分 无论是个人计算机还是大型企业网络 Uncomplicated Firewall UFW 是一个用户友好的命令行界面 用于管理 ipt
  • 编辑 crontab 文件的要点

    在系统管理领域 有一种强大的工具可以让您高效地安排任务 crontab 使用 crontab 您可以在指定的日期和时间执行脚本和命令 这使其成为基于 Unix 的系统中非常有用的实用程序 但是 要充分利用其潜力 您需要了解编辑 cronta
  • 如何在 Linux 中创建交换文件

    交换文件是 Linux 操作系统的重要组件 它通过提供额外的虚拟内存来帮助提高性能 它是在系统物理内存 RAM 填满时保留用作虚拟内存的磁盘空间 在 Linux 中创建交换文件有助于防止系统崩溃和不稳定 在本文中 我们将逐步讨论如何在 Li
  • 如何在 phpMyAdmin 中添加多个主机

    phpMyAdmin 默认配置仅允许连接到本地 MySQL 服务器 但是如果我们运行多个数据库服务器 那么如果我们可以从单个 phpMyAdmin 安装中选择需要连接的服务器 那就太好了 本操作指南将帮助您在 phpMyAdmin 中添加多
  • Bash 选择(制作菜单)

    在本教程中 我们将介绍以下基础知识select在 Bash 中构建 The select构造允许您生成菜单 Bash select构造 The select构造从项目列表生成菜单 它的语法几乎与for loop select ITEM in
  • 如何在 CentOS 7 上安装和配置 Redmine

    Redmine 是最流行的开源项目管理和问题跟踪软件工具之一 它是跨平台和跨数据库的 构建在 Ruby on Rails 框架之上 Redmine包括对多个项目 wiki 问题跟踪系统 论坛 日历 电子邮件通知等的支持 在本教程中 我们将介
  • 如何在 Ubuntu 18.04 上部署 Rocket.Chat

    Rocket Chat 是一个开源团队交流平台 是自托管的 Slack 替代品 它使用 Meteor 框架开发 提供各种功能 包括帮助台聊天 文件共享 视频会议 语音消息 API 等 对于想要托管自己的聊天系统的公司和社区来说 Rocket
  • .bashrc 与 .bash_profile

    如果您在命令行上花费大量时间 您很可能想要自定义您的 shell 环境 这可能意味着创建别名 将新目录添加到 PATH 或更改 shell 提示符的外观 您可能遇到过一些教程 其中他们说将您的配置放在 bashrc bash profile
  • 如何在 CentOS 7 上安装和使用 PHP Composer

    Composer是 PHP 的依赖管理器 类似于Node js 的 npm or Python 的点子 Composer 将提取您的项目所依赖的所有必需的 PHP 包并为您管理它们 它用于所有现代 PHP 框架和平台 例如 Laravel
  • 如何在 CentOS 8 上安装 Apache

    Apache HTTP 服务器是世界上使用最广泛的 Web 服务器 它是一个免费 开源 跨平台的HTTP服务器 具有强大的功能 并且可以通过多种模块进行扩展 在本文中 我们将解释如何在 CentOS 8 上安装和管理 Apache Web
  • 如何在 Debian 9 上安装 CouchDB

    CouchDB 是一个开源的容错且无模式的 NoSQL 数据库 由 Apache 软件基金会维护 CouchDB 服务器将其数据存储在命名数据库中 其中包含以下文档JSON结构 每个文档由许多字段和附件组成 字段可以包括文本 数字 列表 布
  • 如何在 CentOS 7 上安装 Visual Studio Code

    视觉工作室代码是微软开发的开源跨平台代码编辑器 它有一个内置的调试支持 嵌入式Git控制 语法突出显示 代码完成 集成终端 代码重构和片段 在 CentOS 计算机上安装 Visual Studio Code 最简单且推荐的方法是启用 VS
  • 如何在 Ubuntu 18.04 上安装 Mono

    Mono 是一个用于开发和运行基于 ECMA ISO 标准的跨平台应用程序的平台 它是 Microsoft NET 框架的免费开源实现 本教程介绍如何在 Ubuntu 18 04 上安装 Mono 先决条件 这些说明假定您以 root 身份
  • Linux中的su命令(切换用户)

    The su 替代或切换用户的缩写 实用程序允许您使用其他用户 默认为 root 用户 的权限运行命令 Using su是在当前登录会话中切换到管理帐户的最简单方法 当不允许 root 用户通过以下方式登录系统时 这尤其方便ssh或使用 G
  • Linux 中的Whereis命令

    whereis是一个命令行实用程序 允许您查找给定命令的二进制文件 源文件和手册页文件的位置 在这篇文章中 我们将向您展示如何使用Linuxwhereis命令 如何使用whereis命令 语法为whereis命令如下 whereis OPT
  • 在 CentOS 8 上使用 Let's Encrypt 保护 Nginx

    Let s Encrypt 是由互联网安全研究小组 ISRG 开发的免费 自动化 开放的证书颁发机构 提供免费的 SSL 证书 Let s Encrypt 颁发的证书受到所有主要浏览器的信任 并且自颁发之日起 90 天内有效 在本教程中 我
  • Expect 命令以及如何像魔术一样自动化 shell 脚本

    在上一篇文章中 我们讨论了写作实用的shell脚本 我们看到了编写 shell 脚本是多么容易 今天我们要讨论一个对 shell 脚本有神奇作用的工具 该工具是期待命令 or 期待脚本语言 Expect 命令或 Expect 脚本语言是一种
  • SSH 连接被拒绝(原因和解决方案)

    本教程将介绍您在使用 SSH 时可能遇到的最常见错误 连接被拒绝 请继续阅读 详细了解这个问题及其各种解决方案 Secure Shell SSH 是系统管理员最常用的工具之一 它对于管理所有服务器和执行日常任务至关重要 目录 hide 1

随机推荐

  • Linux env 命令:深入了解 Linux 环境管理

    The envLinux中的命令用于显示或设置环境变量 它可用于在修改后的环境中运行程序或显示当前环境 在本教程中 我们将深入研究其各种论点 并揭示其与脚本的集成 目录 hide 1 参数概览 2 执行不带参数的 env 命令 3 使用 e
  • 揭示 Linux 虚拟文件系统的强大功能

    Linux 虚拟文件系统或虚拟文件系统通常是位于实际文件系统之上的一层 它允许用户访问不同类型的文件系统 可以将虚拟文件系统视为内核与实际文件系统之间的接口 这意味着您将在 etc fstab 文件中找不到这些 Linux 虚拟文件系统的任
  • NumPy 随机种子(生成可预测的随机数)

    在计算科学中 随机种子是生成的伪随机数序列的起点 这些数字看似随机 但它们遵循确定性序列 种子决定了该序列的初始状态 在 Python 中NumPy 库 您可以使用设置随机种子numpy random seed 功能 这将使随机数生成的输出
  • Python map() 函数(转换可迭代对象)

    The map Python 中的 function 是一个内置函数 用于将函数应用于可迭代对象 数组 列表 元组 字典 集合 中的每个项目并返回一个迭代器 这使得它对于转换可迭代数据非常有用 目录 hide 1 Python map 函数
  • 使用 matplotlib 在 Python 中进行 3D 绘图

    数据可视化就是这样一个领域 大量的库都是用 Python 开发的 在这些当中 Matplotlib是数据可视化最流行的选择 虽然最初是为了绘制二维图表而开发的 例如直方图 条形图 散点图 线图等 Matplotlib 还扩展了其功能以提供
  • Bash 脚本编写第 6 部分 – 创建和使用 Bash 函数

    在讨论 bash 函数之前 我们先讨论一下这种情况 编写 bash 脚本时 您会发现自己在多个地方使用相同的代码 如果您厌倦了在 bash 脚本中一次又一次地编写相同的代码行 那么最好编写一次代码块并在 bash 脚本中的任何位置调用它 b
  • Python PDF处理教程

    PDF 或便携式文档格式首先由 Adob e 推出 但现在由国际标准化组织 ISO 维护 并且它是一个开放标准 PDF 文件的一些主要组件是纯文本 按钮 表单 单选按钮 图像 音频 视频 签名和元数据 在 Python 中 我们可以执行不同
  • 使用 LRU 缓存提升您的 Python 代码

    LRU 缓存或 最近最少使用 缓存是一种缓存 当缓存达到其大小限制时 最近最少使用的条目将被丢弃 关键思想是通过重用以前的结果来加快对相同数据的后续请求 这种技术称为记忆化 在本教程中 我们将深入研究 LRU 缓存的概念 探索其底层机制 以
  • Python 数学函数(简单示例)

    在本教程中 您将了解 Python 数学函数mathPython 的模块 任何类型的项目都始终需要数学计算 在 Python 中 一些内置数学运算符不需要数学模块 例如加法 减法 乘法 除法 三角函数 正弦 余弦等 对数 指数或阶乘等高级运
  • Bash For 循环范围:简单指南

    在 Bash shell 中 for loop使您能够有效地迭代数字或字符序列 当涉及到定义序列时 范围就发挥了作用 本教程重点介绍 Bash 范围创建强大循环的能力 目录 hide 1 使用大括号 进行范围定义 2 基本数字序列 star
  • 网页设计趋势将持续存在

    第一个网站是纯文本网站 今天很难想象会有这样一个网站 第一个同时提供图片和文字的网站于 1993 年上线 blog hubspot com Lindsay Kolowich 2015 年 3 月 这些年来 网页设计取得了很大的发展和进步 为
  • 如何从 CentOS 7.7-7.0 升级 CentOS 7.8

    最新版本 CentOS 7 8 可供升级 所有 CentOS 7 7 7 6 7 5 7 4 7 3 7 2 7 1 和 7 0 用户都可以将系统升级到最新版本 所有使用 WHM cPanel 运行的用户都不需要执行任何操作 WHM cPa
  • 如何在 CentOS/RHEL 8/7/6 上安装 Angular CLI

    Angular是一个框架 库 资产和实用程序 它跟踪所有组件并定期检查其更新 本教程将帮助您在 CentOS 8 7 6 和 RHEL 8 7 6 Linux 操作系统上安装 Angular CLI 工具 第 1 步 安装 Node js
  • 在 Bash 中检查文件是否为空的 5 种方法

    在 Linux 中 空文件是大小为零字节的文件 这意味着该文件不包含任何数据 并且在文本编辑器中打开时没有任何内容 可以使用 touch 命令创建一个空文件 touch myfile txt 这将在当前目录中创建一个名为 myfile tx
  • 如何在 MySQL 中创建管理员用户

    在 MySQL 中管理数据库通常需要使用特权用户或超级管理员用户 他们拥有读取 写入 更新和管理数据库的所有权限 在 MySQL 中 这通常是 root 用户 但建议创建单独的超级管理员用户以实现更好的安全管理 本文将指导您如何在 MySQ
  • 如何在 Fedora 36/35/34 上安装 TeamViewer

    团队查看器是一款功能强大的远程桌面和文件共享应用程序 适用于大多数操作系统和移动设备 为了将 TeamViewer 的使用商业化 您必须购买许可证 您可以免费使用它 仅供个人使用 Teamviewer 的 RPM 包由官方团队构建 可以安装
  • 如何更改 PHP 会话超时

    作为 Web 开发人员 了解 PHP 会话超时对于构建安全可靠的 Web 应用程序至关重要 PHP 会话是一种跨多个页面存储用户信息的方式 会话超时是指会话在过期之前保持活动状态的持续时间 在本分步指南中 我们将引导您完成更改 PHP 会话
  • 如何在 Ubuntu、Debian 和 LinuxMint 上安装 Python 3.7

    在撰写本文时 Python 3 7 系列的最新稳定版本已可供安装 本文将帮助您在 Ubuntu 和 LinuxMint 操作系统上安装 Python 3 7 9 你可以拜访here阅读有关 Python 版本的更多信息 先决条件 保持软件包
  • 如何在 Ubuntu 16.04、14.04 上安装 Nginx、PHP 7 和 MySQL

    PHP 7 2 的最新主要版本已经发布 在速度和安全性方面进行了大量优化 所以你应该尝试这个版本来进行开发 本教程将帮助您在 Ubuntu 17 10 16 04 和 14 04 LTS 版本上安装 Nginx PHP 7 2 和 MySQ
  • 了解 Terraform 语法和配置文件

    Terraform 由 HashiCorp 开发 是一款因其在基础设施即代码 IaC 方面的强大功能而广为人知的工具 本综合指南旨在让您深入了解 Terraform 语法 特别关注配置文件 了解 Terraform 语法 Terraform