# Terraform 반복문 으로 다중 EC2 만들기

bhs9610·2020년 10월 5일
0
post-thumbnail

이 글에서는 테라폼에서 제공하는 함수인 count() element() 사용해 서로다른 이름을 가진 다중 EC2를 만들어 보도록 하겠습니다.


count()

count를 호출하게되면 지정된 list 에 접근할 수 있습니다. count()는 입력한 수만큼 반복됩니다.

  • count.index : 리스트가 가지고 있는index값의 수입니다.

element()

element 는 list 에서 원하는 index 값을 꺼내올수 있습니다. 아래는 함수를 사용한 예시입니다.

element(list, index)

> element(["a", "b", "c"], 1)
b

> element(["a", "b", "c"], 3)
a

✔️ 첫번째, 고정된 이름에서 번호 부여하기.

테라폼에서는 count 라는 매개변수를 사용해서 반복문을 구사합니다. 첫번째는 count() 를 이용해 "myweb" 이라는 인스턴스에 "myweb-{number} 숫자를 붙여 다중 EC2를 만들어보겠습니다.

## main.tf

resource "aws_key_pair" "terraform-demo" {
  key_name   = "terraform-demo"
  public_key = "${file("terraform-demo.pub")}"
}

resource "aws_instance" "my-instance" {
  count         = "${var.instance_count}"
  ami           = "${lookup(var.ami,var.aws_region)}"
  instance_type = "${var.instance_type}"
  key_name      = "${aws_key_pair.terraform-demo.key_name}"
  tags = {
    Name  = "myweb-${count.index + 1}"
  }
}
## variable.tf

variable "instance_count" {
  default = "3"
}

variable "instance_type" {
  default = "t2.nano"

이렇게 하면 "myweb-{count.index + 1}" 에 instance_count 만큼 EC2가 만들어 집니다.

## 결과

myweb-1
myweb-2
myweb-3

✌️ 두번째, 서로다른 이름을 가진 인스턴스 만들기.

이제 각 EC2 마다 순차적으로 다른 이름을 부여할겁니다. 여기서 사용되는 매개변수는 element() 와 첫번째에서 사용했던 count() 입니다.

## main.tf

resource "aws_key_pair" "terraform-demo" {
  key_name   = "terraform-demo"
  public_key = "${file("terraform-demo.pub")}"
}

resource "aws_instance" "my-instance" {
  count         = "${var.instance_count}"
  ami           = "${lookup(var.ami,var.aws_region)}"
  instance_type = "${var.instance_type}"
  key_name      = "${aws_key_pair.terraform-demo.key_name}"

  tags = {
    Name  = "${element(var.instance_tags, count.index)}"
  }
}
## variable.tf

variable **"instance_count"** {
    default = "3"
}
variable "instance_tags" {
  type = "list"
  default = ["loanshark-1, loanshark-2, myweb-3"]
}

variable "instance_type" {
  default = "t2.nano"
}

count.index에 정의된만큼 반복되어 element 에 순차적으로 이름이 들어가게됩니다.

## 결과

loanshark-1
loanshark-2
myweb-3

정리하자면,

테라폼에서 제공하는 함수로 여러개 인스턴스를 만들어보았습니다. 다음에는 if 문을 추가해 좀 더여러가지 상황에 맞게 만들어보도록 하겠습니다 :)

profile
@changhyuni

1개의 댓글

comment-user-thumbnail
2020년 10월 5일

잘 놀다갑니다~~^^

답글 달기