
테라폼 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
댓글