✔️ 모듈 (Module)
모듈은 Terraform으로 리소스 구성을 패키징하고 재사용하는 주요 방법이다.
✔️ Root Module
모든 Terraform 구성에는 기본 작업 디렉토리의 .tf 파일에 정의된 리소스로 구성된 루트 모듈로 알려진 하나 이상의 모듈이 있다.
✔️ Child Modules
Terraform 모듈(일반적으로 구성의 루트 모듈)은 다른 모듈을 호출하여 해당 리소스를 구성에 포함할 수 있다.
다른 모듈에 의해 호출된 모듈을 종종 자식 모듈이라고 한다.
자식 모듈은 동일한 구성 내에서 여러 번 호출할 수 있으며 여러 구성에서 동일한 자식 모듈을 사용할 수 있습니다.
✔️ Published Module
로컬 파일 시스템의 모듈 외에도 Terraform은 공개 또는 비공개 레지스트리에서 모듈을 로드할 수 있다.
이렇게 하면 다른 사람이 사용할 수 있도록 모듈을 게시하고 다른 사람이 게시한 모듈을 사용할 수 있다.
Terraform 레지스트리는 다양한 종류의 공통 인프라를 구성하기 위해 공개적으로 사용 가능한 광범위한 Terraform 모듈 모음을 호스팅한다.
이러한 모듈은 무료로 사용할 수 있으며 모듈 호출 블록에서 적절한 소스와 버전을 지정하면 Terraform에서 자동으로 다운로드할 수 있다.
또한 조직의 구성원이 자체 인프라 요구 사항에 맞게 특별히 제작된 모듈을 생성할 수도 있다.
Terraform Cloud 및 Terraform Enterprise에는 모두 조직 내에서 내부적으로 모듈을 공유하기 위한 개인 모듈 레지스트리가 포함되어 있다.
✔️ 모듈 사용법
내가 만든 Terraform 루트 모듈에 공개 모듈을 사용한다면 루트 모듈을 하나의 function이라고 생각하고
공개 모듈을 import해서 입력 변수, 출력 변수를 내 값으로 적절히 제공하고 참조하여 사용할 수 있다.
공개 모듈을 사용하기 위해서 우선 모듈을 초기화해야 한다.
terraform init
[vagrant@controller 01]$ terraform init
Initializing modules...
Downloading registry.terraform.io/terraform-aws-modules/vpc/aws 3.14.0 for app_vpc...
- app_vpc in .terraform/modules/app_vpc
Initializing the backend...
Initializing provider plugins...
- Reusing previous version of hashicorp/aws from the dependency lock file
- Using previously-installed hashicorp/aws v3.75.1
Terraform has been successfully initialized!
You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.
If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.
다음은 VPC 공개 모듈의 사용 예제이다.
사용할 공개 모듈을 모듈 호출 블록에서 적절한 소스와 버전을 지정하여 호출하면 된다.
필수, 선택적 인자들을 정해놓은 변수명을 제외하고 내가 사용하던 변수명으로 적절히 변경하면 된다.
module "app_vpc" {
source = "terraform-aws-modules/vpc/aws"
name = "app_vpc"
cidr = "10.0.0.0/16"
azs = ["ap-northeast-2a", "ap-northeast-2b", "ap-northeast-2c", "ap-northeast-2d"]
public_subnets = ["10.0.0.0/24", "10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"]
private_subnets = ["10.0.10.0/24", "10.0.11.0/24", "10.0.12.0/24", "10.0.13.0/24"]
}
'DevOps > Terraform' 카테고리의 다른 글
[Terraform] 데이터 소스 (Data Source) (1) | 2022.04.25 |
---|---|
[Terraform] Count (0) | 2022.04.25 |
[Terraform] 프로비저너 (Provisioner) (0) | 2022.04.22 |
[Terraform] ec2 인스턴스 생성시 사용자 데이터 실행하기 (0) | 2022.04.22 |
[Terraform] 출력값(Output Value), 로컬값(Local Value) (0) | 2022.04.22 |
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!