创建谷歌云存储桶并使用相同的 terraform 脚本将 terraform 状态保存到其中?

Posted

技术标签:

【中文标题】创建谷歌云存储桶并使用相同的 terraform 脚本将 terraform 状态保存到其中?【英文标题】:Create google cloud bucket and save terraform state to it with the same terraform script? 【发布时间】:2021-12-09 10:25:51 【问题描述】:

我是 terraform 的新手,正在尝试使用它从头开始创建和配置整个项目。我们目前正在考虑将其作为 1 个 google 项目是一个环境。

将 terraform 远程状态存储在它正在配置的项目中的存储桶内似乎是合理的。即让 terraform 创建谷歌云项目,创建一个存储桶,然后将其自己的远程状态存储在它刚刚创建的存储桶中。这似乎也很先进,可能是鸡/蛋。

是否可以将 terraform 脚本远程状态存储在 terraform 脚本本身正在创建的项目中?

【问题讨论】:

您首先必须创建存储桶并在本地存储状态,然后添加远程后端配置。添加远程后端后的第一步是重新运行terraform init,这会将状态迁移到远程后端。 @MarkoE 那么那会是什么样子呢?我会将项目创建和存储桶创建隔离到一个文件中,运行它,然后再次运行 terraform init? 1.我如何让 terraform 在第一次运行时忽略我的所有其他文件? 2. 如果我对现有项目运行相同的流程,它可能会搞砸,对吧?做这一切似乎也不是原子的,也不会被锁定。 3. 似乎最好使用 2 个单独的 terraform 脚本来完成。一个环境创建脚本,然后是一个部署/发布脚本。我正在尝试做的事情是不可能的。对吗? 正如 Marko 所说,您基本上只需要先创建存储桶(使用 cli、控制台、脚本.. 等等)。我不确定,但是之后您可以将存储桶导入到 terraform 状态,但是我认为这不好,因为您可能在 terraform 上遇到问题,并且可以删除整个存储桶,因此您将失去所有状态。如果您对已经有对象的存储桶运行 terraform,则 terraform 不会删除它们,terraform 将管理存储桶(权限等),而不是对象。 如果你想“自动化”它,你可以有一个 setup.sh 例如创建这个存储桶,你只需要在第一次运行它,或者如果你改进它的逻辑,您可以检查bucket是否存在并决定是否创建。 @JuanFontes setup.sh 创建初始存储桶等什么? 【参考方案1】:

您可以使用 terraform 创建项目和存储桶,然后将状态迁移到该存储桶中。但这是一个先有鸡还是先有蛋的场景,这就引出了一个问题,如果您需要删除/重建包含状态的存储桶会发生什么?

更明智的方法是手动创建主项目和远程状态存储桶。从那里您将拥有一个项目自动售货机的基础,以启动新项目和基线配置。

【讨论】:

【参考方案2】:

不 - 你不能这样做。经过几天的研究,这是不可能的。

【讨论】:

以上是关于创建谷歌云存储桶并使用相同的 terraform 脚本将 terraform 状态保存到其中?的主要内容,如果未能解决你的问题,请参考以下文章

将谷歌云盔甲添加到 Terraform gke 和 kubernetes

如何更改默认的 Firebase 存储桶?

使用 SSIS 将本地文件上传到谷歌云存储桶

谷歌云构建:在谷歌云存储库上克隆私有存储库失败

从谷歌云存储获取状态 503

在谷歌云上创建集群