首页 文章

如何使用 Consul 设置Terraform“COMMAND:REMOTE CONFIG”

提问于
浏览
0

我有一个服务器,我用于自我修复和自动缩放 Consul 群集 . 它通过由consul Watch 和 Health 检查运行的terraform脚本来实现 .

我想添加一个额外的备份terraform服务器以进行故障转移 . 为此,我必须在我的服务器之间共享 terraform.tfstateterraform.tfstate.backup ,以便它们可以在相同的资源上运行terraform . 我想使用Terraform "COMMAND: REMOTE CONFIG"分享这些文件,但对我来说,我不知道如何开始分享 .

基本上我希望 terraform.tfstateterraform.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文件?

1 回答

  • 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
    

相关问题