위와 같이,
EC2 인스턴스에 Name이 없어서
디버깅 및 식별함에 있어 어려움이 있다.
terraform 관련 모듈은 deploy
디렉토리에서 관리하기로 했었다.
프로젝트의 최상단에 deploy 디렉토리가 있다.
variable "prefix" {
default = "recipe-app"
}
Locals
를 사용할 예정이다.
Locals는 다양한 변수를 생성하게 해주는 terraform 기능이다.
terraform {
backend "s3" {
bucket = "info-share-tfstate"
key = "recipe-app.tfstate"
region = "us-east-1"
encrypt = true
dynamodb_table = "info-share-tf-state-lock"
}
required_providers {
aws = {
version = "~> 3.22.0"
source = "hashicorp/aws"
}
}
}
provider "aws" {
region = "us-east-1"
}
locals {
prefix = "${var.prefix}-${terraform.workspace}"
}
data "aws_ami" "amazon_linux" {
most_recent = true
filter {
name = "name"
values = ["amzn2-ami-hvm-2.0.*-x86_64-gp2"]
}
owners = ["amazon"]
}
resource "aws_instance" "bastion" {
ami = data.aws_ami.amazon_linux.id
instance_type = "t2.micro"
tags = {
Name = "${local.prefix}-bastion"
}
}
docker-compose -f deploy/docker-compose.yml run --rm terraform fmt
docker-compose -f deploy/docker-compose.yml run --rm terraform validate
docker-compose -f deploy/docker-compose.yml run --rm terraform plan
python
docker-compose -f deploy/docker-compose.yml run --rm terraform apply
AWS EC2 대시보드를 직접 확인해보자.
정리해보면
bastion.tf
에서 aws instance 리소스에 대한 tag를 정의했었다.
tags = {
Name = "${local.prefix}-bastion"
}
main.tf
다.
locals {
prefix = "${var.prefix}-${terraform.workspace}"
}
main.tf에서 정의한대로 locals.prefix 를 참조한 것이다.
여기서 다시
${var.prefix}
와 ${terraform.workspace}
변수가 나온다.
이것은 variables.tf
모듈에서 확인할 수 있는 것이다.
variable "prefix" {
default = "recipe-app"
}
즉, 특정 리소스에 대한 .tf
는
main.tf 파일을 참조하고,
main.tf 파일은 결국 모든 변수의 집합소인 variables.tf를
참조하는 구조다.
모듈화를 하고 있는 구조다.