Terraform - State(Import)

김재근·2025년 4월 22일

IaC

목록 보기
6/7
post-thumbnail

Terraform Import란?

Terraform을 처음 도입하는 경우, 이런 상황이 많다:

  • 이미 AWS 콘솔에서 만들어둔 EC2, S3, RDS 같은 리소스가 있음
  • 그런데 코드로 관리하고 싶음 (IaC로 관리 전환)
  • 그런데 이미 만들어져 있는 걸 또 만들 수는 없음

이럴 때 사용하는 기능이 바로 terraform import이다.

"이미 존재하는 리소스를 State에 등록해서, Terraform이 관리하게 만드는 과정"


terraform import의 동작 원리

  • 기존 리소스를 삭제하거나 재생성하지 않는다.
  • 단지 State 파일에 추가해서 관리 대상으로 만드는 것뿐이다.

흐름 정리

  1. .tf 파일에 리소스 블록만 선언한다. (초기에는 속성 없이)
  2. terraform import 명령어로 코드 리소스 이름 ↔ 실제 클라우드 리소스 ID를 매핑한다.
  3. Terraform은 해당 리소스를 State에 등록한다.
  4. 이후 plan을 통해 코드와 클라우드 실시간 상태를 맞춘다.

terraform import 기본 사용법

1. 코드에 리소스 선언 (초기)

resource "aws_instance" "example" {
  # 초기에는 속성이 없어도 됨
}

리소스 이름과 타입만 선언해두어야 import할 수 있다.
이때 속성(attribute)은 없어도 됨.

2. terraform import 명령 실행

terraform import aws_instance.example i-0abcd1234efgh5678

aws_instance.example → 코드 상 리소스 이름
i-0abcd1234efgh5678 → 실제 AWS EC2 인스턴스 ID

성공하면 해당 리소스가 terraform.tfstate에 등록된다.

3. 이후 작업: 코드 정리 필수

  • import만 하면 State에는 연결되지만, 코드에는 속성 정보가 없다.

  • terraform plan을 실행해서 필요한 속성을 파악하고, .tf 파일을 보완해야 한다.


테라폼 없이 만들어진 인프라를 코드로 가져오려면?

단순 import만으로는 코드가 자동으로 채워지지 않는다.
따라서 직접 리소스 속성 정보를 수집하고, .tf 코드를 수작업으로 작성해야 한다.

1. 리소스 세부정보 수집

AWS Console, Azure Portal, GCP Console 등에서 리소스의 속성(AMI ID, 인스턴스 타입, 태그, 버킷 설정 등)을 모두 수집한다.
API로 조회하거나, CLI 명령어로 가져오는 것도 가능하다.

aws ec2 describe-instances --instance-ids i-0abcd1234efgh5678 # EC2 인스턴스 상세 정보를 가져오기.

2. .tf 코드 직접 작성

수집한 정보를 바탕으로, 수작업으로 .tf 파일을 작성한다.

resource "aws_instance" "example" {
  ami           = "ami-12345678"
  instance_type = "t3.micro"
  key_name      = "my-key"
  subnet_id     = "subnet-0ab12345"
  tags = {
    Name = "example-instance"
  }
}

terraform은 자동으로 코드를 채워주지 않기 때문에, 반드시 직접 작성해야 한다.

3. terraform import 실행

이제 작성한 코드 블록과 실제 리소스를 연결(import)한다.

terraform import aws_instance.example i-0abcd1234efgh5678 # 코드와 State를 매칭하는 작업이다.

4. terraform plan으로 검증

terraform plan

코드와 실제 인프라가 일치하는지 검증한다.
만약 불일치하는 속성이 있으면 수정해야 한다.
완벽히 일치하면 "No changes" 메시지가 나온다.


terraform import 작업 요약

단계 설명
1 기존 리소스 세부 정보 수집
2 `.tf` 코드 직접 작성
3 terraform import 명령어로 연결
4 terraform plan으로 코드 검증 및 수정

terraform import는 기존 인프라를 삭제하지 않고 Terraform State로 편입시키는 기능이다.
하지만 코드는 반드시 수작업으로 작성하고, Plan을 통해 정합성을 검증해야 한다.

profile
FullStack + DevOps 개발자입니다.

0개의 댓글