변수는 왜 사용하나요?
한 파일에 모든것이 있는게 보기 좋은 모습은 아니다.
시크릿 같이 숨기기 위해 변수를 사용한다.
깃 저장소에 AWS 자격 증명이 필요하지 않다. 자격증명과 함께 해당 파일을 적용하려는 경우는 깃 저장소 버전 제어에 나타난다.
변경될 수도 있는 요소에 변수를 설정한다. (예를들어 AMIs, AMIs 는 지역마다 다르다. 그래서 이러한 변수로 옮기는 것은 좋다. 지역을 바꿀 때 마다 바꿔줄 수 있으니까)
테라폼 파일을 쉽게 재사용하기 위해

provider "aws" {
access_key = "${var.AWS_ACCESS_KEY}"
secret_key = "${var.AWS_SECRET_KEY}"
region = "${var.AWS_REGION}"
}
provider.tf 파일의 구성이다.

variable "AWS_ACCESS_KEY" {}
variable "AWS_SECRET_KEY" {}
variable "AWS_REGION" {
default = "us-west-2"
}
vars.tf 파일의 내용이다. 변수를 정의했다.
default로 무언가로 지정하면 기본값을 설정한 것이다.

AWS_ACCESS_KEY =
AWS_SECRET_KEY =
AWS_REGION =
terraform.tfvars파일에는 변수 값을 넣을 것이다.
액세스키와 시크릿키를 넣을건데, 리전에는 디폴트값이 있어서 따로 넣지 않을거다.
기본값을 재정의하려는 경우에만 {terraform.tfvars}로 설정해야 한다.

resource "aws_instance" "example" {
ami = "ami-0688ba7eeeeefe3cd"
instance_type = "t2.micro"
subnet_id = "subnet-0daf0e4be40340c35"
}
instance.tf파일은 이렇다. 지금은 ami 아이디가 존재하지만 이것을 변수로 옮기려고 한다.
ami 아이디 변수로 옮기기

resource "aws_instance" "example" {
ami = "${lookup(var.AMIS,var.AWS_REGION)}"
instance_type = "t2.micro"
subnet_id = "subnet-0daf0e4be40340c35"
}
instance.tf파일이다. {lookup}은 맵 변수에서 조회를 수행할 것이다.

variable "AWS_ACCESS_KEY" {}
variable "AWS_SECRET_KEY" {}
variable "AWS_REGION" {
default = "us-west-2"
}
variable 'AMIS' {
type = map
default = {
us-east-1 = "ami-0b0ea68c435eb488d"
us-west-2 = "ami-0688ba7eeeeefe3cd"
eu-west-1 = "ami-0454207e5367abf01"
}
}
vars.tf 파일에서 키값쌍이 있는 'map' 타입의 변수를 만들것이다.
{lookup}으로 {instance.tf}를 살펴보면 어떤일이 일어날까?
ami = "${lookup(var.AMIS, var.AWS_REGION)"}
전달하는 두 개의 매개변수가 있다는 것을 알 수 있다. 첫번째 변수는 변수 자체인 ami고, 두번째는 조회하려는 키인 'AWS_REGION'이다.
만약에 지역이 eu-west-1 이라면 ami값은 맵에서 'eu-west-1'의 값인"ami-0454207e5367abf01"를 가져온다.


terraform apply
terraform apply 적용하면 Enter a value 가 나오고 yes 를 입력하면 뚝딱뚝딱 만든다. 그리고 Apply complete!

AWS 콘솔창에 가보면 새로 running 하고있는 인스턴스를 발견할 수 있다.
댓글