将当前的云基础设施导入基础设施即代码 Terraform 配置 (HCL) 或/和 Terraform 状态。
在 Cycloid,基础设施即代码从一开始就融入了公司的 DNA。为了帮助我们的新客户采用这种最佳实践,我们决定构建 Terracognita,依靠社区构建的 Terraform 提供程序,以自动化方式将 Cloud Infrastructure 上的现有基础设施转换为 Terraform 代码。我们专注于 AWS、GCP、Azure 和 Vmware。
我们决定开源这个工具,因为我们相信它将帮助人们以简单的方式采用 IaC。 Cycloid 提供此工具,让人们将其基础设施导入 Cycloid 的管道中,使他们能够生成基础设施图表并从单个界面管理所有基础设施/应用程序生命周期。
如果您有兴趣为 Terracognita 做出贡献或者只是对下一步发展感到好奇,请查看公共路线图。如需高级概述,请查看什么是 Terracognita?博客文章或观看此视频。
Terracognita 目前导入 AWS、GCP、AzureRM 和 VMware vSphere 云提供商作为 Terraform (v1.1.9) 资源/状态。请参阅以下版本:
提供商:
访问发布页面以选择您需要的系统、架构和版本。要拉取最新版本:
curl -L https://github.com/cycloidio/terracognita/releases/latest/download/terracognita-linux-amd64.tar.gz -o terracognita-linux-amd64.tar.gz
tar -xf terracognita-linux-amd64.tar.gz
chmod u+x terracognita-linux-amd64
sudo mv terracognita-linux-amd64 /usr/local/bin/terracognita
您可以使用最新的源代码构建和安装,您将享受新功能和错误修复。它使用 Go 模块,因此需要 GO 1.17+。
git clone https://github.com/cycloidio/terracognita
cd terracognita
make install
AUR 中有两个条目:terracognita-git(针对最新的 git 提交)和 terracognita(针对最新的稳定版本)。
yay -Ss terracognita
aur/terracognita 1:0.3.0-1 (+0 0.00%)
Reads from existing Cloud Providers (reverse Terraform) and generates your infrastructure as code on Terraform configuration
aur/terracognita-git 1:v0.3.0.r27.gdfc5a99-1 (+0 0.00%)
Reads from existing Cloud Providers (reverse Terraform) and generates your infrastructure as code on Terraform configuration
如果您是 macOS 用户并使用 Homebrew,您可以通过brew 命令安装:
brew install terracognita
Terracognita的主要用途是:
terracognita [TERRAFORM_PROVIDER] [--flags]
您将TERRAFORM_PROVIDER
替换为您要使用的提供程序(例如aws
),然后添加其他必需的标志。每个提供者都有不同的标志和不同的必需标志。
更通用的是--hcl
或--module
和--tfstate
它指示 HCL(或模块)的输出文件和将生成的 TFState。
您还可以使用其具有的 Terraform 名称(例如aws_instance
--include
或--exclude
多个资源。
如需更多选项,您始终可以使用terracognita --help
和terracognita [TERRAFORM_PROVIDER] --help
获取提供程序的特定文档。
我们还提供了make help
,为使用 Terracognita 的实际代码库提供了一些帮助
Terracognita可以在导入时直接生成Terraform Modules。要启用此功能,您需要使用--module {module/path/name}
然后在该特定路径上生成模块。路径必须是目录或不存在的路径(将被创建),路径的内容将被删除(在用户确认后),以便我们可以进行干净的导入。
输出结构将类似于(具有--module test
),其中每个文件聚合来自同一“类别”的资源:
test/
├── module-test
│ ├── autoscaling.tf
│ ├── cloud_front.tf
│ ├── cloud_watch.tf
│ ├── ec2.tf
│ ├── elastic_load_balancing_v2_alb_nlb.tf
│ ├── iam.tf
│ ├── rds.tf
│ ├── route53_resolver.tf
│ ├── route53.tf
│ ├── s3.tf
│ ├── ses.tf
│ └── variables.tf
└── module.tf
默认情况下,变量的所有属性都会更改,这些变量将位于module-{name}/variables.tf
上,并在module.tf
上公开,如下所示:
module "test" {
# aws_instance_front_instance_type = "t2.small"
[ ... ]
source = " module-test "
}
如果您想更改此行为,对于大型基础设施,这将创建很多变量,您可以使用--module-variables path/to/file
并且该文件将包含您想要实际使用的属性列表作为变量,它可以是 JSON 或 YAML 形式:
{
"aws_instance" : [
" instance_type " ,
" cpu_threads_per_core " ,
" cpu_core_count "
]
}
aws_instance :
- instance_type
- cpu_threads_per_core
- cpu_core_count
您可以直接使用构建的图像,也可以构建自己的图像。要构建 Docker 镜像,只需运行:
make dbuild
然后根据您要使用的图像( cycloid/terracognita
或您本地构建的terracognita
):
docker run cycloid/terracognita -h
例子:
export AWS_ACCESS_KEY_ID=XXXXXXXXXXXXXXXXXXXX
export AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
export AWS_DEFAULT_REGION=xx-yyyy-0
docker run
-v " ${PWD} " /outputs:/app/outputs
cycloid/terracognita aws
--hcl app/outputs/resources.tf
本地版本可以像docker一样使用。您只需要在本地构建它即可。
在导入的同一文件夹中,您可以运行 terraform init & plan 命令:
terraform init
terraform plan -var access_key= $AWS_ACCESS_KEY_ID -var secret_key= $AWS_SECRET_ACCESS_KEY -var region= $AWS_DEFAULT_REGION
请参阅 MIT 许可证文件。
该项目的所有显着更改都将记录在该文件中。
该格式基于保留更改日志,并且该项目遵循语义版本控制。
Cycloid 是一个可持续的平台工程,允许任何人与工具、自动化和云进行交互,而无需成为专家并遵守最佳实践。在自助服务门户中,您可以找到一些有关治理、部署、运营、Finops 和 GreenOps 的模块。 Cycloid 内的 InfraImport 是 Terracognita 的视觉表示。
截至目前,我们拥有三个开源工具:
...每个功能也嵌入在我们的平台中,您可以在此处了解更多信息。