0Pricing
Terraform Infrastructure as Code · 课时

Terraform 模块简介

了解使用模块封装和复用常见基础设施模式的优势,从而改善代码组织和可维护性。

Terraform 模块简介 是 CoddyKit 上的免费 Terraform Infrastructure as Code 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Terraform Infrastructure as Code 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Terraform Infrastructure as Code 课程共包含 4 节课。

什么是 Terraform 模块?

Terraform 模块是一个自包含的 Terraform 配置包。您可以将它理解为编程语言中的函数或类。它允许您将相关资源组合起来,并将它们作为一个整体进行管理。

模块有助于组织基础设施代码,使其更易于管理,尤其适用于大型项目。

为什么使用 Terraform 模块?

模块可以为您的基础设施即代码带来多项重要优势:

  • 可复用性:只需定义一次基础设施,就可以在不同项目或环境中多次使用。
  • 组织性:将复杂配置拆分为更小、更易管理且逻辑清晰的组件。
  • 一致性:确保每次都以标准化方式创建资源,减少配置偏差和错误。
  • 协作:团队可以开发和共享模块,加快开发速度并维护统一标准。

模块结构说明

Terraform 模块本质上是一个包含一个或多个 .tf 文件的目录。虽然结构可以灵活调整,但通常包括:

  • main.tf:定义模块创建的主要资源。
  • variables.tf:声明用于定制模块行为的输入变量。
  • outputs.tf:定义模块向调用方公开的输出值。
  • versions.tf:指定模块所需的 Terraform 和提供商版本约束。

这种有条理的结构有助于让代码整洁易懂。

您的第一个模块代码

让我们定义一个非常简单的模块,用于创建 AWS S3 存储桶。这段代码通常会存放在单独的目录中,例如 modules/my_s3_bucket/main.tf。

您可以将这个完整文件作为根模块运行,以查看其实际效果;不过,在这里它主要用于展示模块的内部结构。

provider "aws" {
  region = "us-east-1" # Example region
}

variable "bucket_name" {
  description = "Name for the S3 bucket."
  type        = string
}

variable "acl_setting" {
  description = "ACL for the S3 bucket."
  type        = string
  default     = "private"
}

resource "aws_s3_bucket" "example_bucket" {
  bucket = var.bucket_name
  acl    = var.acl_setting

  tags = {
    Environment = "Dev" # Example tag
  }
}

output "bucket_id" {
  description = "The ID of the S3 bucket."
  value       = aws_s3_bucket.example_bucket.id
}

output "bucket_arn" {
  description = "The ARN of the S3 bucket."
  value       = aws_s3_bucket.example_bucket.arn
}

模块输入:变量

输入变量允许您在不修改模块核心代码的情况下定制模块行为。它们定义在模块目录中的 variables.tf 文件内。

调用模块时,您可以为这些变量传入值,从而使模块能够高度复用于不同场景和环境。您可以将它们理解为函数参数。

variable "bucket_name" {
  description = "Name for the S3 bucket."
  type        = string
}

variable "acl_setting" {
  description = "ACL for the S3 bucket."
  type        = string
  default     = "private"
}

模块输出:公开数据

输出值用于将模块中的数据公开给调用配置。这使您能够访问模块创建的资源的重要信息。

输出值定义在模块目录中的 outputs.tf 文件内,Terraform 配置的其他部分甚至其他模块都可以引用这些输出值。

output "bucket_id" {
  description = "The ID of the S3 bucket."
  value       = aws_s3_bucket.example_bucket.id
}

output "bucket_arn" {
  description = "The ARN of the S3 bucket."
  value       = aws_s3_bucket.example_bucket.arn
}

调用您的自定义模块

现在,我们已经定义了 my_s3_bucket 模块,接下来让我们从根配置中调用它。source 属性指定 Terraform 可以在哪里找到该模块。

对于本地模块,它是指向模块目录的相对路径。我们可以为模块的输入变量传入值,并访问模块公开的输出值。

provider "aws" {
  region = "us-east-1"
}

module "my_website_bucket" {
  source      = "./modules/my_s3_bucket" # Path to your local module
  bucket_name = "my-unique-website-bucket-12345"
  acl_setting = "public-read"
}

output "website_bucket_arn" {
  description = "ARN of the website S3 bucket."
  value       = module.my_website_bucket.bucket_arn
}

output "website_bucket_id" {
  description = "ID of the website S3 bucket."
  value       = module.my_website_bucket.bucket_id
}

不同的模块来源

模块并不局限于本地模块!Terraform 可以从各种来源获取模块,为您提供灵活性:

  • 本地路径:./modules/my_module(如我们的示例所示)
  • Terraform 注册表:hashicorp/vpc/aws(公开可用的模块)
  • Git 仓库:git::https://example.com/repo.git
  • S3 存储桶:s3::https://s3-us-west-2.amazonaws.com/example-bucket/module.zip

Terraform 注册表是查找适用于常见基础设施模式、由社区审核过的预构建模块的好地方。

模块的实际影响

想象一下,您需要在多个环境(开发、预发布和生产)中管理数百个资源。如果没有模块,您将面对数量庞大且重复的配置文件。

模块允许您只定义一次“Web 服务器”或“数据库”模式。然后,您只需为每个实例调用该模块,并为环境特定设置传入不同的变量。这会大幅减少错误、简化更新,并使您的基础设施真正具备可扩展性。

快速检查

您已经了解了 Terraform 模块的结构和优势。现在来看看您能否找出其中的一项关键优势。

回顾与后续步骤

在本课中,我们介绍了 Terraform 模块这一用于组织和复用基础设施代码的强大工具。您学到了:

  • 模块将资源封装为可复用的单元。
  • 模块可以提升代码的组织性、一致性和可复用性。
  • 模块使用 variables.tf 处理输入,使用 outputs.tf 公开数据。
  • 您可以从本地路径、注册表或 Git 仓库调用模块。

接下来,我们将深入学习如何创建自己的可复用模块,并探索更多高级模式和最佳实践。

常见问题解答

「Terraform 模块简介」课时是免费的吗?

是的 — 「Terraform 模块简介」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Terraform Infrastructure as Code 课程的其余内容,请升级到 CoddyKit PRO。 Terraform Infrastructure as Code 课程共包含 4 节课。

「Terraform 模块简介」这节课中我会学到什么?

了解使用模块封装和复用常见基础设施模式的优势,从而改善代码组织和可维护性。 你通过在浏览器中直接运行的动手代码来练习 Terraform Infrastructure as Code,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Terraform Infrastructure as Code 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Terraform Infrastructure as Code 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「Terraform 模块简介」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Terraform Infrastructure as Code 课中编写并运行代码吗?

能。每节 Terraform Infrastructure as Code 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. Terraform 模块简介
  2. 创建可复用模块
  3. 使用工作区管理环境
  4. 将模块发布到注册表
← 返回 Terraform Infrastructure as Code