terraformer

terraformer

从现有基础设施逆向生成Terraform配置的开源工具

Terraformer是一个开源CLI工具,能够从现有基础设施逆向生成Terraform配置文件和状态文件。该工具支持Google Cloud、AWS、Azure等多个主流云平台,可以导入特定资源、过滤结果并自定义导入过程。Terraformer基于Terraform提供程序开发,易于扩展支持新资源。对于将已有基础设施迁移到Terraform管理,或者快速创建基础设施即代码配置,Terraformer都是一个实用的辅助工具。

Terraformer基础设施TerraformCLI工具云服务Github开源项目

Terraformer

测试 代码检查 Go 报告卡 AUR 包 Homebrew

一个基于现有基础设施生成 tf/jsontfstate 文件的命令行工具(反向 Terraform)。

  • 免责声明:这不是 Google 的官方产品
  • 由 Waze SRE 创建

Waze SRE 标志

目录

GCP 演示

asciicast

功能

  1. 为所有支持的资源对象生成 tf/json + tfstate 文件,从现有基础设施。
  2. 远程状态可以上传到 GCS 存储桶。
  3. 使用 terraform_remote_state 连接资源(本地和存储桶)。
  4. 使用自定义文件夹树模式保存 tf/json 文件。
  5. 按资源名称和类型导入。
  6. 支持 terraform 0.13(对于 terraform 0.11 使用 v0.7.9)。

Terraformer 使用 Terraform 提供商,设计为易于支持新添加的资源。 要升级具有新字段的资源,您只需要升级相关的 Terraform 提供商。

从提供商导入当前状态到 Terraform 配置

用法:
   import [provider] [flags]
   import [provider] [command]

可用命令:
  list        列出提供商支持的资源

标志:
  -b, --bucket string         gs://terraform-state
  -c, --connect                (默认为 true)
  -С, --compact                (默认为 false)
  -x, --excludes strings      firewalls,networks
  -f, --filter strings        compute_firewall=id1:id2:id4
  -h, --help                  google 的帮助
  -O, --output string         输出格式 hcl 或 json(默认为 "hcl")
  -o, --path-output string     (默认为 "generated")
  -p, --path-pattern string   {output}/{provider}/ (默认为 "{output}/{provider}/{service}/")
      --projects strings
  -z, --regions strings       europe-west1,(默认为 [global])
  -r, --resources strings     firewall,networks 或 * 表示所有服务
  -s, --state string          local 或 bucket(默认为 "local")
  -v, --verbose               详细模式
  -n, --retry-number          刷新失败时执行的重试次数
  -m, --retry-sleep-ms        重试之间的睡眠时间(毫秒)

使用 "import [provider] [command] --help" 获取有关命令的更多信息。

权限

该工具需要只读权限来列出服务资源。

资源

您可以使用 --resources 参数来指定要从哪些服务导入资源。

要从所有服务导入资源,请使用 --resources="*"。如果您想排除某些服务,可以将该参数与 --excludes 结合使用,以排除您不想导入的服务资源,例如 --resources="*" --excludes="iam"

过滤

过滤器是选择 terraformer 导入哪些资源的方法。可以根据资源的标识符或属性进行过滤。多个过滤值用 : 分隔。如果标识符包含此符号,值应该用 ' 包裹,例如 --filter=resource=id1:'project:dataset_id'。基于标识符的过滤器将在 Terraformer 尝试刷新远程状态之前执行。

当您需要只过滤几种资源类型中的一种时,使用 Type。在导入不同资源类型时可以组合多个过滤器。一个例子是从特定 AWS VPC 导入所有 AWS 安全组:

terraformer import aws -r sg,vpc --filter Type=sg;Name=vpc_id;Value=VPC_ID --filter Type=vpc;Name=id;Value=VPC_ID

注意 sgNamevpc 的不同。

迁移状态版本

对于 terraform >= 0.13,您可以使用 replace-provider 从先前版本迁移状态。

使用示例:

terraform state replace-provider -auto-approve "registry.terraform.io/-/aws" "hashicorp/aws"
资源 ID

过滤基于 Terraform 资源 ID 模式。要找到资源的有效 ID 模式,请查看 Terraform 文档 的导入部分。

使用示例:

terraformer import aws --resources=vpc,subnet --filter=vpc=myvpcid --regions=eu-west-1

将只导入 id 为 myvpcid 的 vpc。这种形式的过滤器可以在需要通过标识符选择资源时提供帮助。

仅字段名

可以只按特定字段名进行过滤。例如,当您只想检索具有特定标签键的资源时,可以使用此方法。

使用示例:

terraformer import aws --resources=s3 --filter="Name=tags.Abc" --regions=eu-west-1

将只导入具有标签 Abc 的 s3 资源。当字段值从过滤角度来看不重要时,这种形式的过滤器可以提供帮助。

包含点的字段

可以按包含点的字段进行过滤。

使用示例:

terraformer import aws --resources=s3 --filter="Name=tags.Abc.def" --regions=eu-west-1

将只导入具有标签 Abc.def 的 s3 资源。

规划

plan 命令生成一个包含所有设置为导入的资源的计划文件。通过在运行 import 命令之前修改计划文件,您可以重命名或过滤要导入的资源。

其余的子命令和参数与 import 命令相同。

$ terraformer plan google --resources=networks,firewall --projects=my-project --regions=europe-west1-d
(省略)

