【问题标题】:Terraform Remote State - state file locationTerraform 远程状态 - 状态文件位置
【发布时间】:2021-12-11 15:02:04
【问题描述】:

我将 Terraform 与 A​​WS 和 S3/Dynamo 一起用于我们所有模块的远程状态。这很好用而且很棒。

但是您要在哪里保存模块的状态文件,在哪里创建 S3 存储桶和 DynamoDB(用于远程状态)?

这听起来像是“先有鸡还是先有蛋”的问题。我是否应该将状态文件上传到 GIT 存储库,即使我不应该将它存储在那里?

通常不会再触及此状态,但如果所有开发人员都可以访问该状态会更干净,不是吗?您的最佳做法是什么?

【问题讨论】:

  • 您应该永远将状态文件上传到任何存储库。这是一个先有鸡还是先有蛋的问题。您首先必须部署 S3 和 DynamoDB,这将创建一个本地状态文件。然后,由于您有一个 S3 存储桶,您可以添加后端配置块。这后面应该是terraform init,它会询问您是否要将状态迁移到远程后端,就是这样。之后,您将在 S3 存储桶中保存状态文件。 :)
  • 您必须事先创建 S3 和 DDb。不知道你有什么问题?
  • 这出乎意料的简单,我们没有想到之后通过后端配置将状态文件复制到它。很快,非常感谢!
  • 我会将它作为答案发布,以便其他人可以看到它@Sven。

标签: terraform terraform-remote-state


【解决方案1】:

您应该切勿将状态文件上传到任何存储库。这是一个先有鸡还是先有蛋的问题。您首先必须部署 S3 和 DynamoDB,这将创建一个本地状态文件。然后,由于您有一个 S3 存储桶,您可以添加后端配置块 [1]。这后面应该是terraform init,它会询问您是否要将状态迁移到远程后端[2],就是这样。之后,您将在 S3 存储桶中保存状态文件。

更多信息在这里:

[1]https://www.terraform.io/docs/language/settings/backends/s3.html#example-configuration

[2]https://www.terraform.io/docs/language/settings/backends/configuration.html#initialization.

【讨论】:

    【解决方案2】:

    这引出了一个问题,如果您需要销毁/重建您的状态存储桶/DDB,会发生什么?

    使用存储桶和 DDB 手动配置严格控制的主帐户是一种更明智的方法。从那里你有一个基础来创建一个帐户自动售货机来设置具有状态存储桶、DDB、基线配置和 IAM 等的新帐户。

    【讨论】:

    • 同意,但是您设想在什么情况下必须删除存储桶和/或 DynamoDB 表?
    • "这里的目标是将鸡蛋问题隔离到鸡不再产蛋的情况下 - 你只需要设置一次远程状态并且很少是不是变了。” - stackoverflow.com/a/69645431/4800344
    • 这是一个很好的观点,除了完全删除帐户之外,您可能永远不需要删除远程状态资源。但如果是这样的话,将它们保持在您的远程状态是否有任何价值?在那种情况下,无论哪种方式都需要手动工作。
    猜你喜欢
    • 2021-11-20
    • 2016-11-24
    • 2016-12-22
    • 2018-03-17
    • 2018-12-14
    • 2020-09-05
    • 2019-07-28
    • 2017-01-05
    • 1970-01-01
    相关资源
    最近更新 更多