概述
Terraform管理基础设施是有个前提条件的,就是这些基础设施必须由Terraform来创建的,terraform有这些资源的状态信息。
但是在真实的生产环境中,大多数情况下我们是先存在了很多公有云的基础设施,后来才发现可以使用terraform来管理公有云基础设施。这种情况下由于此前的公有云基础设施不是由terraform创建的,所以在terraform状态中没有这些资源,也就无法纳管(无法增、删、改、查这些已存在的技术设施)。
好在Terraform提供了一种方式——使用terraform import命令可以导入非Terraform创建的基础设施资源。
命令格式:terraform import [options] ADDRESS ID
#ADDRESS 为resource配置文件中资源的地址
#ID 为真实resouce在公有云上的ID
虽然terraform import可以提供了一种导入方式,来让我们纳管我们之前就已经存在的资源。但是它也有不方便的地方,就是在资源导入的时候,并不能批量导入,一次只能导入一个资源;且所有资源必须自己手动在配置文件中写resource配置,这些配置并不能自动生成。
导入资源演示
前置准备
1.先使用配置文件在阿里云创建一个VPC和一个交换机(子网)
配置文件内容:
#配置阿里云provider
provider "alicloud" {
access_key = "your_ak_xxx"
secret_key = "your_sk_xxx"
region = "cn-shenzhen"
}
#创建阿里云vpc
resource "alicloud_vpc" "liqi-vpc-test" {
vpc_name = "liqi-vpc-test"
cidr_block = "10.100.0.0/16"
}
#创建阿里云vswitch,子网为10.100.1.0/24
resource "alicloud_vswitch" "liqi-vswitch-test" {
vpc_id = "${alicloud_vpc.liqi-vpc-test.id}"
cidr_block = "10.100.1.0/24"
zone_id = "cn-shenzhen-b"
}
控制台资源:
2.控制台手动创建2个交换机(子网)
红框内为我控制台手动创建的两个交换机(子网)
3.对比terraform纳管资源
terraform state list查看resourcelist。可以看到只有我们之前通过配置文件创建的一个vpc和交换机
配置文件添加要导入的resource配置
配置文件内容:
添加我们要导入的两个交换机(子网)的resource配置
#配置阿里云provider
provider "alicloud" {
access_key = "your_ak_xxx"
secret_key = "your_sk_xxx"
region = "cn-shenzhen"
}
#创建阿里云vpc
resource "alicloud_vpc" "liqi-vpc-test" {
vpc_name = "liqi-vpc-test"
cidr_block = "10.100.0.0/16"
}
#创建阿里云vswitch,子网为10.100.1.0/24
resource "alicloud_vswitch" "liqi-vswitch-test" {
vpc_id = "${alicloud_vpc.liqi-vpc-test.id}"
cidr_block = "10.100.1.0/24"
zone_id = "cn-shenzhen-b"
}
#导入阿里云vswitch,子网为10.100.2.0/24
resource "alicloud_vswitch" "liqi-vswitch-test2" {
vpc_id = "${alicloud_vpc.liqi-vpc-test.id}"
vswitch_name = "liqi-vswitch-test2"
cidr_block = "10.100.2.0/24"
zone_id = "cn-shenzhen-c"
}
#导入阿里云vswitch,子网为10.100.3.0/24
resource "alicloud_vswitch" "liqi-vswitch-test3" {
vpc_id = "${alicloud_vpc.liqi-vpc-test.id}"
vswitch_name = "liqi-vswitch-test3"
cidr_block = "10.100.3.0/24"
zone_id = "cn-shenzhen-d"
}
导入resource
虽然我们配置文件的resource是直接将两个交换机(子网)的配置都写入了。但是我们在执行terraform import导入资源状态的时候,一次还是只能导入一个resource。
terraform import alicloud_vswitch.liqi-vswitch-test2 vsw-wz9dun3xkcfxxxxxxxxxx
terraform import alicloud_vswitch.liqi-vswitch-test3 vsw-wz9xc10qio9xxxxxxxxxx
导入成功命令行会有提示
查看导入后的resource state list
总结
将已存在的基础设施写成resource配置文件,导入到Terraform。这样以后我们就可以统一使用Terraform统一来管理我们的云上的基础设施。
虽然目前导入并不是那么智能和人性化(resource配置每个都要自己写;每次只能导入一个resource),但是Terraform也在不断完善这块。