테라포머(Terraformer)를 활용해 테라폼(Terraform) 코드 추출

Hognod·2023년 10월 28일

1. Terraformer Installation

https://github.com/GoogleCloudPlatform/terraformer/releases

위 링크에서 사용중인 OS 환경에 맞게 다운로드

1.1. Linux

chmod +x terraformer-all-linux-amd64
sudo mv terraformer-all-linux-amd64 /usr/local/bin/terraformer

1.2. MacOS

chmod +x terraformer-all-darwin-arm64
sudo mv terraformer-all-darwin-arm64 /usr/local/bin/terraformer

or

brew install terraformer

2. Provider Installation

https://releases.hashicorp.com/

Provider를 설치할 디렉토리 생성(Apple Silicon Mac)

mkdir -p ~/.terraform.d/plugins/darwin_arm64

해당 경로에 위 링크에서 원하는 Provider 파일 다운로드 및 Unzip

wget https://releases.hashicorp.com/terraform-provider-aws/5.22.0/terraform-provider-aws_5.22.0_darwin_arm64.zip -P ~/.terraform.d/plugins/darwin_arm64/
unzip ~/.terraform.d/plugins/darwin_arm64/terraform-provider-aws_5.22.0_darwin_arm64.zip

3. Terraformer Usage

https://github.com/GoogleCloudPlatform/terraformer

terraformer import aws --resources=<Terraformer용 Resource Type> --path-pattern="{output}/" --regions=<Region>
terraformer import aws --resource=vpc,subnet,igw --path-pattern="{output}/" --regions=ap-northeast-2
  • --resources, -r: Terraform 코드로 import할 대상을 지정한다. * 지정 가능

    • https://github.com/GoogleCloudPlatform/terraformer#table-of-contents

      • 위 링크에서 Terraform 코드화 대상을 선택하여 지원하는 Resource들을 살펴볼 수 있다.

      • 아래의 형식을 따름

      • Terraformer에서 쓰이는 Resource Type
        	Terraform 코드화될 Resource Type1
        	Terraform 코드화될 Resource Type2
        	Terraform 코드화될 Resource Type3
        	...

Screenshot-8294164

  • --path-pattern, -o: 지정하지 않을 경우 각각의 리소스 별로 디렉토리가 생성되어 해당 디렉토리 안에 .tf 파일이 생성된다.

  • --output, -O: 포멧을 hcl, json 중에 선택할 수 있다.(Default: hcl)

  • --excludes. -x: 지정한 대상을 제외하고 Terraform 코드로 import한다.

    • --resources="*" --excludes="iam"
  • --filter, -f: Terraform 코드로 import할 대상에 필터를 적용한다. ;

    • Name: 필드 이름만 가져올 때 사용

      • terraformer import aws --resources=s3 --filter="Name=tags.Abc" --regions=ap-northeast-2

        Abc라는 Tag가 있는 S3 Resource만 가져옴

    • Type: 여러 유형의 Resource 중에서 하나만 필터링해야 할 때 사용

      • terraformer import aws -r sg,vpc --filter="Type=sg;Name=tags.Name" --regions=ap-northeast-2

        vpcsg Resource 중 Name이라는 Tag가 있는 sg Resource만 가져옴

    • Value: Name 필터로 지정한 필드의 값을 지정해서 가져옴

      • terraformer import aws -r=ec2_instance --filter="Name=tags.Name;Value=hognod-ec2" --region=ap-northeast-2

        ec2_instance Resource 중 Name이라는 Tag의 값이 hognod-ec2인 Resource만 가져옴

4. Error

terraformer로 추출한 코드를 이용하여 Infra를 생성하기 위해 terraform init 명령어 실행 시, 아래와 같은 Error가 발생할 수 있다.

│ Error: Invalid legacy provider address
│
│ This configuration or its associated state refers to the unqualified provider "aws".
│
│ You must complete the Terraform 0.13 upgrade process before upgrading to later versions.

이는 terraform.tfstate 파일의 provider 부분이 잘못되어 발생하는 Error로 아래 명령어로 해당 부분을 수정하면 정상 동작하는 것을 확인할 수 있다.

terraform state replace-provider -- -/aws hashicorp/aws

0개의 댓글