본문 바로가기
INFRA/Operation

terraform import 알아보기 #2

by BTC_뚜벅이 2022. 12. 1.

ABTCEFG♪  안녕하세요, 여러분!

 

BTC_뚜벅이입니다.

 

지난 시간에 이어 terraform import를 사용해서 resource를 가져오는 방법에 대해 알아볼텐데요.

먼저 지난 시간에 생성된 terraform.tfstate 파일에 import 할 때 생기는 구조에 대해 알아볼게요.

 

1. terraform.tfstate 해석하기

 

여기엔 aws_vpc, aws_security_group, aws_security_group_rule 2개가 저장이 되어 있어요.

예시로 aws_vpc.import_vpc 리소스를 import했을 때 저장된 값에 대해 살펴볼게요.

테라폼 코드와 달리 json형태로 기록되어 있어요.

 

먼저 mode입니다.

"mode" : "managed"는 리소스를 생성한다는 의미에요.

 

만약 root 모듈이 있고 모듈구조에서 리소스를 가져와서 생성한다면 

"module" : "<module name>"

"mode" : "managed"

이런 구조로 tfstate 파일에 기록이 됩니다.

 

그리고 data 구문을 사용해서 data로 리소스를 가져온다면

"mode" : "data"라는 내용이 추가되어 있어요.

 

다음으로 파일 내용을 볼게요.

cidr_block, tag 값, 리소스 id값, owner_id(aws iam 계정 id)값이 나와있어요.

실제로 import를 할 때 비워둔 리소스 블록에 cidr_block, tag값만 넣으면 정상적으로 vpc 리소스를 불러올 수 있어요.

 

tfstate 파일을 보고 콘솔에서 리소스를 찾을 때 저 arn값을 보고 리소스를 찾는 방법에 대해 알려드릴게요.

arn값을 보면 

빨간색 박스 - region

초록 박스 - 계정id

노란 박스 - aws 리소스

파란 박스 - 노란 박스의 리소스 id

 

따라서 초록 박스(id 확인) -> 빨간색 박스(region 확인) -> 파란 박스(리소스 id 확인) 순서로 해석해서

리소스를 찾아야 합니다.

 

2. 리소스 블록 채우기

 

(1) aws_vpc 리소스

지난 시간에 작성한 블록에서 아무것도 채워넣지 않고 terraform plan 명령어를 입력하면 위와 같은 오류가 발생합니다.

terraform.tfstate에는 리소스가 있어도 import.tf 파일의 리소스 블록이 비워져있기 때문에 발생합니다.

 

이 리소스 블록을 채워볼텐데 지난 시간처럼 같은 문서를 참조해서 작성할게요.

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/vpc

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/security_group

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/security_group_rule

 

위는 vpc 리소스 문서인데요.

Argument Reference를 참조해서 리소스 블록값을 채워넣어야해요.

vpc의 경우 cidr_block 값을 넣어주어 리소스를 일치시켜야해요.

 

1번에서 캡처한 이미지를 보면 "cidr_block" : "10.200.0.0/16" 이므로 위처럼 작성해주고 

결과를 보기 위해 나머지 부분은 주석처리를 해준 후 plan을 돌려볼게요.

 

aws_vpc.import_vpc 리소스 외 나머지는 주석처리를 해서 aws_vpc 외 리소스는 없는 상태가 되었기 때문에

state file에서 import 한 내용도 사라져요.

 

그리고 aws_vpc.import_vpc의 이름을 Name = terraform-import-vpc라고 넣었지만 이 부분도 생략해주었기 때문에

1 to change가 된 것을 확인할 수 있어요.

해당 부분만 재수정한 후 위처럼 넣어주면 아래처럼 결과가 나와요.

aws_vpc.import_vpc 리소스는 no change라는 뜻이에요.

import 하는 모든 리소스를 no change가 출력되도록 값을 맞춰줘야합니다.

 

(2) 나머지 리소스

 

나머지는 terraform 문서와 tfstate 파일을 비교해서 작성해볼게요.

이렇게 완료하고 terraform plan-apply 명령어를 입력해볼게요.

 

plan에서 No change였기 때문에 apply도 결과가 동일하고 빨간 박스의 문구를 보면 

실제 인프라와 비교해서 차이가 없기 때문에 변경이 필요없다고 하네요.

이렇게 문구가 출력되면 import 과정도 완료입니다!

 

3. 정리

terraform import의 전체적인 순서를 정리하면 아래와 같아요.


1) terraform import 대상 리소스 선택

2) 리소스가 들어갈 빈 리소스 블록 만들기

3) terraform import 명령어로 리소스 가져오기

4) tfstate file에 기록된 json 파일을 보며 필요한 리소스 구성요소 넣어주기

5) terraform plan 후 수정사항이 발생하면 맞춰주기

6) terraform plan - apply : No changes 출력


이 순서대로 import를 진행하면 코드로 관리하고 있지 않은 리소스도 이제는 코드로 관리할 수 있게 됩니다!

만약 terraform 문서를 보고 작성해야할 때 리소스를 어떻게 작성해야할지 궁금하다면

콘솔에 있는 리소스를 import로 가져오면 어떤 값을 넣어줘야하는지 금방 알 수 있답니다.

여기에 더해 tfstate 파일을 능숙하게 읽을 수 있다면 더욱 좋겠죠?

 

댓글