import 블록 참조

import 블록 참조 (import block reference)

import 블록은 기존 인프라 리소스를 Terraform으로 가져오도록 Terraform에 지시해요. 자세한 내용은 기존 리소스 가져오기 (Import existing resources)를 참고하세요.

출처: 문서

본문

구성 모델 (Configuration model)

import 블록은 다음 구성을 지원해요:

완전한 구성 (Complete configuration)

다음 import 블록은 모든 내장 인자를 포함해요:

import {
  to = resource.type.address
  id = "cloud-provider-id"    
  for_each = {                # `for_each` accepts a map or a set of strings 
    <KEY> = <VALUE>
  }
  for_each = [            # `for_each` accepts a map or a set of strings 
    "<VALUE>", 
    "<VALUE>"
  ]
  provider = provider-name.alias
}

명세 (Specification)

import 블록은 다음 구성을 지원해요.

import

import 블록은 기존 인프라 리소스를 Terraform으로 가져와요. Terraform 구성 파일 어디에나 import 블록을 추가할 수 있지만, 모든 import 구성에 대해 imports.tf 파일을 만들거나 각 import 블록을 대상 resource 블록 옆에 배치하는 것을 권장해요. 자세한 내용은 기존 리소스 가져오기 (Import existing resources)를 참고하세요.

import {
  to = TYPE.LABEL
  id = "<RESOURCE-ID>"
}

resource "<TYPE>" "<LABEL>" {
  # 
}
요약

to

to 인자는 리소스를 가져올 인스턴스 주소를 지정해요.

import {
  to = <address>
}

to 인자는 기존 resource 블록의 주소와 일치해야 해요. 자세한 내용은 리소스 가져오기 (Import resources)를 참고하세요.

요약

id

id 인자는 가져오려는 리소스의 클라우드 프로바이더 ID를 지정해요.

import {
  id = "<ID>"
}

문자열 또는 문자열로 평가되는 표현식을 지정해야 해요. ID는 plan 작업 중에 알려져야 해요.

id 인자의 값은 가져오는 리소스의 타입에 따라 달라져요. 프로바이더가 지원하는 리소스만 가져올 수 있어요. 리소스를 가져오는 방법에 대한 정보는 프로바이더 문서를 참고하세요.

같은 import 블록에서 id 인자와 identity 인자를 사용할 수 없어요.

요약

identity

identity 인자는 리소스를 고유하게 식별하는 리소스 ID 객체를 지정해요.

import {
  identity = {
    <KEY> = <VALUE>
  }
}

identity 인자는 리소스를 고유하게 식별하는 키-값 쌍의 객체예요. 키와 값은 리소스 타입과 프로바이더에 특정해요.

identity 객체의 키-값 쌍은 가져오는 리소스의 타입에 따라 달라져요. 프로바이더가 지원하는 리소스만 가져올 수 있어요. identity를 검색하는 방법에 대한 정보는 프로바이더 문서를 참고하세요.

같은 import 블록에서 identity 인자와 id 인자를 사용할 수 없어요.

요약

for_each

for_each 메타-인자는 별도의 구성 블록을 요구하지 않고 유사한 리소스를 가져오도록 Terraform에 지시해요.

값 리스트키-값 쌍의 맵

import {
  for_each = [ "<VALUE>" ] 
  # . . .
}
import {
  for_each = {
    "<KEY>" = "<VALUE>"
  }
}

for_each메타-인자예요. 메타-인자는 Terraform 언어에 내장되어 있으며 Terraform이 리소스를 생성하는 방법을 제어해요. 자세한 내용은 for_each 참조를 참고하세요.

provider

provider 메타-인자는 Terraform이 지정된 프로바이더 구성에 따라 리소스를 가져오도록 지시해요.

import {
  # . . .
  provider = "<provider>.<alias>"
}

provider메타-인자예요. 메타-인자는 Terraform 언어에 내장되어 있으며 Terraform이 리소스를 생성하는 방법을 제어해요. 자세한 내용은 provider 참조를 참고하세요.

예제 (Examples)

다음 예제는 일반적인 사용 사례에 대한 구성을 작성하는 방법을 보여줘요.

단일 리소스 가져오기

다음 예제에서 Terraform은 example-bucketaws_s3_bucket.this의 리소스로 가져와요:

import {
    to = aws_s3_bucket.this
    id = "example-bucket"
}

resource "aws_s3_bucket" "this" {
}
  # …
}

AWS 인스턴스 가져오기에 대한 자세한 내용은 Terraform registry의 AWS 프로바이더 문서를 참고하세요.

여러 리소스 가져오기

다음 예제에서 for_each 인자는 buckets 맵에 정의된 키-값 쌍을 반복해요. 각 쌍에 대해 Terraform은 S3 버킷을 aws_s3_bucket.this 리소스로 가져와요. [each.key] 인덱스는 locals 블록의 키에 매핑되며, 예: aws_s3_bucket.this["staging"]처럼요.

locals {
  buckets = {
    "staging" = "bucket1"
    "uat"     = "bucket2"
    "prod"    = "bucket3"
  }
}

import {
  for_each = local.buckets
  to = aws_s3_bucket.this[each.key]
  id = each.value
}

resource "aws_s3_bucket" "this" {
  for_each = local.buckets
}

다음 예제에서 for_each 인자는 buckets 목록에 정의된 키-값 쌍 목록을 반복해요. 각 키-값 쌍 집합에 대해 Terraform은 식별자 each.value.id를 가진 기존 S3 버킷을 module.group[each.value.group].aws_s3_bucket.this[each.value.key]의 Terraform 리소스로 가져와요.

locals {
  buckets = [
    { 
      group = "one"
      key   = "bucket1"
      id    = "one_1"
    },
    {
      group = "one"
      key   = "bucket2"
      id    = "one_2"
    },
    {
      group = "two"
      key   = "bucket1"
      id    = "two_1"
    },
    {
      group = "two"
      key   = "bucket2"
      id    = "two_2"
    },
  ]
}

import {
  for_each = local.buckets
  id = each.value.id
  to = module.group[each.value.group].aws_s3_bucket.this[each.value.key]
}

대체 프로바이더 구성 선택

다음 예제에서 Terraform은 east 별칭에 따라 ID가 i-096fba6d03d36d262인 AWS 인스턴스를 aws_instance.web 리소스로 가져와요.

provider "aws" {
  region = "us-west-1"
}

provider "aws" {
  alias  = "east"
  region = "us-east-1"
}

import {
  id = "i-096fba6d03d36d262"
  to = aws_instance.web
  provider = aws.east
}

resource "aws_instance" "web" {
  # ...
}

더 알아보기 (Learn more)