治理Terraform状态文件的最佳形式是通过云端的对立的存储,如谷歌云就用GCS。

首先要创立一个Bucket:

$ gsutil mb -p pkslow -l us-west1 -b on gs://pkslow-terraformCreating gs://pkslow-terraform/...$ gsutil ls gs://gs://pkslow-terraform/

而后在Terraform文件中配置对应的信息:

terraform {  backend "gcs" {    bucket  = "pkslow-terraform"    prefix  = "state/gcp/pubsub"  }}

初始化后,就会在Bucket上创立对应的目录:

$ terraform init -plugin-dir=${TERRAFORM_PLUGIN}

变更失效:

$ terraform apply -auto-approve

咱们在浏览器查看一下,发现曾经胜利状态了对应的状态文件:

通过近程的云端,不仅能够存入状态文件,也能够从状态文件读取数据,如一些输入变量。比方模块A创立了一个VM,而咱们可能通过这种形式获取它的IP,以便在其它模块应用。大抵的配置如下:

data "terraform_remote_state" "foo" {  backend = "gcs"  config = {    bucket  = "terraform-state"    prefix  = "prod"  }}resource "template_file" "bar" {  template = "${greeting}"  vars {    greeting = "${data.terraform_remote_state.foo.greeting}"  }}

代码

代码请查看GitHub: https://github.com/LarryDpk/p...


Reference:

通过Terraform创立GCP Pubsub