公司动态
Terraform实战14:导入已有资源——terraform import
Terraform实战14导入已有资源——terraform import本篇目标学会把手动创建的AWS资源纳入Terraform管理理解import的完整工作流程。学完本篇你将掌握terraform import命令的使用import的完整流程写骨架→import→plan→补全常见资源的import语法import的注意事项和局限性前置条件理解Terraform的state文件作用什么场景需要import场景说明历史遗留资源之前手动创建的VPC、EC2等现在想用Terraform管理迁移到Terraform团队决定用IaC需要把已有基础设施纳入管理别人创建的资源同事在控制台创建了资源你需要在Terraform中引用灾难恢复state文件丢失后重新关联完整操作流程Step 1手动创建资源或已有资源 │ ▼ Step 2在Terraform代码中写resource骨架 │ ▼ Step 3执行 terraform import 资源地址 资源ID │ ▼ Step 4terraform plan 检查差异 │ ▼ Step 5补全代码属性直到plan显示No changes │ ▼ Step 6以后正常用Terraform管理实操演示Step 1模拟已有资源手动创建VPCaws ec2 create-vpc --cidr-block10.99.0.0/16\--tag-specificationsResourceTypevpc,Tags[{KeyName,Valuemanually-created-vpc}]# 返回VpcId vpc-0821e82003f352c6eStep 2写代码骨架resource aws_vpc imported { cidr_block 10.99.0.0/16 enable_dns_support true enable_dns_hostnames true tags { Name manually-created-vpc ManagedBy terraform } }Step 3执行importterraform init terraformimportaws_vpc.imported vpc-0821e82003f352c6e输出aws_vpc.imported: Importing from ID vpc-0821e82003f352c6e... aws_vpc.imported: Import prepared! Import successful!Step 4检查差异terraform plan# aws_vpc.imported will be updated in-place Plan: 0 to add, 1 to change, 0 to destroy.说明代码和实际资源有小差异如tags根据plan提示修改代码。Step 5补全直到无差异反复修改代码 → plan → 修改 → plan直到No changes. Your infrastructure matches the configuration.Step 6后续正常管理# 修改代码后terraform plan# 预览变更terraform apply# 执行变更常用import命令速查资源类型命令ID格式VPCterraform import aws_vpc.xxx vpc-123VPC ID子网terraform import aws_subnet.xxx subnet-123Subnet ID安全组terraform import aws_security_group.xxx sg-123SG IDEC2terraform import aws_instance.xxx i-123Instance IDRDSterraform import aws_db_instance.xxx my-dbDB IdentifierS3terraform import aws_s3_bucket.xxx bucket-nameBucket名称IAM Roleterraform import aws_iam_role.xxx role-nameRole名称EKSterraform import aws_eks_cluster.xxx cluster-nameCluster名称ALBterraform import aws_lb.xxx arn:aws:...ARNTerraform 1.5 import block声明式新版本支持在代码中声明import不用命令行# 在代码中声明要import的资源 import { to aws_vpc.imported id vpc-0821e82003f352c6e } resource aws_vpc imported { cidr_block 10.99.0.0/16 # ... }# 执行plan时自动importterraform plan -generate-config-outgenerated.tf好处import过程也在代码中可以review和版本控制。注意事项注意点说明import不生成代码只关联stateresource块必须手动写需要逐个import一个命令只能import一个资源复杂资源需import多个如EKS需要import cluster node group 安全组等import后必须plan确认确保代码和实际完全一致state冲突如果资源已在state中import会报错不支持所有资源极少数资源不支持import查文档确认延伸思考面试常见问题面试问题答案要点怎么把已有资源纳入Terraform管理terraform import命令先写代码骨架import后plan补全import会自动生成代码吗不会1.5版本的plan -generate-config-out可以辅助生成import有什么风险import后如果代码不完整apply可能意外修改资源大量资源怎么import写脚本批量执行或用terraformer等第三方工具费用说明本次练习创建了一个VPC并销毁费用为0VPC免费。小结本篇核心收获import的流程写骨架→import→plan→补全→管理import只关联state不会自动生成代码必须plan确认无差异后才算import完成新版本的import block更方便声明式实际场景团队迁移到IaC时批量import已有资源下一篇预告Terraform实战15多云实践——AWS 阿里云最后一篇我们将学习多Provider配置同一套代码管理AWS和阿里云Provider alias的使用多云架构的Terraform实践参考链接本系列配套代码GitHubTerraform import文档Terraform import block文档terraformer工具