DevOps/Terraform

[Terraform] 테라폼 모듈을 활용한 AWS EC2 인스턴스 반복 배포

Jflip 2024. 7. 14. 03:27
728x90

안녕하세요, 이번 포스팅은 테라폼 모듈을 활용한 athena datacatalog 배포에 대해서 포스팅을 올립니다.

CloudNet@의 테라폼 스터디 내용을 기반하고 있습니다.

 

트리

├── main.tf
├── modules
│   └── ec2-instance
│       ├── main.tf
│       └── variables.tf
└── terraform.tfstate

 

루트 모듈 정의 (main.tf)

provider "aws" {
  region = "ap-northeast-2"
}

locals {
  ec2_instances = {
    jflip-test-01 = {
      instance_type = "t2.micro"
      ami_id        = "ami-04ea5b2d3c8ceccf8"
    },
    jflip-test-02 = {
      instance_type = "t2.small"
      ami_id        = "ami-04ea5b2d3c8ceccf8"
    },
    jflip-test-03 = {
      instance_type = "t2.medium"
      ami_id        = "ami-04ea5b2d3c8ceccf8"
    },
  }
}

module "ec2_instances" {
  source = "./modules/ec2-instance"
  for_each = local.ec2_instances

  name           = each.key
  instance_type  = each.value.instance_type
  ami_id         = each.value.ami_id
}

 

ec2_instances라는 로컬 변수를 사용하여 생성할 EC2 인스턴스의 설정을 맵 형태로 정의합니다.

각 인스턴스는 고유한 이름, 인스턴스 타입, 및 AMI ID를 가집니다.

 

또한 ec2_instances 모듈을 호출하여 각 EC2 인스턴스를 생성합니다.

for_each를 사용하여 로컬 변수에 정의된 각 설정을 반복적으로 적용합니다.

 

차일드 모듈의 변수 추가 (variables.tf)

variable "name" {
  description = "Name of the EC2 instance"
  type        = string
}

variable "instance_type" {
  description = "EC2 instance type"
  type        = string
}

variable "ami_id" {
  description = "AMI ID"
  type        = string
}

 

각기 인스턴스명, 인스턴스 타입, 사용할 ami_id를 의미합니다.

 

차일드 모듈 (main.tf)

resource "aws_instance" "this" {
  ami           = var.ami_id
  instance_type = var.instance_type

  tags = {
    Name = var.name
  }
}

 

모듈에서 사용할 내용을 정의합니다.

 

테라폼 플랜을 통해서 해당 내용이 제대로 적용될 수 있는지 확인합니다.

 

테라폼을 통해서 배포해 본 결과입니다.

리소스가 잘 배포되는 것을 확인하실 수 있습니다!

 

감사합니다.

 

728x90
반응형