Terraform state的作用
在Terraform中,state文件就像是一个将被创建资源的blueprint,里面描绘了资源的详细信息。有了state文件 (terraform.tfstate),Terraform就可以根据它来真正创建和维护相应的资源了。在每个资源的状态信息中,包含了一个唯一性的ID。terraform.tfstate.backup中保存了之前的状态。
Terraform的state还能被用来提升性能。试想如果需要管理成百上千个资源,每次获取资源状态信息的过程是很耗时的。如果有了state,就相当于在本地缓存了资源状态信息。
state相关的命令
查看所有资源列表
> terraform state list
aws_subnet.subnet-dev-1
aws_subnet.subnet-dev-2
查看某个具体资源详情
terraform state show RESOURCE_ID
查看当前资源状态
可以运行如下命令来查看当前资源状态:
terraform plan --refresh=false
使用state文件时的注意事项
在团队协作的时候,还经常把terraform.tfstate存储在云端共享。
- state文件中可能包含很多机密信息,包含各种云端资源的详细信息。因此不能将这个文件提交到源码仓库,同时在存储到云端时还需要加密。
使用Remote State
在主文件main.tf中添加:
terraform {
required_version = ">=1.2.9"
# default value for backend is local
backend "s3" {
bucket = "lcoding-bucket"
key = "lcoding-tf/state.tfstate"
region = "eu-west-1"
}
}
之后,所有的state信息都会被保存在S3之中。如果多人协作+CI/CD,就可以访问同一个state文件了。
注意:
- 建议开启S3 Bucket的versioning。
- 更改了Terraform backend配置后,需要重新运行terraform init