将计划文件保存到 generated/google/my-project/terraformer/plan.json

在查看/自定义计划文件后,通过运行 import plan 开始导入。

$ terraformer import plan generated/google/my-project/terraformer/plan.json

资源结构

Terraformer 默认将每个资源分成一个文件,放入给定的服务目录中。

资源文件的默认路径是 {output}/{provider}/{service}/{resource}.tf,对于每个提供商可能会有所不同。

可以通过以下方式调整生成的结构:

  1. 使用 --compact 参数将单个服务内的资源文件分组到一个 resources.tf 文件中
  2. 调整 --path-pattern 参数并传递例如 --path-pattern {output}/{provider}/ 以在一个目录中生成所有服务的资源

可以组合使用 --compact--path-pattern 参数。

安装

需要安装 Terraformer 和 Terraform 提供商插件。

Terraformer

从包管理器安装

  • Homebrew 用户可以使用 brew install terraformer
  • MacPorts 用户可以使用 sudo port install terraformer
  • Chocolatey 用户可以使用 choco install terraformer

从发布版安装 这会安装所有提供商,如果您只需要其中一个,将 PROVIDER 设置为 googleawskubernetes 之一。

  • Linux
export PROVIDER=all
curl -LO "https://github.com/GoogleCloudPlatform/terraformer/releases/download/$(curl -s https://api.github.com/repos/GoogleCloudPlatform/terraformer/releases/latest | grep tag_name | cut -d '"' -f 4)/terraformer-${PROVIDER}-linux-amd64"
chmod +x terraformer-${PROVIDER}-linux-amd64
sudo mv terraformer-${PROVIDER}-linux-amd64 /usr/local/bin/terraformer
  • MacOS
export PROVIDER=all
curl -LO "https://github.com/GoogleCloudPlatform/terraformer/releases/download/$(curl -s https://api.github.com/repos/GoogleCloudPlatform/terraformer/releases/latest | grep tag_name | cut -d '"' -f 4)/terraformer-${PROVIDER}-darwin-amd64"
chmod +x terraformer-${PROVIDER}-darwin-amd64
sudo mv terraformer-${PROVIDER}-darwin-amd64 /usr/local/bin/terraformer
  • Windows
  1. 安装 Terraform - https://www.terraform.io/downloads
  2. 从这里下载所需提供商的 exe 文件 - https://github.com/GoogleCloudPlatform/terraformer/releases
  3. 将 exe 文件路径添加到路径变量

从源代码安装

  1. 运行 git clone <terraformer repo> && cd terraformer/
  2. 运行 go mod download
  3. 运行 go build -v 用于所有提供商,或者使用一个提供商构建 go run build/main.go {google,aws,azure,kubernetes,etc} 下载Terraform提供程序插件的链接:

提供程序插件的信息: https://www.terraform.io/docs/configuration/providers.html

添加新提供程序的高级步骤

  • 在cmd/root.go中初始化提供程序详情,并在terraformer/cmd文件夹中创建提供程序初始化文件
  • 在terraformer/providers/下为你的提供程序创建一个文件夹
  • 在此文件夹下创建两个文件
    • <provide_name>_provider.go
    • <provide_name>_service.go
  • 在<provide_name>_provider.go文件中初始化所有提供程序支持的服务
  • 在同一文件夹中为每个支持的服务创建脚本

贡献

如果您有改进或修复,我们非常欢迎您的贡献。 请阅读CONTRIBUTING.md以了解更多关于我们希望贡献者遵循的流程。

开发

Terraformer的设计使您可以轻松添加各种新的提供程序。

生成tf/json + tfstate文件的过程:

  1. 调用GCP/AWS/其他API并获取资源列表。
  2. 遍历资源并仅获取ID(我们不需要映射字段!)。
  3. 调用提供程序获取只读字段。
  4. 调用基础设施并获取tf + tfstate。

基础设施

  1. 使用刷新方法调用提供程序并获取所有数据。
  2. 将刷新数据转换为go结构。
  3. 生成HCL文件 - tf/json文件。
  4. 生成tfstate文件。

所有资源映射均由提供程序和Terraform完成。升级仅需要针对提供程序进行。

GCP计算资源

对于GCP计算资源,请使用providers/gcp/gcp_compute_code_generator中生成的代码。

要重新生成代码:

go run providers/gcp/gcp_compute_code_generator/*.go

类似项目

terraforming

Terraformer的优势
  • 添加新提供程序和资源更简单 - 已支持AWS、GCP、GitHub、Kubernetes和Openstack。Terraforming仅支持AWS。
  • 对HCL + tfstate的更好支持,包括Terraform 0.12的更新。
  • 如果提供程序向资源添加新属性,无需更改Terraformer代码 - 只需在您的笔记本电脑上更新Terraform提供程序。
  • 自动支持HCL文件中资源之间的连接。
比较

Terraforming从云API获取所有属性,并通过模板创建HCL和tfstate文件。API中的每个属性都需要映射到Terraform中的属性。从模板生成的文件可能会因非法语法而出错。当提供程序添加新属性时,需要更新terraforming代码。

Terraformer则使用Terraform提供程序文件进行属性映射,使用Hashicorp的HCL库,以及Terraform代码。

看看terraforming中的S3支持和官方S3支持 Terraforming对资源的覆盖不全面 - 例如,您可以看到70%的S3选项不受支持:

随时间变化的Star数

随时间变化的Star数

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多