Add prefix in EC2 instance

khh180cm·2020년 12월 27일
0

What I learned in first year

목록 보기
23/144

위와 같이,
EC2 인스턴스에 Name이 없어서
디버깅 및 식별함에 있어 어려움이 있다.



1. variables.tf 생성하기

terraform 관련 모듈은 deploy디렉토리에서 관리하기로 했었다.

프로젝트의 최상단에 deploy 디렉토리가 있다.


  • variables.tf
variable "prefix" {
    default = "recipe-app"
}

  • main.tf

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}"
}



  • bastion.tf
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"
  }
}



2. AWS 리소스에 적용하기

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"
  }

그렇다면, ${local.prefix}는 어디서 온 변수일까

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를
참조하는 구조다.
모듈화를 하고 있는 구조다.

0개의 댓글