Terraform 迁移工具 Terraformer

Apache
Google Go
跨平台
Google
2019-05-06
红薯

Terraformer 是一个命令行工具,用于从已有的基础设施中生成 tf 和 tfstate 文件( Terraform 的反向工具)

  • 声明:这是 Google 官方产品
  • 状态: beta - 还需要进一步完善文档和修复 bug 等
  • 作者: Waze SRE.

Waze SRE logo

功能

  1. 为所有已支持的资源对象生成 tf + tfstate 文件.
  2. 远程状态可上传到一个 GCS bucket.
  3. 使用 terraform_remote_state进行资源间的连接 (local and bucket).
  4. 兼容 terraform 0.12 语法.
  5. 可保存 tf 文件到指定目录树模式

Terraformer 使用 terraform 提供者,可以很方便的添加新的支持资源。要给资源添加新的字段只需要更新 terraform 提供者即可。

Import current state to terraform configuration from google cloud

Usage:
   import google [flags]

Flags:
  -b, --bucket string        gs://terraform-state
  -c, --connect               (default true)
  -h, --help                 help for google
  -o, --path-output string    (default "generated")
  -p, --path-patter string   {output}/{provider}/custom/{service}/ (default "{output}/{provider}/{service}/")
  -r, --resources strings    firewalls,networks
  -s, --state string         local or bucket (default "local")
      --projects strings
  -z, --zone string

支持的提供者

  1. Google cloud
  2. AWS
  3. OpenStack

权限

只读权限

如何使用 Terraformer

安卓

  1. 运行 git clone <terraformer repo>
  2. 运行 GO111MODULE=on go mod vendor
  3. 运行 go build -v
  4. 拷贝你的 Terraform 提供者的插件到目录 ~/.terraform.d/plugins/{darwin,linux}_amd64/.

terraform 提供者下载地址:

  • google cloud provider >2.0.0 - here
  • aws provider >1.56.0 - here
  • openstack provider >1.17.0 - here

提供者相关插件信息请看: https://www.terraform.io/docs/configuration/providers.html

Use with GCP

asciicast

示例:

terraformer import google --resources=gcs,forwardingRules,httpHealthChecks --connect=true --zone=europe-west1-a --projects=aaa,fff

已支持的 GCP 服务

  • addresses
  • autoscalers
  • backendBuckets
  • backendServices
  • disks
  • firewalls
  • forwardingRules
  • globalAddresses
  • globalForwardingRules
  • healthChecks
  • httpHealthChecks
  • httpsHealthChecks
  • images (bug: Either raw_disk or source_disk configuration is required.)
  • instanceGroupManagers
  • instanceGroups
  • instanceTemplates
  • instances
  • networks
  • regionAutoscalers
  • regionBackendServices
  • regionDisks
  • regionInstanceGroupManagers
  • routers
  • routes
  • securityPolicies
  • sslPolicies
  • subnetworks
  • targetHttpProxies (bug with proxy_id uint64 issue)
  • targetHttpsProxies
  • targetSslProxies
  • targetTcpProxies
  • urlMaps
  • vpnTunnels
  • gcs
  • monitoring
  • dns
  • cloudsql (bugbug)

你的 tf 和 tfstate 文件默认写到 generated/gcp/zone/service.

使用 AWS

示例:

 terraformer import aws --resources=vpc,subnet --connect=true --regions=eu-west-1
Import current State to terraform configuration from aws

Usage:
   import aws [flags]

Flags:
  -b, --bucket string        gs://terraform-state
  -c, --connect               (default true)
  -h, --help                 help for aws
  -o, --path-output string    (default "generated")
  -p, --path-patter string   {output}/{provider}/custom/{service}/ (default "{output}/{provider}/{service}/")
      --regions strings      eu-west-1,eu-west-2,us-east-1
  -r, --resources strings    vpc,subnet,nacl
  -s, --state string         local or bucket (default "local")

已支持的 AWS 服务:

  • elb
  • alb
  • auto_scaling
  • rds
  • iam
  • igw
  • nacl
  • s3
  • sg
  • subnet
  • vpc
  • vpn_connection
  • vpn_gateway
  • route53
  • elasticache

使用 OpenStack

示例:

 terraformer import openstack --resources=compute,networking --regions=RegionOne

已支持的 OpenStack 服务:

  • compute
  • networking

Developing

Terraformer built for easy to add new providers and not only cloud providers.

Process for generating tf + tfstate files:

  1. Call GCP/AWS/other api and get list of resources.
  2. Iterate over resources and take only ID (we don't need mapping fields!!!)
  3. Call to provider for readonly fields.
  4. Call to infrastructure and take tf + tfstate.

Infrastructure

  1. Call to provider for refresh method and get all data.
  2. Convert refresh data to go struct.
  3. Generate HCL file - tf files.
  4. Generate tfstate files.

All mapping of resource is made by providers and Terraform. Upgrades are needed only for providers.

GCP compute resources

For GCP compute resources, use generated code from gcp_terraforming/gcp_compute_code_generator.

To regenerate code:

go run gcp_terraforming/gcp_compute_code_generator/*.go

Similar projects

  1. https://github.com/dtan4/terraforming
的码云指数为
超过 的项目
加载中

评论(0)

暂无评论

暂无资讯

暂无问答

ArcGIS API for JavaScript 加载GeoJSON数据

欢迎访问我的博客GISer空间。 ArcGIS API for JavaScript不提供GeoJSON数据的加载,但是在Esri GitHub上提供了geojson-layer-js。geojson-layer-js是一个将GeoJSON数据加载到ArcGIS地图中的简...

2017/05/08 09:35
1K
0

没有更多内容

加载失败,请刷新页面

没有更多内容

返回顶部
顶部