如何从 terraform 重新开始?

Posted

技术标签:

【中文标题】如何从 terraform 重新开始?【英文标题】:How can I start all over with terraform? 【发布时间】:2019-06-23 06:05:13 【问题描述】:

在我的 AWS 基础设施中,我在一个应用程序下存在多个环境,即:

foo 应用程序(AWS elasticbeanstalk 应用程序) foo-application-dev (tomcat 环境) foo-application-int foo-application-sys

在这些环境中,SYS 最接近我需要的架构和配置。我希望能够重新创建其他环境,使其看起来像 sys(但命名为 dev,int)。我有最初用于创建一些环境的 terraform 脚本,但现在这些脚本已经偏离了当前状态。我想从 SYS 中获取当前状态,并将其应用于 dev 和 int。我是 terraform 和 *** 的新手,所以请放慢我的脚步 :)

所有的环境都有一个状态文件,这是我正在尝试做的,但不知道如何去做..

删除所有状态文件 从 SYS 工作区中的 SYS 环境创建一个新的状态文件 将状态复制到 dev 和 int 工作区 应用 dev 和 int 计划并使环境同步。

我希望这是有道理的。

我针对开发环境运行了一个 terraform 计划,看起来它会做的比我预期的要多得多。我的研究告诉我,terraform 会将当前状态与上次运行 terraform 进行比较 - 因此在 env 中手动完成的事情可能会导致问题。我没有足够的信心运行申请,因为担心它会损坏我无法拥有的 SYS 环境。

我想要的:除了命名约定之外,三个非常相同的环境。

【问题讨论】:

【参考方案1】:

您应该使用the terraform import workflow 将您的 SYS 环境的状态文件与您创建的实际基础架构对齐。请注意,如果您在 SYS 环境中手动创建了大量基础架构,这将需要大量工作。

但是,在此过程结束时,您将拥有一套完整的用于 SYS 环境的 Terraform 代码,您可以将其转换为可重用组件的模块。 You can then use this module 将 DEV 和 INT 环境创建为 SYS 环境的克隆,但具有不同的命名约定。

【讨论】:

谢谢,这正是我开始做的。所以很高兴知道我在正确的轨道上。看来我必须删除资源的状态,导入更新的资源。然后我针对 sys 运行一个计划,看看它会采取什么行动,更新脚本,然后继续这样做。我会坚持下去,就像你说的那样工作量很大而且很乏味,但这是值得的。

以上是关于如何从 terraform 重新开始?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Ansible set_fact中使用fact?

使用 Terraform 删除以前的快照并创建 EBS 卷的新快照

Terraform 是不是支持带有少量操作的 CloudFormation 模板

将现有 GKE 集群添加到 terraform stat 文件

使用 github-script@v5 操作提取 terraform 资源更改

Terraform - 创建 EBS 的快照,然后将快照转换为 EBS 并附加到 EC2