【问题标题】:Rebuild/recreate terraform from remote state从远程状态重建/重建 terraform
【发布时间】:2020-03-21 09:18:36
【问题描述】:

一名承包商在他的本地笔记本电脑上构建了应用程序的 AWS 基础设施,从未提交过他的代码然后离开(擦除笔记本电脑的 HD)。但他确实使用 Terraform 创建了基础架构,并将远程状态存储在 s3 存储桶中,即 s3://analytics-nonprod/analytics-dev.tfstate。

此状态文件包括所有 VPC、子网、igw、nacl、ec2、ecs、sqs、sns、lambda、firehose、kinesis、redshift、neptune、粘合连接、粘合作业、alb、route53、s3 等。为应用程序。

我能够运行 Cloudformer 为整个基础架构生成 cloudformation,并且还尝试使用 terraformer 导入基础架构,但 terraformer 不包含 neptune 和 lambda 组件。

仅从远程状态重新创建一些可用的 terraform 的最佳方法/过程是什么? 我应该生成一些通用的: 资源“aws_glue_connection”“开发”{} 并运行“terraform import aws_glue_connection.dev” 然后运行“terraform show”

每个资源?

【问题讨论】:

    标签: amazon-web-services terraform terraform-provider-aws


    【解决方案1】:

    Terraform 没有专门用于将现有状态转换为配置的机制,而且在一般情况下这样做确实会造成损失,因为 Terraform 配置可能包含将资源彼此连接起来的表达式,而这些表达式未在状态快照中捕获。

    但是,您可能能够获得一个起点——可能不是 100% 有效,但希望是一个比什么都没有更好的起点——通过配置 Terraform 足以找到您可以访问的远程状态,运行 @ 987654321@ 让 Terraform 读取它,然后运行 ​​terraform show 以以人性化的方式查看来自状态的信息,这种方式旨在类似于(但不一定完全匹配)配置语言。

    例如,您可以编写这样的后端配置:

    terraform {
      backend "s3" {
        bucket = "analytics-nonprod"
        key    = "analytics-dev.tfstate"
      }
    }
    

    如果您使用可用的适当 AWS 凭证运行 terraform init,则 Terraform 应该读取该状态快照,安装其中的资源实例所属的提供程序,然后让您处于可以针对现有的运行 Terraform 命令的情况状态。只要您不采取任何修改状态的操作,您就应该能够使用terraform show 之类的命令对其进行检查。

    然后,您可以将 terraform show 输出复制到新 Terraform 代码库中的另一个文件中作为起点。输出是针对人类消费的,不一定都可以由 Terraform 本身解析,但输出样式与配置语言足够相似,希望它不会花费太多精力将其按摩成可用的形状。

    需要注意的一个重要细节是 Terraform 模块的处理。如果产生此状态的配置包含任何 module "foo" 块,那么在您的 terraform show 输出中,您将看到如下内容:

    # module.foo.aws_instance.bar
    resource "aws_instance" "bar" {
      # ...
    }
    

    为了复制配置,将整个输出粘贴到一个文件中是不够的。相反,任何上面有注释表明它属于一个模块的资源块都需要放在属于该模块的配置文件中,否则 Terraform 不会将该块理解为与它可以在状态。


    我强烈建议您在开始之前备份您拥有的状态对象,并且当您处于只有后端配置的奇怪状态时,您应该非常小心不要应用任何计划,因为 Terraform可能(如果它能够从执行环境中获取足够的提供程序配置)计划销毁状态中的所有对象以匹配配置。

    【讨论】:

      猜你喜欢
      • 2016-11-24
      • 2016-12-22
      • 2019-11-04
      • 2017-01-05
      • 2021-12-11
      • 2019-07-28
      • 2019-11-14
      • 1970-01-01
      • 2021-04-27
      相关资源
      最近更新 更多