terraform import-导入已有资源到Terraform

概述

        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"
}

控制台资源:

terraform import-导入已有资源到Terraform_第1张图片

 

2.控制台手动创建2个交换机(子网)

红框内为我控制台手动创建的两个交换机(子网)

terraform import-导入已有资源到Terraform_第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

导入成功命令行会有提示

terraform import-导入已有资源到Terraform_第3张图片

 

查看导入后的resource state list

terraform import-导入已有资源到Terraform_第4张图片

总结

        将已存在的基础设施写成resource配置文件,导入到Terraform。这样以后我们就可以统一使用Terraform统一来管理我们的云上的基础设施。

        虽然目前导入并不是那么智能和人性化(resource配置每个都要自己写;每次只能导入一个resource),但是Terraform也在不断完善这块。

你可能感兴趣的:(Terraform,terraform,cloud,native,云原生)