amazon-ec2 - 如何将 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 plan
terraform 似乎都想“替换”我现有的实例。
1)为什么 terraform 要替换该实例?
2)如何将实例的 terraform 状态“转移”到配置中?(这可能吗?)
3) 对于你们这些经验丰富的退伍军人,你们如何能够在 terraform 中管理现有的 aws 基础设施?
解决方案
首先,terraform 想要替换您的实例,因为 terraform 没有在资源配置和当前现有实例之间建立您期望的“链接”。
Terraform 官方文档:(https://www.terraform.io/docs/import/index.html)
目前 Terraform 导入的实现只能将资源导入状态。它不生成配置。Terraform 的未来版本也将生成配置。
因此,在运行 terraform import 之前,有必要为资源手动编写资源配置块,导入的对象将映射到该资源配置块。
虽然这看起来很乏味,但它仍然为 Terraform 用户提供了导入现有资源的途径。Terraform 的未来版本将完全生成配置,从而显着简化此过程。
在理解了上面写的之后,我将使用以下步骤:
首先,编写您的 terraform 资源配置。应该是这样的:
resource "aws_instance" "example" { # ...instance configuration... }
terraform import aws_instance.example i-abcd1234
为了将现有基础设施导入您的状态并将其附加到您在上面创建的资源配置中。
推荐阅读
- r - 根据行号将列/行从一个数据帧映射到另一个数据帧
- sql - Oracle:在操作中使用 CASE 语句变量
- python - 如何将字符串列表转换为句子列表?
- .htaccess - 由于 timthumb 文件,Apache2 正在循环
- python - 将 $ssl_client_s_dn 从 nginx/uwsgi 传递到烧瓶应用程序
- oracle - Oracle DBD 使用并行运行的 perl 脚本插入和更新表
- php - 多文件上传 - 更改文件基础隐藏元素的状态
- linux - 在 bash 脚本中无法访问系统环境变量
- c# - 具有可选 Guid 参数的视图的 MVC 控制器方法
- apache-kafka - 如何修复在 Heron 上运行的 KafkaSpout 中发生的 NullPointerException?