terraform import 커맨드 레퍼런스

terraform import 커맨드 레퍼런스

terraform import 커맨드는 기존 리소스를 Terraform으로 가져와요. 자세한 내용은 Import를 참고하세요. 실습과 함께 배우고 싶다면 Import Terraform Configuration 튜토리얼을 해보세요.

출처: 문서

본문

사용법 (Usage)

사용법: terraform import [options] ADDRESS ID

Import는 ID에서 기존 리소스를 찾아 주어진 ADDRESS의 Terraform 상태로 가져와요.

ADDRESS는 유효한 리소스 주소여야 해요. 어떤 리소스 주소든 유효하기 때문에, import 커맨드는 리소스를 모듈 안으로도 상태의 루트로 직접도 가져올 수 있어요.

ID는 가져오는 리소스 타입에 따라 달라져요. 예를 들어 AWS EC2 인스턴스는 인스턴스 ID(i-abcd1234)이고, AWS Route53 존은 존 ID(Z12ABC4UGMOZ2N)예요. ID 형식에 대한 자세한 내용은 프로바이더 문서를 참고하세요. 확실하지 않으면 ID를 그냥 시도해봐도 돼요. ID가 유효하지 않으면 오류 메시지를 받게 돼요.

경고: Terraform은 관리하는 각 원격 객체가 하나의 리소스 주소에만 바인딩될 것을 기대해요. 이는 일반적으로 Terraform이 모든 객체를 직접 생성하기 때문에 보장돼요. 기존 객체를 Terraform으로 가져올 때는 각 원격 객체를 하나의 Terraform 리소스 주소로만 가져오도록 주의하세요. 같은 객체를 여러 번 가져오면 Terraform이 원치 않는 동작을 보일 수 있어요. 이 가정에 대한 자세한 내용은 State 섹션을 참고하세요.

리소스를 수동으로 가져오는 대신, Terraform 설정에 import 블록을 추가해서 terraform apply 커맨드를 실행할 때 Terraform이 리소스를 가져오게 할 수도 있어요. Terraform 설정을 사용하면 CI/CD 파이프라인의 일부로 리소스 가져오기를 자동화할 수 있어요. 자세한 내용은 import 블록 레퍼런스 문서를 참고하세요.

명령줄 플래그는 모두 선택사항이에요. 사용 가능한 플래그는 다음과 같아요:

  • -config=path - import에 사용할 프로바이더를 구성하는 Terraform 설정 파일이 있는 디렉터리 경로. 기본값은 작업 디렉터리예요. 이 디렉터리에 Terraform 설정 파일이 없으면, 프로바이더는 수동 입력 또는 환경 변수를 통해 구성해야 해요.

  • -input=true - 프로바이더 설정에 대한 입력을 요청할지 여부.

  • -lock=false - 작업 중 상태 잠금을 유지하지 않아요. 다른 사람이 같은 워크스페이스에 대해 동시에 커맨드를 실행할 수 있다면 위험해요.

  • -lock-timeout=0s - 상태 잠금을 재시도하는 기간.

  • -no-color - 지정하면 출력에 색상이 포함되지 않아요.

  • -parallelism=n - Terraform이 그래프를 탐색할 때 동시 작업 수를 제한해요. 기본값은 10이에요.

  • -provider=provider - 더 이상 사용되지 않음(deprecated). 객체를 가져올 때 사용할 프로바이더 구성을 재정의해요. 기본적으로 Terraform은 대상 리소스의 설정에 지정된 프로바이더를 사용하며, 대부분의 경우 이것이 가장 좋은 동작이에요.

  • -var 'foo=bar' - Terraform 설정에서 변수를 설정해요. 이 플래그는 여러 번 설정할 수 있어요. 변수 값은 Terraform 언어의 리터럴 표현식으로 해석되므로, 이 플래그로 리스트·맵 값도 지정할 수 있어요.

  • -var-file=foo - 변수 파일에서 Terraform 설정의 변수를 설정해요. 현재 디렉터리에 terraform.tfvars.auto.tfvars 파일이 있으면 자동으로 로드돼요. Terraform은 terraform.tfvars를 먼저 로드하고 그다음 .auto.tfvars 파일을 알파벳순으로 로드해요. -var-file로 지정한 파일은 작업 디렉터리의 파일에서 자동으로 설정된 값을 재정의해요. 이 플래그는 여러 번 사용할 수 있어요. -config 플래그와 함께 사용할 때만 유용해요.

HCP Terraform CLI 통합 또는 remote 백엔드를 사용하는 설정에서만 terraform import-ignore-remote-version 옵션도 받아요. 로컬 백엔드를 사용하는 설정에서만 terraform import는 레거시 옵션 -state, -state-out, -backup도 받아요.

프로바이더 구성 (Provider Configuration)

Terraform은 import에 사용되는 프로바이더를 구성하는 설정 파일을 로드하려고 시도해요. 설정 파일이 없거나 해당 프로바이더에 대한 설정이 없으면, Terraform은 액세스 자격 증명을 묻는 프롬프트를 띄워요. 프로바이더를 구성하는 환경 변수를 지정할 수도 있어요.

설정 파일을 읽을 때 Terraform의 유일한 제한은 import 프로바이더 구성이 비변수(non-variable) 입력에 의존하면 안 된다는 거예요. 예를 들어 프로바이더 구성은 데이터 소스에 의존할 수 없어요.

실제 예로, AWS 리소스를 가져오는 중이고 아래 내용의 설정 파일이 있다면, Terraform은 이 파일로 AWS 프로바이더를 구성해요.

variable "access_key" {}
variable "secret_key" {}

provider "aws" {
  access_key = var.access_key
  secret_key = var.secret_key
}

예제: 리소스로 가져오기 (Example: Import into Resource)

이 예제는 AWS 인스턴스를 foo라는 aws_instance 리소스로 가져와요:

$ terraform import aws_instance.foo i-abcd1234

예제: 모듈로 가져오기 (Example: Import into Module)

아래 예제는 AWS 인스턴스를 foo라는 모듈 안의 bar라는 aws_instance 리소스로 가져와요:

$ terraform import module.foo.aws_instance.bar i-abcd1234

예제: count로 구성된 리소스로 가져오기 (Example: Import into Resource configured with count)

아래 예제는 count로 구성된 baz라는 aws_instance 리소스의 첫 번째 인스턴스로 AWS 인스턴스를 가져와요:

$ terraform import 'aws_instance.baz[0]' i-abcd1234

예제: for_each로 구성된 리소스로 가져오기 (Example: Import into Resource configured with for_each)

아래 예제는 for_each로 구성된 baz라는 aws_instance 리소스의 "example" 인스턴스로 AWS 인스턴스를 가져와요:

Linux, Mac OS, UNIX:

$ terraform import 'aws_instance.baz["example"]' i-abcd1234

PowerShell:

$ terraform import 'aws_instance.baz[\"example\"]' i-abcd1234

Windows cmd.exe:

$ terraform import aws_instance.baz[\"example\"] i-abcd1234

더 알아보기 (Learn more)