[테라폼] tf 파일을 구성하는 4가지 방법!

테라폼 Registry에서 가져오는 방법! 

이 방법은 테라폼 Registry에서 예시를 보면서 하나하나 수작업으로 만들어주는 작업을 통해서 tf파일을 구성하는 방법입니다. 

장점이라고 한다면,  밑으로 스크롤을 내렸을 때  각 항목에 대해서 필수적인것과 옵션들인것들 (Optional)에 대해서 구분을 해줘서 필요한 것들에 대해서는 모두 구성을 하고 더 필요한 옵션들에 대해서 쉽게 설명을 읽고 찾아서 tf파일에 넣어줄 수 있습니다. 

단점은 시간이 엄청... 들어갑니다. 이게 맞나 싶습니다.  

 

테라폼 import를 하는 방법

https://developer.hashicorp.com/terraform/cli/import 

Terraform import는 기존에 존재하던 리소스를 "상태"로 가져오는 기능입니다.

가져올 개체가 매핑될 리소스에 대한 빈 블록을 수동으로 미리 작성해야합니다....

앞에서 설명했던 수기로 작성하는 방법에 달린 링크로 들어가서 가장 밑으로 내리면 terraform import를 하는 명령어가 나옵니다. 

terraform import aws_instance.web i-0e9eed902dee57ebd

 

이미 만들어 놓은 인스턴스의 인스턴스 ID를 뒤에 삭 넣어줍시다

 

프로바이더 정보를 넣어주고 이 디렉토리가 테라폼에 의해 관리를 할 수 있도록 terraform init을 해줍니다.

 

terraform import aws_instance.web i-0e9eed902dee57ebd

그리고 위 명령을하면...! 싹 가져오면 이상편이지만 테라폼은 그렇게 쉽지 않습니다...

하지만 친절해요 메세지를 천천히 읽으면 답을 줍니다.(선택적 친절 주의) 그래요 저 인스턴스용 블럭이 필요한겁니다. 

 

touch 명령어를 사용해서 만들어진 instance.tf파일에 빈 instance 블럭을 넣어줍니다. 

 

이렇게 import successful! 이라는 테라폼 import에 성공했다는 글이 나옵니다. 

 

 

그리고 tfstate파일이 새로 생겼습니다! 만약에 원래 있다면 덮어쓰기입니다. 

 

그리고 그 tfstate 상태파일을 확인해보면 제가 가져온 인스턴스들의 속성들을 가져온것을 확인할 수 있습니다. 

 

그리고 중요한건 이 속성이 적힌 state 파일들을 가지고 terraform plan 혹은 terraform apply를 할 수 있는게 아닙니다. 

또 아프죠...? 

 

terraform import를 해도 리소스 블럭은 아직 비어있는것이고, 저 상태파일을 참고해서 직접 선언해줘야하는 겁니다.... ㅎ

그러면 저기 플랜을 했을 때 나온 에러메세지에서 missing 되었다고 나온 속성들을 리딩해서 넣어보겠습니다.

- ami

- launch_template

- instance_type 

그리고 다시 terraform plan을 하게 되면, 만들어질 리소스에 대해서 표시를 하게 됩니다. 

앗... 선언하지 않은 속성인 tags는 사라질 예정이라는게 보이죠...?

 

여기도 함정이 있는데 

- 제가 이미 만들어진 인프라랑 완전 똑같은건 아닙니다. terraform plan이 가능할정도의 Minimum requirement만 채웠어요 정말

- plan은 plan이지 apply를 했을때 또 어떻게 error가 뜰 지 모릅니다. 

 

간략하게 terraform import에 대해서 정리하자면

- 이미 만들어져있는 인프라에서 terraform import 명령을 사용해서 상태파일을 가져온다. 

- 가져오려면 resource블럭이 필수이다. 

- 이렇게 가져온 상태파일을 기반으로 빈 resource 블럭을 하나하나 채워서 구성한다.

- 사실 본인이 인프라를 콘솔로 구성한 사람이라면 첫번째 방법이 더 편할지도 모른다... 이미 다 세부설정을 알고 있으니까...

- 본인이 인프라를 설정한 사람이 아니라면 도움이 많이 될지도 모르겠다. 


Terraforming 

https://github.com/dtan4/terraforming

terraforming은 AWS 리소스를 tf 파일 또는 tfstate 파일로 가져올 수 있는 Ruby 프로젝트입니다. (AWS만 지원된다고 하네요)

 

그래서  terraforming을 사용하기 위해선 Ruby가 깔려있어야 합니다.

https://www.ruby-lang.org/en/documentation/installation/

brew install ruby

역시 macOS 와 brew는 짱짱 입니다.

우분투 애들이 네줄 쓰면서 스냅이니 뭐니 할때 brew는 그냥 'ruby 줘' 하면 줍니다

네 리뷰 잘 써드렸습니다~ 가 아니라 잘 깔아드렸습니다~  

설치 명령 제일 뒤에 나오는 이 명령들을 무시하시지 마시고 한번 읽어보시고 적용해주면 좋습니다. 해석은 파파고가 해줄것이니 필요한지아닌지 판단하세요!  → 아 이제 chatgpt 쓰세요

 

