Ssoon

[T101-2주차] 02 왜 Terraform 인가? - (6) 웹 서버 클러스터 배포 본문

Terraform 101 Study

[T101-2주차] 02 왜 Terraform 인가? - (6) 웹 서버 클러스터 배포

구구달스 2022. 10. 18. 23:54
CloudNet@ 팀의 가시다님이 진행하는 Terraform 101 Study 2주차 정리입니다.

ASG (Auto Scaling Group)

1. main.tf - launch configuraion 생성

  • EC2 인스턴스를 어떻게 구성할 것인가 ?
data "aws_ami" "ssoon_amazonlinux2" {
  most_recent = true
  filter {
    name   = "owner-alias"
    values = ["amazon"]
  }

  filter {
    name   = "name"
    values = ["amzn2-ami-hvm-*-x86_64-ebs"]
  }

  owners = ["amazon"]
}

resource "aws_launch_configuration" "ssoon_lauch_config" {
  name_prefix                 = "t101-ssoon_lauch_config-"
  image_id                    = data.aws_ami.ssoon_amazonlinux2.id
  instance_type               = "t2.micro"
  security_groups             = [aws_security_group.ssoon_sg.id]
  associate_public_ip_address = true

  user_data = <<-EOF
	#!/bin/bash
	wget https://busybox.net/downloads/binaries/1.31.0-defconfig-multiarch-musl/busybox-x86_64
	mv busybox-x86_64 busybox
	chmod +x busybox
	RZAZ=$(curl http://169.254.169.254/latest/meta-data/placement/availability-zone-id)
	IID=$(curl 169.254.169.254/latest/meta-data/instance-id)
	LIP=$(curl 169.254.169.254/latest/meta-data/local-ipv4)
	echo "<h1>RegionAz($RZAZ) : Instance ID($IID) : Private IP($LIP) : Web Server</h1>" > index.html
	nohup ./busybox httpd -f -p 80 &
	EOF

  lifecycle {
    create_before_destroy = true
  }
}
  • create_before_destroy
    • 기본적으로 Terraform이 원격 API 제한으로 인해 제자리(in-place)에서 업데이트할 수 없는 리소스 인수(argument)를 변경해야 하는 경우 Terraform은 대신 기존 객체(object)를 파괴한 다음 새로 구성된 인수(arguments)로 새 대체 객체(object)를 생성합니다.
    • create_before_destroy meta-argument 는 이 동작을 변경하여 새 대체 객체(object)가 먼저 생성되고 대체 객체(object)가 생성된 후 이전 객체(object)가 소멸되도록 합니다.

2. main.tf - ASG 생성

resource "aws_autoscaling_group" "ssoon_asg" {
  name                 = "ssoon_asg"
  launch_configuration = aws_launch_configuration.ssoon_lauch_config.name
  vpc_zone_identifier  = [aws_subnet.ssoon_subnet1.id, aws_subnet.ssoon_subnet2.id]
  min_size             = 2
  max_size             = 5

  tag {
    key                 = "Name"
    value               = "T101_Ssoon_asg"
    propagate_at_launch = true
  }
}
  • propagate_at_launch 
    • (필수) 이 ASG를 통해 시작된 Amazon EC2 인스턴스로 태그 전파 활성화

 

terraform state list 로 Launch configuration 과 Auto Scaling group 배포 된 것을 확인합니다.

 

 

 

 

 

 

======================================================================

Terraform Up&Running 추가내용

======================================================================

3. data.tf - subnet_ids 

  • ASG가 EC2 를 어느 VPC 에 배포할 지 지정
  • data 소스를 사용하여 AWS 계정에서 subnet 목록을 참조

★ Data Sources

data "<PROVIDER>_<TYPE>" "<NANE>" {

  [CONFIG ...]

}

  • 데이터 소스를 통해 Terraform은 Terraform 외부에서 정의되거나 다른 별도의 Terraform 구성에 의해 정의되거나 기능에 의해 수정된 정보를 사용할 수 있습니다.
  • PROVIDER : AWS .. 공급자
  • TYPE : 사용하려는 data source 의 유형
  • NAME : terraform 코드에서 이 data source 를 참조하는 데 사용할 수 있는 식별자

data.<PROVIDER>_<TYPE>.<NAME>.<ATTRIBUTE>

  • data source 에서 data 를 가져오는 속성 참조 구문입니다.
=======================================================================================================
1. 기본 VPC 의 데이터를 조회합니다.
=======================================================================================================
data "aws_vpc" "myasg" {
  default = true
}

=======================================================================================================
2. 해당 VPC 내 Subnet 을 조회합니다.
=======================================================================================================
data "aws_subnets" "mysubnet" {
  filter {
    name   = "vpc-id"
    values = [data.aws_vpc.myasg.id]
  }
}

=======================================================================================================
3. 2번 data 소스에서 Subnet ID 를 가져옵니다.
=======================================================================================================
resource "aws_autoscaling_group" "myasg" {
  launch_configuration = aws_launch_configuration.mylaunchconfig.name
  vpc_zone_identifier  = data.aws_subnets.mysubnet.id

 

Comments