`module` 블록 참조
module 블록 참조 (module block reference)
module 블록은 로컬 또는 원격 모듈에 정의된 리소스를 만들도록 Terraform에 지시해요. 모듈은 Terraform이 함께 관리하는 여러 리소스의 모음이에요. 이 페이지에서는 module 블록의 구성 모델, source의 다양한 형식, 메타-인자, 그리고 실제 사용 예시를 다룰게요.
출처: 문서
본문
module 블록은 로컬 또는 원격 모듈에 정의된 리소스를 만들도록 Terraform에 지시해요.
소개 (Introduction)
모듈은 Terraform이 함께 관리하는 여러 리소스의 모음이에요. 자세한 내용은 다음 주제를 참고해요:
구성 모델 (Configuration model)
module 블록은 다음 구성을 지원해요:
module "<LABEL>"블록- 모듈 특정 입력 (일부 입력은 필수일 수 있음)
source식 | 필수version식count숫자 |for_each와 상호 배타적depends_on참조 리스트for_each문자열의 맵 또는 집합 |count와 상호 배타적providers맵ignore_nested_deprecations불리언
완전한 구성 (Complete configuration)
다음 module 블록은 모든 내장 인자를 포함해요:
module "<LABEL>" {
<module-specific-inputs>
source = "<location-of-module-sources>"
version = "<constraint>" # only available for modules listed in a registry
count = <number> # mutually exclusive with `for_each`
for_each = { # mutually exclusive with `count`
<KEY> = <VALUE>
}
for_each = [ # `for_each` accepts a map or a set of strings
"<VALUE>",
"<VALUE>"
]
providers = {
"<provider-name-in-child-module>" = "<provider-name-from-parent-module>"
}
depends_on = [ <resource.address.reference> ]
ignore_nested_deprecations = <true|false>
}
사양 (Specification)
module 블록은 다음 구성을 지원해요.
module "<LABEL>"
LABEL은 모듈의 로컬 이름이에요. 호출하는 자식 모듈이 출력 값을 노출하면 module.<LABEL>.<OUTPUT> 구문을 사용해 그들을 참조할 수 있어요. 자세한 내용은 다음 주제를 참고해요:
모듈 특정 입력 (Module-specific inputs)
모듈 개발자가 모듈에 대해 지정할 수 있는 입력을 결정해요. 어떤 모듈에서는 하나 이상의 입력이 필수예요. 자세한 내용은 모듈 문서를 참고해요.
source
source 인자는 Terraform이 모듈 소스 코드를 어디서 가져올지 지정해요.
module "<LABEL>" {
source = "<location-of-module-files>"
#...
}
위치는 로컬 파일이나 디렉터리, 또는 공개 Terraform 레지스트리 같은 원격 모듈 소스일 수 있어요. source 값에는 리터럴 문자열을 지정해야 해요. 이 인자는 템플릿 시퀀스나 임의의 식을 지원하지 않아요.
source 인자를 수정한 후에는 Terraform이 로컬 코드를 업데이트할 수 있도록 terraform init을 실행해야 해요.
같은 소스 주소를 둘 이상의 별도 module 블록에 지정할 수 있지만, 각 블록에는 고유한 레이블을 사용해야 해요. 이렇게 하면 자식 모듈에 정의된 리소스의 복수를 서로 다른 구성으로 만들 수 있어요.
패키지라고 하는 버전 제어 저장소나 아카이브 파일에 저장된 모듈 소스 코드는 패키지 루트에 대한 하위 디렉터리에 있을 수 있어요. 소스 경로에 //를 추가해 그 지점 이후의 경로가 패키지 안의 하위 디렉터리임을 나타내요. 버전 제어 소스에 대해 지원되는 ref 인자 같은 쿼리 매개변수는 하위 디렉터리 세그먼트 뒤에 배치해요. 예시는 하위 디렉터리의 소스 지정을 참고해요.
Terraform은 전체 패키지를 로컬 디스크에 추출하지만 하위 디렉터리에서 모듈을 읽어요. 결과적으로 패키지의 하위 디렉터리에 있는 모듈은 로컬 경로를 사용해 같은 패키지의 다른 모듈을 참조할 수 있어요.
source 속성은 상수 입력 변수와 로컬 값을 참조할 수 있어요. source에서 참조되는 입력 변수는 const = true를 선언해야 해요.
Terraform이 다음 유형의 소스에서 모듈을 설치하도록 구성할 수 있어요.
로컬 경로 (Local paths)
이미 디스크에 있는 파일에서 모듈을 설치하려면 ./ 또는 ../ 접두사를 경로 앞에 붙여 로컬 모듈 소스 코드의 경로로 사용해요:
module "<LABEL>" {
source = "./<PATH-TO-MODULE>"
#...
}
Terraform은 /로 시작하거나 드라이브 문자로 시작하는 경로를 절대 경로로 인식해요. Terraform은 절대 경로로 지정된 모듈을 패키지로써 로컬 모듈 캐시에 복사해요. 절대 파일시스템 경로를 사용해 Terraform 모듈을 참조하는 것은 특정 컴퓨터의 파일시스템 레이아웃에 구성을 결합시킬 수 있으므로 권장하지 않아요.
예시는 로컬 디스크에서 모듈 설치를 참고해요.
Terraform 레지스트리 (Terraform registry)
여러 구성에 걸쳐 모듈을 공유하는 기본 워크플로는 공개 Terraform 레지스트리 또는 HCP Terraform이나 Terraform Enterprise의 개인 레지스트리를 통해 배포하는 것이에요. 모듈 레지스트리 프로토콜을 구현하는 사용자 지정 서비스를 운영해 개인 레지스트리를 만들 수도 있어요.
레지스트리에서 모듈을 검색하기 위한 Terraform 특유의 프로토콜은 모듈 버전 관리를 완전히 지원해요. 자세한 내용은 모듈 문서를 참고해요.
공개 Terraform 레지스트리에 나열된 모듈을 설치하려면 다음 구문을 사용해요:
module "<LABEL>" {
source = "<NAMESPACE>/<NAME>/<PROVIDER>"
#...
}
HCP Terraform 개인 레지스트리에 나열된 모듈은 경로 앞에 app.terraform.io를 붙여요:
module "<LABEL>" {
source = "app.terraform.io/<NAMESPACE>/<NAME>/<PROVIDER>"
#...
}
Terraform Enterprise 개인 레지스트리에 나열된 모듈은 경로 앞에 배포의 호스트 이름을 붙여요:
module "<LABEL>" {
source = "<HOSTNAME>/<NAMESPACE>/<NAME>/<PROVIDER>"
#...
}
HCP Terraform과 Terraform Enterprise를 사용할 때 localterraform.com 호스트 이름도 지정할 수 있어요. localterraform.com 호스트 이름은 플랫폼이 실행 중인 인스턴스에서 모듈을 요청해요. 자세한 내용은 일반 호스트 이름을 참고해요:
module "<LABEL>" {
source = "localterraform.com/<NAMESPACE>/<NAME>/<PROVIDER>"
#...
}
예시는 레지스트리에서 모듈 설치를 참고해요.
GitHub 저장소 (GitHub repository)
HTTPS를 통해 GitHub에서 모듈 소스를 복제하려면 다음 구문을 사용해요:
module "<LABEL>" {
source = "github.com/<ORGANIZATION>/<MODULE-FOLDER>"
#...
}
SSH를 통해 GitHub에서 모듈 소스를 복제하려면 다음 구문을 사용해요:
module "<LABEL>" {
source = "[email protected]:<ORGANIZATION>/<MODULE-FOLDER>"
#...
}
Terraform은 git clone을 실행해 모듈을 설치해요. Terraform은 명령을 실행할 때 자격 증명을 포함한 로컬 시스템에 설정된 Git 구성을 사용해요. 공개되지 않은 저장소에 접근하려면 적절한 자격 증명으로 Git을 구성해요.
SSH 연결의 경우 Terraform은 자동으로 SSH 키를 사용해요. 이는 대화형 프롬프트 없이 비공개 저장소에 접근할 수 있게 해 주므로 자동화 시스템에서 비공개 Git 저장소에 접근하는 가장 일반적인 방법이에요.
인증에 사용자 이름과 비밀번호가 필요한 HTTP, HTTPS 및 기타 프로토콜의 경우 자격 증명 제공에 대한 지침은 Git 문서를 참고해요.
HCP Terraform의 Terraform 작업에서는 SSH 키로만 인증할 수 있어요. 지침은 SSH 키를 사용한 모듈 복제를 참고해요.
다음 쿼리 매개변수도 지정할 수 있어요:
ref: 복제할 브랜치 이름, 전체 또는 짧은 SHA-1 해시, 또는 태그 이름을 지정해요. 자세한 내용은 Git 도구 문서를 참고해요. Terraform은 저장소의HEAD가 참조하는 기본 브랜치를 기본값으로 사용해요.depth: Terraform이 얕은 복제(shallow clone)를 수행하도록 지시하고 포함할 커밋 기록의 깊이를 지정해요. 기본값은1이에요.depth매개변수는 Git--depth옵션을 구현해요.source인자에depth매개변수가 포함되면 Terraform은git clone명령을 실행할 때ref인자를--branch옵션에 전달해요. 따라서 원격 저장소에 알려진 명명된 브랜치나 태그를 지정해야 해요. 원시 커밋 ID는 사용할 수 없어요. 자세한 내용은 Git--branch문서를 참고해요.
예시는 GitHub에서 모듈 설치를 참고해요.
Git 저장소 (Git repository)
git:: 접두사를 사용하고 그 뒤에 프로토콜을 포함한 유효한 Git URL을 붙여 일반 Git 저장소에서 모듈을 설치해요.
SSH를 통해 모듈을 가져오려면 다음 구문을 사용해요:
module "<LABEL>" {
source = "git::ssh://[<user>@]<host>[:<port>]/<path-to-git-repo>"
#...
}
SSH 연결의 대체 형식으로 ssh://를 생략한 scp 유사 URL을 사용할 수 있어요:
module "<LABEL>" {
source = "git::[<USER>@]<HOST>/<PATH-TO-GIT-REPO>"
#...
}
HTTP, HTTPS, FTP, FTPS 및 Git 프로토콜을 통해 모듈을 가져오려면 다음 구문을 사용해요:
module "<LABEL>" {
source = "git::<protocol>://<host>[:<port>]/<path-to-git-repo>"
#...
}
자세한 내용은 Git URL 문서를 참고해요. 일관성을 위해 ssh:// 접두사가 붙은 URL을 사용할 것을 권장해요.
Terraform은 git clone을 실행해 모듈을 설치해요. Terraform은 명령을 실행할 때 자격 증명을 포함한 로컬 시스템에 설정된 Git 구성을 사용해요. 공개되지 않은 저장소에 접근하려면 적절한 자격 증명으로 Git을 구성해요.
SSH 연결의 경우 Terraform은 자동으로 SSH 키를 사용해요. 이는 대화형 프롬프트 없이 비공개 저장소에 접근할 수 있게 해 주므로 자동화 시스템에서 비공개 Git 저장소에 접근하는 가장 일반적인 방법이에요.
인증에 사용자 이름과 비밀번호가 필요한 HTTP, HTTPS 및 기타 프로토콜의 경우 자격 증명 제공에 대한 지침은 Git 문서를 참고해요.
HCP Terraform의 Terraform 작업에서는 SSH 키로만 인증할 수 있어요. 지침은 SSH 키를 사용한 모듈 복제를 참고해요.
다음 쿼리 매개변수도 지정할 수 있어요:
ref: 복제할 브랜치 이름, 전체 또는 짧은 SHA-1 해시, 또는 태그 이름을 지정해요. 자세한 내용은 Git 도구 문서를 참고해요. Terraform은 저장소의HEAD가 참조하는 기본 브랜치를 기본값으로 사용해요.depth: Terraform이 얕은 복제를 수행하도록 지시하고 포함할 커밋 기록의 깊이를 지정해요. 기본값은1이에요.depth매개변수는 Git--depth옵션을 구현해요.source인자에depth매개변수가 포함되면 Terraform은git clone명령을 실행할 때ref인자를--branch옵션에 전달해요. 따라서 원격 저장소에 알려진 명명된 브랜치나 태그를 지정해야 해요. 원시 커밋 ID는 사용할 수 없어요. 자세한 내용은 Git--branch문서를 참고해요.
예시는 Git 저장소에서 모듈 설치를 참고해요.
Bitbucket
bitbucket.org 접두사를 사용해 BitBucket에 호스팅된 모듈을 참조해요:
source = "bitbucket.org/<PATH-TO-MODULE-SOURCES>"
BitBucket은 Git 저장소를 호스팅하는 서비스이므로 Git 기반 저장소에 적용되는 많은 동작이 BitBucket에도 적용돼요.
Terraform은 git clone을 실행해 모듈을 설치해요. Terraform은 명령을 실행할 때 자격 증명을 포함한 로컬 시스템에 설정된 Git 구성을 사용해요. 공개되지 않은 저장소에 접근하려면 적절한 자격 증명으로 Git을 구성해요.
SSH 연결의 경우 Terraform은 자동으로 SSH 키를 사용해요. 이는 대화형 프롬프트 없이 비공개 저장소에 접근할 수 있게 해 주므로 자동화 시스템에서 비공개 Git 저장소에 접근하는 가장 일반적인 방법이에요.
인증에 사용자 이름과 비밀번호가 필요한 HTTP, HTTPS 및 기타 프로토콜의 경우 자격 증명 제공에 대한 지침은 Git 문서를 참고해요.
HCP Terraform의 Terraform 작업에서는 SSH 키로만 인증할 수 있어요. 지침은 SSH 키를 사용한 모듈 복제를 참고해요.
다음 쿼리 매개변수도 지정할 수 있어요:
ref: 복제할 브랜치 이름, 전체 또는 짧은 SHA-1 해시, 또는 태그 이름을 지정해요. 자세한 내용은 Git 도구 문서를 참고해요. Terraform은 저장소의HEAD가 참조하는 기본 브랜치를 기본값으로 사용해요.depth: Terraform이 얕은 복제를 수행하도록 지시하고 포함할 커밋 기록의 깊이를 지정해요. 기본값은1이에요.depth매개변수는 Git--depth옵션을 구현해요.source인자에depth매개변수가 포함되면 Terraform은git clone명령을 실행할 때ref인자를--branch옵션에 전달해요. 따라서 원격 저장소에 알려진 명명된 브랜치나 태그를 지정해야 해요. 원시 커밋 ID는 사용할 수 없어요. 자세한 내용은 Git--branch문서를 참고해요.
예시 구성은 BitBucket에 호스팅된 저장소에서 모듈 설치를 참고해요.
Mercurial 저장소 (Mercurial repository)
hg:: 접두사를 사용하고 그 뒤에 유효한 Mercurial URL을 붙여 Mercurial 저장소에 저장된 모듈을 설치해요.
로컬 파일 시스템에서 모듈을 가져오려면 다음 구문을 사용해요:
module "<LABEL>"{
source = "hg::file://local/filesystem/path[#revision]"
#...
}
HTTP와 HTTPS로 모듈을 가져오려면 다음 구문을 사용해요:
module "<LABEL>" {
source = "hg::<PROTOCOL>://[user[:pass]@]host[:port]/[path][#revision]
#...
}
SSH로 모듈을 가져오려면 다음 구문을 사용해요:
module "<LABEL>" {
source = "hg::ssh://[user@]host[:port]/[path][#revision]"
#...
}
Mercurial 구성 파일에 지정된 경로에서 모듈을 가져오려면 다음 구문을 사용해요:
module "<LABEL>" {
source = "hg::path://pathname"
#...
}
Terraform은 hg clone을 실행해 모듈을 설치해요. Terraform은 명령을 실행할 때 자격 증명을 포함한 로컬 시스템에 설정된 Mercurial 구성을 사용해요. 개인 저장소에 접근하려면 적절한 자격 증명으로 Mercurial을 구성해요.
SSH 연결의 경우 Terraform은 자동으로 SSH 키를 사용해요. 이는 대화형 프롬프트 없이 개인 저장소에 접근할 수 있게 해 주므로 자동화 시스템에서 비공개 Mercurial 저장소에 접근하는 가장 일반적인 방법이에요.
Terraform 구성이 HCP Terraform에서 실행되면 SSH 키로만 인증할 수 있어요. 지침은 SSH 키를 사용한 모듈 복제를 참고해요.
예시 구성은 Mercurial 저장소에서 모듈 설치를 참고해요.
HTTP URL (HTTP URLs)
source 인자에 HTTP 또는 HTTPS URL을 지정해 복잡한 모듈 소스 경로를 Terraform 구성에 하드코딩하는 대신 vanity URL을 사용할 수 있어요. URL을 지정하면 Terraform이 URL에 GET 요청을 보내도록 지시해요. 요청을 수신하는 서비스는 모듈 소스 주소를 구성해 응답할 수 있어요.
Terraform은 GET 요청을 보내기 전에 URL에 terraform-get=1 쿼리 문자열 매개변수를 추가해 서버가 Terraform이 요청할 때 선택적으로 다른 결과를 반환할 수 있게 해요.
Terraform이 성공적인 200 코드의 응답을 받으면 다음 위치에서 모듈 소스 주소를 확인해요:
X-Terraform-Get라는 응답 헤더 필드의 값.- 응답이 HTML 페이지인 경우
terraform-get이름을 가진meta요소:
<meta name="terraform-get" content="<module-source>" />
Terraform은 결과를 소스 주소로 해석해 모듈을 설치할 수 있게 해요.
기본적으로 Terraform은 수신 서비스가 인증을 위해 자격 증명을 요청할 때 HOME 디렉터리에서 .netrc 파일을 검색해요. NETRC 환경 변수를 설정해 기본 파일시스템 위치를 재정의할 수 있어요. .netrc 형식에 대한 정보는 curl에서 사용하는 문서를 참고해요.
HTTPS URL이 아카이브 파일 형식과 관련된 일반적인 파일 확장자를 가지면 Terraform은 terraform-get=1 리다이렉션을 우회하고 참조된 아카이브의 내용을 모듈 소스 코드로 사용해요. Terraform은 다음 아카이브 확장자를 인식해요:
다른 아카이브 확장자 형식을 가진 URL에는 archive 쿼리 매개변수를 추가할 수 있어요.
아카이브 파일의 내용이 디렉터리이면 모듈 소스에 그 디렉터리를 포함해야 해요. 자세한 내용은 source 인자 설명을 참고해요.
예시는 모듈 소스에 HTTPS URL 쿼리를 참고해요.
S3 버킷 (S3 bucket)
s3:: 접두사를 사용하고 그 뒤에 S3 버킷 객체 URL을 붙여 S3에 아카이브로 저장된 소스에서 모듈을 설치해요.
S3 버킷에 저장된 객체는 다음 확장자 중 하나를 가진 아카이브여야 해요:
Terraform은 아카이브를 추출해 모듈 소스 트리를 얻어요.
AWS의 us-east-1 리전의 버킷은 s3-us-east-1.amazonaws.com 대신 s3.amazonaws.com 호스트 이름을 사용해야 해요.
모듈 설치 프로그램은 우선 순위 순서로 다음 위치에서 AWS 자격 증명을 확인해요:
AWS_ACCESS_KEY_ID와AWS_SECRET_ACCESS_KEY환경 변수.- 홈 디렉터리의
.aws/credentials파일의 기본 프로필. - EC2 인스턴스에서 실행 중이라면 인스턴스의 IAM 인스턴스 프로필과 연결된 임시 자격 증명.
다른 AWS 서비스도 S3 API와 유사한 방식으로 인증을 처리할 수 있어요. 따라서 다른 서비스에도 s3:: 형식을 사용할 수 있을 거예요.
예시는 S3 버킷 객체에서 모듈 설치를 참고해요.
GCS 버킷 (GCS bucket)
gcs:: 접두사를 사용하고 그 뒤에 GCS 버킷 객체 URL을 붙여 Google Cloud Storage에 아카이브 파일로 저장된 모듈을 설치해요:
module "<LABEL>" {
source = "gcs::https://www.googleapis.com/storage/v1/BUCKET_NAME/PATH_TO_MODULE"
#...
}
GCS 버킷에 저장된 아카이브에서 모듈을 가져오려면 다음 구문을 사용해요:
module "<LABEL>" {
source = "gcs::https://www.googleapis.com/storage/v1/BUCKET_NAME/PATH/TO/module.zip"
#...
}
모듈 설치 프로그램은 Google Cloud SDK를 사용해 GCS로 인증해요. Google Cloud Platform 자격 증명을 설정하려면 다음 방법 중 하나를 사용할 수 있어요:
GOOGLE_OAUTH_ACCESS_TOKEN환경 변수를 원시 Google Cloud Platform OAuth 액세스 토큰으로 설정해요.- 서비스 계정 키 파일의 경로를
GOOGLE_APPLICATION_CREDENTIALS환경 변수에 입력해요. - Terraform이 GCE 인스턴스에서 실행 중이면 기본 자격 증명이 자동으로 사용 가능해요. 자세한 내용은 GCE 문서를 참고해요.
- 컴퓨터에서
gcloud auth application-default login명령을 실행해 Google 신원을 사용할 수 있게 할 수 있어요.
예시는 GCS 버킷에서 모듈 설치를 참고해요.
요약 (Summary)
- 데이터 타입: 식
- 기본값: 없음
- 예시: 모듈 소스 파일의 위치 지정
version
version 인자는 사용할 모듈의 버전을 지정해요. 이 인자는 레지스트리에서 모듈을 설치할 때만 적용돼요:
module "LABEL" {
version = "<version-constraint>"
}
version 인자는 버전 제약 문자열을 받아요. Terraform은 제약을 충족하는 설치된 모듈 버전 중 가장 새로운 것을 사용해요. 허용 가능한 버전이 설치되어 있지 않으면 Terraform은 제약을 충족하는 가장 새로운 버전을 다운로드해요. 예기치 않거나 원치 않는 변경을 피하려면 허용 가능한 버전 번호를 명시적으로 제약할 것을 권장해요.
source 인자가 공개 Terraform 레지스트리나 HCP Terraform의 개인 모듈 레지스트리 같은 레지스트리에 나열된 모듈을 가리킬 때만 version 인자를 사용할 수 있어요.
version 인자를 수정한 후에는 Terraform이 로컬 코드를 업데이트할 수 있도록 terraform init을 실행해야 해요.
version 속성은 상수 입력 변수와 로컬 값을 참조할 수 있어요. version에서 참조되는 입력 변수는 const = true를 선언해야 해요.
모듈에 특정한 버전 관리 메커니즘은 모듈 문서를 참고해요. 로컬 파일 경로에서 가져온 모듈은 같은 소스 저장소에서 로드되고 항상 호출자와 같은 버전을 공유하므로 version을 지원하지 않아요.
요약 (Summary)
- 데이터 타입: 식
- 기본값: 소스에서 사용 가능한 최신 버전
- 예시: 레지스트리에서 모듈 버전 지정
count
count 메타-인자는 동일하거나 비슷한 구성의 같은 모듈의 여러 인스턴스를 프로비저닝하도록 Terraform에 지시해요.
module "<LABEL>" {
count = <number>
}
count는 메타-인자예요. 메타-인자는 Terraform 언어에 내장되어 리소스를 어떻게 생성할지 제어해요. 이 인자가 어떻게 동작하는지에 대한 자세한 내용은 count 참조를 참고해요.
for_each
for_each 메타-인자는 각 리소스에 대해 별도의 구성 블록을 요구하지 않고 유사한 모듈을 프로비저닝하도록 Terraform에 지시해요.
module "<LABEL>" {
for_each = [ "<VALUE>" ]
}
module "<LABEL>" {
for_each = {
"<KEY>" = "<VALUE>"
}
}
for_each는 메타-인자예요. 메타-인자는 Terraform 언어에 내장되어 리소스를 어떻게 생성할지 제어해요. 이 인자가 어떻게 동작하는지에 대한 자세한 내용은 for_each 참조를 참고해요.
providers
providers 인자는 대체 프로바이더 구성을 사용하도록 Terraform에 지시해요.
module "<LABEL>" {
providers = {
<provider> = <provider>.<alias>
}
}
providers는 메타-인자예요. 메타-인자는 Terraform 언어에 내장되어 리소스를 어떻게 생성할지 제어해요. 이 인자가 어떻게 동작하는지에 대한 자세한 내용은 providers 참조를 참고해요.
depends_on
depends_on 메타-인자는 모듈이 의존하는 업스트림 리소스를 지정해요. Terraform은 depends_on 인자를 포함하는 모듈에 대한 작업을 수행하기 전에 업스트림 리소스에 대한 모든 작업을 완료해야 해요.
module "<LABEL>" {
depends_on = [ <resource reference> ]
}
depends_on은 메타-인자예요. 메타-인자는 Terraform 언어에 내장되어 리소스를 어떻게 생성할지 제어해요. 이 인자가 어떻게 동작하는지에 대한 자세한 내용은 depends_on 참조를 참고해요.
ignore_nested_deprecations
참고: 폐기된 값은 Terraform v1.15 이상에서 사용할 수 있어요.
ignore_nested_deprecations 인자가 true로 설정되면 Terraform은 모듈 호출 또는 중첩 모듈에서 폐기 경고를 표시하지 않아요.
module "<LABEL>" {
ignore_nested_deprecations = true
}
요약 (Summary)
- 데이터 타입: 불리언
- 기본값: false
예시 (Examples)
다음 예시는 일반적인 사용 사례에 대한 구성을 작성하는 방법을 보여줘요.
하위 디렉터리의 소스 지정 (Specify sources in subdirectories)
다음 예시에서 Terraform은 레지스트리의 modules/consul-cluster 디렉터리에서 모듈을 가져와요:
module "consul" {
source = "hashicorp/consul/aws//modules/consul-cluster"
#...
}
다음 예시에서 Terraform은 Git 저장소의 modules/vpc 디렉터리에서 모듈을 가져와요:
module "vpc" {
source = "git::https://example.com/network.git//modules/vpc"
#...
}
다음 예시에서 Terraform은 Git 저장소의 modules/vpc 디렉터리에서 v1.2.0으로 태그된 모듈 버전을 가져와요:
module "vpc" {
source = "git::https://example.com/network.git//modules/vpc?ref=v1.2.0"
#...
}
다음 예시에서 Terraform은 아카이브 파일의 modules/vpc 디렉터리에서 모듈을 가져와요:
module "vpc" {
source = "https://example.com/network-module.zip//modules/vpc"
#...
}
다음 예시에서 Terraform은 S3 버킷에 저장된 아카이브 파일의 modules/vpc 디렉터리에서 모듈을 가져와요:
module "vpc" {
source = "s3::https://s3-eu-west-1.amazonaws.com/examplecorp-terraform-modules/network.zip//modules/vpc"
#...
}
다음 예시에서 Terraform은 GitHub의 modules/vpc 디렉터리에서 v1.2.0으로 태그된 모듈 버전을 가져와요:
module "vpc" {
source = "github.com/hashicorp/example//modules/vpc?ref=v1.2.0"
#...
}
모듈 소스 파일의 위치 지정 (Specify the location of module source files)
여러 유형의 위치에서 모듈을 소스로 사용할 수 있어요.
로컬 디스크에서 모듈 설치 (Install modules from local disk)
다음 예시는 현재 작업 디렉터리의 /consul 디렉터리에 저장된 모듈을 복제해요:
module "consul" {
source = "./consul"
}
레지스트리에서 모듈 설치 (Install modules from a registry)
다음 예시는 공개 Terraform 레지스트리에 나열된 모듈을 복제해요:
module "consul" {
source = "hashicorp/consul/aws"
version = "0.1.0"
}
다음 예시는 HCP Terraform의 개인 레지스트리에 나열된 모듈을 복제해요:
module "consul" {
source = "app.terraform.io/example-corp/k8s-cluster/azurerm"
version = "1.1.0"
}
GitHub에서 모듈 설치 (Install modules from GitHub)
다음 예시는 HTTPS를 통해 GitHub에서 example 모듈을 복제해요:
module "consul" {
source = "github.com/hashicorp/example"
}
다음 예시는 SSH를 통해 GitHub에서 example 모듈을 복제해요:
module "consul" {
source = "[email protected]:hashicorp/example.git"
}
Git 저장소에서 모듈 설치 (Install modules from a Git repository)
다음 예시는 HTTP를 통해 일반 Git 저장소에서 example 모듈을 복제해요:
module "vpc" {
source = "git::https://example.com/vpc.git"
}
다음 예시는 SSH를 통해 일반 Git 저장소에서 example 모듈을 복제해요:
module "storage" {
source = "git::ssh://***@example.com/storage.git"
}
다음 예시는 대체 scp 유사 구문을 사용해 SSH로 일반 Git 저장소에서 storage 모듈을 복제해요:
module "storage" {
source = "git::[email protected]:storage.git"
}
BitBucket에 호스팅된 저장소에서 모듈 설치 (Install modules from a repository listed hosted on BitBucket)
다음 예시는 BitBucket에 호스팅된 Git 저장소에서 consul이라는 모듈을 복제해요:
module "consul" {
source = "bitbucket.org/hashicorp/terraform-consul-aws"
}
다음 예시에서 Terraform은 HTTP를 통해 저장소에 연결해요:
module "vpc" {
source = "hg::http://example.com/vpc.hg"
}
Mercurial 저장소에서 모듈 설치 (Install modules from a Mercurial repository)
다음은 Mercurial 저장소에서 모듈을 복제해요:
module "vpc" {
source = "hg::http://example.com/vpc.hg"
}
모듈 소스에 HTTPS URL 쿼리 (Query an HTTPS URL for the module source)
다음 예시에서 Terraform은 vpc-module.zip 파일에서 모듈 소스 주소를 추출해요:
module "vpc" {
source = "https://example.com/vpc-module.zip"
}
다음 예시는 archive=zip 쿼리 매개변수를 사용해 기본 지원 확장자가 아닌 아카이브 파일 확장자를 가진 URL에서 모듈 소스 주소를 추출해요:
module "vpc" {
source = "https://example.com/vpc-module?archive=zip"
}
S3 버킷 객체에서 모듈 설치 (Install a module from an S3 bucket object)
다음 예시는 S3 버킷의 vpc.zip 객체에서 모듈을 설치해요:
module "consul" {
source = "s3::https://s3-eu-west-1.amazonaws.com/examplecorp-terraform-modules/vpc.zip"
}
GCS 버킷에서 모듈 설치 (Install a module from a GCS bucket)
다음 예시는 GCS 버킷의 foomodule.zip 객체에서 모듈을 설치해요:
module "consul" {
source = "gcs::https://www.googleapis.com/storage/v1/modules/foomodule.zip"
}
특정 개정판 설치 (Install a specific revision)
다음 예시는 Git 저장소에서 v1.2.0으로 태그된 모듈 버전을 복제하도록 Terraform에 지시해요:
module "vpc" {
source = "git::https://example.com/vpc.git?ref=v1.2.0"
}
다음 예시는 Git 저장소에서 SHA-1 해시로 식별되는 모듈 버전을 복제하도록 Terraform에 지시해요:
module "storage" {
source = "git::https://example.com/storage.git?ref=51d462976d84fdea54b47d80dcabbf680badcdb8"
}
다음 예시는 Mercurial 저장소에서 v1.2.0으로 태그된 모듈 버전을 복제하도록 Terraform에 지시해요:
module "vpc" {
source = "hg::http://example.com/vpc.hg?ref=v1.2.0"
}
레지스트리에서 모듈 버전 지정 (Specify a module version in a registry)
다음 예시에서 Terraform은 AWS용 Consul 모듈 버전 0.10.0 이상을 설치해요:
module "consul" {
source = "hashicorp/consul/aws"
version = ">= 0.10.0"
servers = 3
}
복제 깊이 지정 (Specify depth of clone)
다음 예시는 v1.2.0의 가장 최근 커밋을 사용해 Git 저장소에서 모듈을 복제해요:
module "vpc" {
source = "git::https://example.com/vpc.git?depth=1&ref=v1.2.0"
}
모듈 리소스의 여러 인스턴스 만들기 (Create multiple instances of module resources)
count 또는 for_each 블록을 사용해 모듈 리소스의 여러 인스턴스를 만들 수 있어요. count 인자는 동일하거나 거의 동일한 여러 인스턴스를 만들 때 가장 적합해요. for_each 인자는 맵이나 집합에서 구성이 다양한 여러 인스턴스를 만들 때 가장 적합해요.
다음 예시에서 Terraform은 instance_names 리스트의 고유한 이름을 가진 세 개의 EC2 인스턴스를 만들어요:
locals {
instance_names = ["example-instance-1", "example-instance-2", "example-instance-3"]
}
module "ec2_instance" {
source = "terraform-aws-modules/ec2-instance/aws"
version = "6.0.2"
count = length(local.instance_names)
name = local.instance_names[count.index]
ami = data.aws_ami.latest_amazon_linux.id
instance_type = "t2.micro"
depends_on = [aws_s3_bucket.example]
}
다음 예시에서 Terraform은 local.instance_configs의 각 키에 대해 EC2 인스턴스를 하나씩 만들어 인스턴스별로 속성을 사용자 지정할 수 있게 해요:
locals {
instance_configs = {
"example-instance-1" = { instance_type = "t2.micro" }
"example-instance-2" = { instance_type = "t2.small" }
"example-instance-3" = { instance_type = "t2.medium" }
}
}
module "ec2_instance" {
source = "terraform-aws-modules/ec2-instance/aws"
version = "6.0.2"
for_each = local.instance_configs
name = each.key
ami = data.aws_ami.latest_amazon_linux.id
instance_type = each.value.instance_type
depends_on = [aws_s3_bucket.example]
}
의존성 지정 (Specify dependencies)
다음 예시에서 Terraform은 S3 버킷 리소스를 만든 후에만 EC2 인스턴스 모듈을 만들어요:
resource "aws_s3_bucket" "example" {
bucket = "my-example-bucket-12345"
}
module "ec2_instance" {
source = "terraform-aws-modules/ec2-instance/aws"
version = "6.0.2"
name = "example-instance"
ami = data.aws_ami.latest_amazon_linux.id
instance_type = "t2.micro"
depends_on = [aws_s3_bucket.example]
}
모듈 리소스에 다른 프로바이더 구성 적용 (Apply different provider configurations for module resources)
다음 예시에서 tunnel 모듈은 자체 프로바이더 구성을 지원하는 리소스를 포함해요. 결과적으로 각 리소스 별칭은 루트 모듈에 선언된 다른 프로바이더 구성에 매핑돼요:
provider "aws" {
alias = "usw1"
region = "us-west-1"
}
provider "aws" {
alias = "usw2"
region = "us-west-2"
}
module "tunnel" {
source = "./tunnel"
providers = {
aws.src = aws.usw1
aws.dst = aws.usw2
}
}