aws configure list

위 명령어로 terraforming을 하기 전 가져올 리소스 인프라가 올려져있는 aws 계정이 맞는지, 확인을 해주는것이 좋습니다. 

gem install terraforming

ruby명령어로 terraforming을 다운받아줍니다. 

 

한번에 되는걸 보여주질 않네요;;; 익숙 하긴한데 좀 서운합니다. 권한없다고하네요 요약하면

 

sudo su

루트 권한을 얻어서 해보겠습니다. 

네 해치웠습니다~ 

terraforming ec2

이제 terraforming 명령어를 사용해서 ec2가져와보겠습니다. 

앗 그러면 이렇게 aws 환경에 구성되어있는 ec2환경을 보여줍니다. 

저걸 복사해도 되지만 명령어를 좀 아는 우리들은 이렇게 파일출력을 깔끔하게 해주는 방법을 선택하는게 현명합니다. 드래그도 복붙도 시간이예요

그러면 이렇게 main.tf가 생기고 (빨간색으로 벌써 1표시된거 보이시죠...? 이녀석 태생이 에러입니다. )

이렇게 main.tf파일 안을 보면 아까 내용들이 다 들어가게 됩니다. 

terraform plan

명령을 사용해보면 아시겠지만, 서식이 애초에 안맞게 들어온것들도 있습니다. 

 

이렇게 에러가 난 부분을 고치고

terraform plan

명령을 또 하면 

쒸익... 한번에 알려줄것이지.. 새로운 에러가 짜자잔 합니다. 

이렇게 바꿔주고 다시

terraform plan

3트째 terraform plan 명령을 하면 

Terraforming에 대해서 간단히 요약하자면

- 이미 만들어져있는 인프라를 리소스 블럭의 형식으로 가져온다.

- 간단히 출력을 파일형식으로 해서 tf파일에 넣을수도 있다.

- 하지만 이렇게 가져온 형식이 정확하지 않다.

- 형식도 정확하지않은데, 리소스 정보를 다 가져오는것도 아니고, 여러번 시도해보면 가져올 때. 마다 가챠처럼 랜덤으로 가져오기도 한다.

- 결국은 terraform import로 가져온 상태 파일을 보고 하나하나 plan을 하면서 수정해야한다. 

- 그리고 terraforming으로 가져올 수 있는 aws 리소스도 한정적이다. 

- 아예 리소스 블럭에 뭐가 들어가야할지 아이디어가 없다면 써볼만할지도 모르겠습니다.

 

terraforming READme에 있는 정보인데 현재는 이정도 리소스를 가져올 수 있다고 합니다.

$ terraforming
Commands:
  terraforming alb             # ALB
  terraforming asg             # AutoScaling Group
  terraforming cwa             # CloudWatch Alarm
  terraforming dbpg            # Database Parameter Group
  terraforming dbsg            # Database Security Group
  terraforming dbsn            # Database Subnet Group
  terraforming ddb             # DynamoDB
  terraforming ec2             # EC2
  terraforming ecc             # ElastiCache Cluster
  terraforming ecsn            # ElastiCache Subnet Group
  terraforming efs             # EFS File System
  terraforming eip             # EIP
  terraforming elb             # ELB
  terraforming help [COMMAND]  # Describe available commands or one specific command
  terraforming iamg            # IAM Group
  terraforming iamgm           # IAM Group Membership
  terraforming iamgp           # IAM Group Policy
  terraforming iamip           # IAM Instance Profile
  terraforming iamp            # IAM Policy
  terraforming iampa           # IAM Policy Attachment
  terraforming iamr            # IAM Role
  terraforming iamrp           # IAM Role Policy
  terraforming iamu            # IAM User
  terraforming iamup           # IAM User Policy
  terraforming igw             # Internet Gateway
  terraforming kmsa            # KMS Key Alias
  terraforming kmsk            # KMS Key
  terraforming lc              # Launch Configuration
  terraforming nacl            # Network ACL
  terraforming nat             # NAT Gateway
  terraforming nif             # Network Interface
  terraforming r53r            # Route53 Record
  terraforming r53z            # Route53 Hosted Zone
  terraforming rds             # RDS
  terraforming rs              # Redshift
  terraforming rt              # Route Table
  terraforming rta             # Route Table Association
  terraforming s3              # S3
  terraforming sg              # Security Group
  terraforming sn              # Subnet
  terraforming snst            # SNS Topic
  terraforming snss            # SNS Subscription
  terraforming sqs             # SQS
  terraforming vgw             # VPN Gateway
  terraforming vpc             # VPC

Options:
  [--merge=MERGE]                                # tfstate file to merge
  [--overwrite], [--no-overwrite]                # Overwrite existng tfstate
  [--tfstate], [--no-tfstate]                    # Generate tfstate
  [--profile=PROFILE]                            # AWS credentials profile
  [--region=REGION]                              # AWS region
  [--use-bundled-cert], [--no-use-bundled-cert]  # Use the bundled CA certificate from AWS SDK

JUNE .

20'S LIFE IN SYDNEY and BUSAN

    이미지 맵

    DevOps Study/Terraform 다른 글

    이전 글

    다음 글