首页 > 解决方案 > 如何将 terraform 导入与资源配置一起使用

问题描述

在 terraform 导入之前,我已经定义:

# instance.tf

resource "aws_instance" "appserver" {

}

然后我跑了:terraform import aws_instance.appserver <instance-id>顺利,通过terraform show可以看到导入的ec2资源。然而,对我来说,谜团在于将这个现有的 terraform 状态“转移”到 terraform 配置(上面的 instance.tf)中,以便我可以将其作为基础设施即代码进行管理(或者至少按照我的理解)。我添加了 ami 和 instance_type 键及其对应的值,但每次我发出terraform planterraform 似乎都想“替换”我现有的实例。

1)为什么 terraform 要替换该实例?

2)如何将实例的 terraform 状态“转移”到配置中?(这可能吗?)

3) 对于你们这些经验丰富的退伍军人,你们如何能够在 terraform 中管理现有的 aws 基础设施?

标签: amazon-ec2terraforminfrastructure-as-code

解决方案


首先,terraform 想要替换您的实例,因为 terraform 没有在资源配置和当前现有实例之间建立您期望的“链接”。

Terraform 官方文档:(https://www.terraform.io/docs/import/index.html

目前 Terraform 导入的实现只能将资源导入状态。它不生成配置。Terraform 的未来版本也将生成配置。

因此,在运行 terraform import 之前,有必要为资源手动编写资源配置块,导入的对象将映射到该资源配置块。

虽然这看起来很乏味,但它仍然为 Terraform 用户提供了导入现有资源的途径。Terraform 的未来版本将完全生成配置,从而显着简化此过程。

在理解了上面写的之后,我将使用以下步骤:

  1. 首先,编写您的 terraform 资源配置。应该是这样的:

    resource "aws_instance" "example" {
         # ...instance configuration...
    }
    
  2. terraform import aws_instance.example i-abcd1234为了将现有基础设施导入您的状态并将其附加到您在上面创建的资源配置中。

更多详细信息来源:https ://www.terraform.io/docs/import/usage.html


推荐阅读