【Terraform】如何切换后端?

首先

我在工作中有机会进行 terraform import,并且为了验证的目的,有机会将后端从 S3 切换到本地,请允许我将其作为一篇文章输出。

如果要将S3更改为本地。

将后台暂时切换到本地。

将backend.tf和terraform.tf等文件中的backend部分进行如下修正。

terraform {
#  backend "s3" {
#    bucket = "mybucket"
#    key    = "path/to/my/key"
#    region = "ap-northeast-1"
#  }
   backend "local" {
     path   = "terraform.tfstate"
   }
}

运行”terraform init -migrate-state”命令。

当执行以下命令时,将会把保存在S3上的后端(state文件)复制到本地。
(-migrate-state是用于复制后端的选项)

terraform init -migrate-state

当被询问是否要将 s3 中的后端复制到本地时,请输入“是”作为答案。

% terraform init -migrate-state
Initializing modules...

Initializing the backend...
Terraform detected that the backend type changed from "s3" to "local".

Do you want to copy existing state to the new backend?
  Pre-existing state was found while migrating the previous "s3" backend to the
  newly configured "local" backend. No existing state was found in the newly
  configured "local" backend. Do you want to copy this state to the new "local"
  backend? Enter "yes" to copy and "no" to start with an empty state.

  Enter a value: yes ← ここで yes と入力

Successfully configured the backend "local"! Terraform will automatically
use this backend unless the backend configuration changes.

〜〜〜長いので省略〜〜〜
%

当将数据还原到 S3

将后端(backend)从本地转移到S3。

修改包含backend的文件,如backend.tf和terraform.tf。
删除本地的描述。

terraform {
  backend "s3" {
    bucket = "mybucket"
    key    = "path/to/my/key"
    region = "ap-northeast-1"
  }
}

执行 “terraform init -reconfigure”。

执行以下命令,将后端从本地更改为S3(为了防止将本地设置复制到S3,使用-reconfigure)。

terraform init -reconfigure
% terraform init -reconfigure
Initializing modules...

Initializing the backend...

Successfully configured the backend "s3"! Terraform will automatically
use this backend unless the backend configuration changes.

〜〜〜長いので省略〜〜〜
%

删除保存在本地的 terraform.tfstate 等文件。

在执行 terraform init -migrate-state 后生成的文件。

terraform.tfstate
terraform.tfstate.1666956416.backup
terraform.tfstate.backup

请参考

 

广告
将在 10 秒后关闭
bannerAds