Terraform 导入存量资源
一 背景
利用Terraform进行基础设施管理的时候,又遇到对于云平台存量资源的纳管导入,terraform 提供了import的命令,帮助我们来讲现有的资源导入到terraform以便后期进行管理。
二 导入资源工作流
- 识别哪些资源需要导入到terraform进行管理。
- 导入需管理的基础资源为state文件。
- 编写terraform 得配置来匹配基础设施。
- 利用terraform plan来确保配置与期望的一致。
- 应用配置去更新terraform state文件。
三 实操腾讯云CVM实例导入
3.1 新建空资源对象
创建腾讯instance空资源对象
resource "tencentcloud_instance" "myinstance" {
}
provider "tencentcloud" {
region = var.region
}
variable "region" {
type = string
default = "ap-guangzhou"
}
terraform {
required_providers {
tencentcloud = {
source = "registry.terraform.io/tencentcloudstack/tencentcloud"
version = ">=1.61.5"
}
}
}
3.2 获取控制台instance唯一标识
针对instance的控制台唯一标识为instanceid
3.3 利用terraform cli执行导入
terraform import tencentcloud_instance.myinstance ins-rmgz4a3q
3.4 查看state文件补全资源
查看生产的state文件,针对导入的资源对象进行
或者使用terraform show -no-color > cvm.tf
来进行删减。
3.5 再次执行plan验证
针对修改的资源对应进行修正以达到和目前状态一致。
限制和注意事项
-
Terraform 导入只能知道 Terraform 提供者报告的基础设施的当前状态。它不知道:
- 基础设施工作的状态
- 对不受 Terraform 控制的基础设施所做的更改——例如,Docker 容器文件系统的状态
- 基础设施的意图
-
导入涉及容易出错的手动步骤,尤其是在导入资源的人缺乏关于如何以及为什么首先创建这些资源的上下文的情况下。
-
在进行terraform state文件import的时候,提前做好现存state文件备份。
-
terraform导入不会检测和生成现存资源直接的关系。
-
Terraform 不会检测不需要在配置中设置的默认属性。
-
并非所有提供的privoders的资源都支持导入
-
仅仅因为基础设施已导入 Terraform 并不意味着它可以被 Terraform 销毁和重新创建。例如,导入的基础架构可能依赖于其他非托管基础架构或配置。
-
您可能需要设置与远程工作区变量等效的局部变量才能导入到远程后端。 import 命令总是在本地运行——不像 apply 这样的命令在您的 Terraform Cloud 环境中运行。因此,import 将无法访问来自远程后端的信息,例如工作区变量,除非您在本地设置它们。
参考资料
- 点赞
- 收藏
- 关注作者
评论(0)