terraformer - 클라우드 리소스에서 terraform 코드 생성하기
현재 있는 클라우드의 리소스를 이용하여 terraform 코드를 생성하는 프로그램 중 terraformer 에 대해 간단히 적은 글입니다.
AWS, terraform에 대해서는 기본 지식이 있다는 전제하에 글을 적습니다.
설치 : 위 url에서 설명 보고 설치한다.
export PROVIDER=aws
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
versions.tf 파일 만들고 terraform init 하면 플랫폼에 맞는 플러그인을 다운로드 받는다.
아니면 Terraform provider's plugin 을 ~/.terraform.d/plugins/{darwin,linux}_amd64/ 에 직접 설치할 수도 있다.
$ cat versions.tf
terraform {
required_version = ">= 1.1.7"
required_providers {
aws = {
source = "hashicorp/aws"
version = ">= 4.2.0"
}
}
}
이제 원하는 리소스를 import 해서 가져온다. AWS를 이용할 때는 profile 을 지정한다. terraformer/docs/aws.md at master · GoogleCloudPlatform/terraformer
terraformer import aws --resources=ec2_instance --regions=ap-northeast-2 --profile=prod
terraformer import aws --resources=vpc --regions=ap-northeast-2 --profile=prod
terraformer import aws --resources=sg --regions=ap-northeast-2 --profile=prod
생성된 디렉토리
페이지 마지막에 terraforming 과 비교한 내용이 있다.
GitHub - GoogleCloudPlatform/terraformer: CLI tool to generate terraform files from existing infrastructure (reverse Terraform). Infrastructure to Code
If a provider adds new attributes to a resource, there is no need change Terraformer code - just update the Terraform provider on your laptop.
Terraforming gets all attributes from cloud APIs and creates HCL and tfstate files with templating. Each attribute in the API needs to map to attribute in Terraform. Generated files from templating can be broken with illegal syntax. When a provider adds new attributes the terraforming code needs to be updated.
Terraformer instead uses Terraform provider files for mapping attributes, HCL library from Hashicorp, and Terraform code.
terraforming 은 AWS만 지원을 하지만 terraformer는 여러 클라우드 지원.
terraforming 은 모든 속성을 cloud APIs에서 가져와 템플릿으로 HCL, tfstate 파일을 만든다. 이경우 API의 각 속성별로 Terraform 의 속성과 연결을 해주어야 한다. 템플릿에서 생성된 파일이 잘못된 syntax 때문에 깨질 수 있다. provider가 새로운 속성을 추가하면 테라폼 코드를 업데이트 해야 한다.
Terraformer는 속성 매핑, Hashicorp의 HCL 라이브러리 및 Terraform 코드에 Terraform 공급자 파일을 대신 사용한다??
이 부분이 중요한 것 같다. provider 가 리소스에 새로운 속성을 추가해도 terraform 코드를 업데이트할 필요가 없고 Terraform provider (AWS 플러그인)만 업데이트를 하면 된다.
이 때문에 terraforming 은 현재 업데이트가 안되고 있다.
참고
GitHub - dtan4/terraforming: Export existing AWS resources to Terraform style (tf, tfstate) / No longer actively maintained : 현재 업데이트 안함.
Infrastructure to Code: Terraformer
GitHub - shuaibiyy/awesome-tf: Curated list of resources on HashiCorp's Terraform and OpenTofu : 잡다한 terraform 정보 모아둔 곳.
GitHub - iann0036/former2: Generate CloudFormation / Terraform / Troposphere templates from your existing AWS resources. 웹 UI에서 현재 있는 AWS 리소스를 가지고 CloudFormation / Terraform / Troposphere templates 을 만든다. 웹에서 AWS key 등 간단한 정보만 입력을 하면 된다.
기타
terraform import 에서 count 형태의 리소스는 ' 로 감싸서 가져와야 함.