Terraform으로 AWS 리소스를 사용하면서 점점 변수를 많이 사용하게 된다. Terraform으로 리소스를 생성하면 그 리소스의 이름으로 참조할 수 있지만 모든 리소스를 다 Terraform으로 관리할 수 있는 것은 아니다. 경험했을 때는 사용자 이름이나 AMI 이름 등이 대표적이다.
EC2 인스턴스를 위처럼 정의할 수 있는데 여기서 ami-785c491f
는 Ubuntu Server 16.04 LTS (HVM) 이지만 이 AMI 아이디만으로는 알기가 어려우므로 이렇게 사용한다면 주석으로 어떤 AMI 인지를 적어두는 것이 차후에 관리하기가 좋을 것이다.
일회성의 경우 애매하기는 하지만 가능하면 아래처럼 변수를 사용하는 것이 더 좋다고 생각한다.
변수를 사용하는 경우 쉽게 어떤 AMI를 사용하는지(이름을 잘 지어야겠지만) 알 수 있고 여러 곳에서 사용하는 경우 한 번에 이미지를 바꾸는 것도 가능하다.
여기서는 변수에 특정 값을 할 당했는데 Terraform의 변수는 맵을 지원하기 때문에 맵을 사용해서 여러 값을 넣는 것도 가능하다.
여러 리전을 사용하는 경우 하나의 변수를 Map으로 정의해서 리전 별로 지정하면 var.ubuntu_ami["ap-northeast-1"]
와 같이 참조할 수 있고 사용할 때도 의미를 알기 쉬워서 아주 좋다.
위처럼 Availability Zones을 리전별로 정의해 놓고 참조해서 사용하는 것도 가능하다. 맵에서 키를 찾는 lookup함수를 제공하므로 var.availability_zones["us-east-1"]
대신 아래와 같이 값을 가져올 수도 있다.
Availability Zones는 배열로 만들어서 사용하고 싶다면 split을 사용하면 배열로 변환해서 할당할 수 있다.
Comments