导入现有资源
学习如何将现有云基础设施导入 Terraform 状态,从而将预先存在的资源纳入基础设施即代码管理。
导入现有资源 是 CoddyKit 上的免费 Terraform Infrastructure as Code 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Terraform Infrastructure as Code 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Terraform Infrastructure as Code 课程共包含 4 节课。
将现有基础设施纳入基础设施即代码
有时,您会拥有手动创建或通过其他工具创建的云资源。Terraform 导入功能可以将这些现有资源纳入 Terraform 的管理范围。
这意味着 Terraform 随后会跟踪这些资源的状态,并且可以通过您的配置文件应用未来的更改。这是在“棕地”环境中采用基础设施即代码(IaC)的关键步骤。
何时需要导入
导入在以下几种情况下非常有用:
- 迁移现有基础设施:将 Terraform 之外创建的资源纳入您的 IaC 工作流。
- 逐步采用 Terraform:从现有资源开始,而不是重新创建所有资源。
- 从状态丢失中恢复:如果状态文件丢失,重新将 Terraform 与资源关联(使用远程状态时这种情况很少见)。
掌握导入命令
terraform import 命令的基本结构非常简单。它会让 Terraform 在您的云服务提供商中查找现有资源,并将其添加到状态文件中,同时将其与配置中的资源块关联起来。
该命令需要两项主要信息:资源的 Terraform 地址以及云服务提供商为该资源分配的ID。
什么是资源地址
资源地址是 Terraform 在配置中识别特定资源的方式。它遵循 resource_type.resource_name 模式。
resource_type:资源类型(例如aws_s3_bucket、azurerm_resource_group)。resource_name:您在 Terraform 配置中为资源指定的本地名称(例如my_bucket、web_app)。
此地址必须已经存在于您的 .tf 文件中。
查找云资源 ID
云服务提供商中的每个资源(例如 AWS、Azure、GCP)都有唯一标识符,通常称为 ID。您需要使用此 ID 告诉 Terraform 要导入哪一个特定的现有资源。
您可以在云服务提供商的控制台中、通过其 CLI 或通过其 API 查找此 ID。例如,AWS S3 存储桶的 ID 就是其名称,而 EC2 实例的 ID 则类似于 i-0abcdef1234567890。
导入前先定义 HCL
关键步骤:运行 terraform import 之前,您必须在 Terraform 配置文件(.tf 文件)中定义对应的资源块。
此资源块会告诉 Terraform 要预期哪种资源类型,以及该资源应具备哪些属性。Terraform 会使用此定义在导入期间了解资源的架构。
S3 存储桶的 HCL
假设您有一个名为 my-existing-coddykit-bucket-123 的现有 AWS S3 存储桶。首先,在您的 main.tf 中为它定义资源块:
resource "aws_s3_bucket" "my_imported_bucket" {
bucket = "my-existing-coddykit-bucket-123"
# Add other expected attributes if known
# e.g., acl = "private"
}导入 S3 存储桶
现在您已经有了 HCL 定义,可以运行 terraform import 命令。请将 my-existing-coddykit-bucket-123 替换为现有存储桶的实际名称/ID。
请确保您已经在该目录中运行过 terraform init!
terraform import aws_s3_bucket.my_imported_bucket my-existing-coddykit-bucket-123检查 Terraform 状态
导入成功后,Terraform 会将资源添加到状态文件中。您可以使用 terraform state show 进行验证,该命令会显示 Terraform 所识别的已导入资源的属性。
随后运行 terraform plan 至关重要,这样可以确保 HCL 与已导入资源的实际状态之间不存在意外差异。
terraform state show aws_s3_bucket.my_imported_bucket快速检查:导入顺序
您想要将现有的 AWS EC2 实例导入 Terraform。在运行 terraform import 命令之前,必须完成以下哪一步?
回顾:将基础设施纳入管理
您已经了解如何使用 terraform import 将现有云资源纳入 Terraform 的管理范围。
- 首先,在 HCL 中定义资源块。
- 然后,确定云服务提供商分配的资源 ID。
- 最后,运行
terraform import ADDRESS ID。 - 始终运行
terraform plan,以核对并解决任何差异。
这一强大的命令有助于弥合手动管理的基础设施与完全由 IaC 驱动的环境之间的差距。
常见问题解答
「导入现有资源」课时是免费的吗?
是的 — 「导入现有资源」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 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 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「导入现有资源」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Terraform Infrastructure as Code 课中编写并运行代码吗?
能。每节 Terraform Infrastructure as Code 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。