我有一台服务器用于自我修复和自动缩放领事群集。它通过由领事和健康检查运行的terraform脚本来实现。
我想添加一个额外的备份terraform服务器以进行故障转移。为此,我必须在服务器之间共享terraform.tfstate
和terraform.tfstate.backup
,以便他们可以在相同的资源上运行terraform。我想使用Terraform "COMMAND: REMOTE CONFIG"分享这些文件,但对我来说,我不知道如何开始分享。
基本上我希望terraform.tfstate
和terraform.tfstate.backup
文件在两台服务器上始终保持同步。这是我尝试设置它的尝试。请注意,两个terraform服务器都运行连接到我的consul集群其余部分的consul客户端:
terraform remote config \
-backend=consul \
-backend-config="address=localhost:8500" \
-backend-config="path=/consul-scripts/terr/terraform.tfstate" \
-backend-config="backup=/consul-scripts/terr/terraform.tfstate.backup" \
-path="/consul-scripts/terr/terraform.tfstate" \
-backup="/consul-scripts/terr/terraform.tfstate.backup" \
-address="localhost:8500"
然而,这显然是错误的语法。在尝试运行链接文档中提供的consul示例时,我收到了以下输出:
username@hostname:/consul-scripts/terr$ terraform remote config \
> -backend=consul \
> -backend-config="address=localhost:8500" \
> -backend-config="path=/consul-scripts/terr/terraform.tfstate"
Error writing backup state file: open terraform.tfstate.backup: permission denied
我想让我的terraform服务器通过Terraform“COMMAND:REMOTE CONFIG”同步,而不是像glusterfs那样的普通文件共享系统。
如何以这种方式正确同步我的terraform文件?
答案 0 :(得分:0)
所以,@Martin Atkins做对了,我只需要在documentation中使用sudo运行示例。使用terraform remote config
会将.tfstate文件存储在包含terraform脚本的目录中的隐藏目录.terraform/
中。
terraform remote config
的工作原理是它在consul中创建一个包含tfstate文件详细信息的键值。
答案非常接近文档中列出的内容。实际上,使用terraform remote config
是一个3步骤的过程。
在运行terraform之前,应运行以下命令来拉取当前的tfstate文件:
#this will pull the current tfstate file
#if none exists it will create the tfstate key value
terraform remote config \
-backend=consul \
-backend-config="address=localhost:8500" \
-backend-config="path=tfstate" \
pull
然后运行:
terraform apply
完成此操作后,运行以下命令将更新的tfstate文件推送到consul,以便更改键值:
terraform remote config \
-backend=consul \
-backend-config="address=localhost:8500" \
-backend-config="path=tfstate" \
push