创建谷歌云存储桶并使用相同的 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 状态保存到其中?的主要内容,如果未能解决你的问题,请参考以下文章