Cloud/Terraform

Terraform - 07/19

잇(IT) 2022. 7. 19. 09:51

- AMI 생성

 

- EC2를 먼저 만들고 반드시 작업해야 한다.

- depends_on을 사용하여 생성한다.

 

# 13.ami.tf

resource "aws_ami_from_instance" "tf_ami" {
  name  = "tf_ami"
  source_instance_id = aws_instance.tf-bastion.id
  depends_on = [
    aws_instance.tf-bastion
  ]
}

- 위의 테라폼 코드는 인스턴스를 가지고 이미지를 생성하는 코드다.

- source_instance_id 부분에 이미지로 만들고 싶은 인스턴스의 아이디를 넣으면 된다.

- depends_on은 인스턴스를 이용하여 이미지를 생성할 때 반드시 인스턴스가 필요하기 때문에 해당 인스턴스를 작성해서 넣는 부분이다.

 


- ELB 생성

 

# 14.alb.tf

resource "aws_lb" "tf-lb" {
  name = "tf-alb"
  internal  =   false
  load_balancer_type = "application"
  security_groups = [aws_security_group.tf-sg.id]
  subnets = [aws_subnet.tf-pub-a.id, aws_subnet.tf-pub-c.id]

  tags = {
    "name" = "tf-alb"
  }
}
  output "dns_name" {
    value = aws_lb.tf-lb.dns_name
  }

* output은 resource block 밖에 작성되어야 한다.

- internal = 외부 인터넷 경계에 사용하려면 false를 내부 네트워크에서 사용하려면 yes를 작성한다.


- ALB Target Group 생성

 

 

- 기본값이 instance이다.

 

* php 파일은 health check가 안되기 때문에 임의의 index.html 파일을 만들어서 health check가 가능하도록 해야한다.

 

# 15.albtg.tf

resource "aws_lb_target_group" "tf-albtg" {
  name = "tf-albtg"
  target_type = "instance"
  port = 80
  protocol = "HTTP"
  vpc_id = aws_vpc.tf-vpc.id

  health_check {
    enabled = true
    healthy_threshold = 3
    interval = 10
    matcher = 200
    path = "/index.html"
    port = "traffic-port"
    protocol = "HTTP"
    timeout = 2
    unhealthy_threshold = 3
  }
}

- target group 생성과 동시에 health_check를 해야 한다.


- Listener 생성

 

* Example

resource "aws_lb" "front_end" {
  # ...
}

resource "aws_lb_target_group" "front_end" {
  # ...
}

resource "aws_lb_listener" "front_end" {
  load_balancer_arn = aws_lb.front_end.arn
  port              = "443"
  protocol          = "HTTPS"
  ssl_policy        = "ELBSecurityPolicy-2016-08"
  certificate_arn   = "arn:aws:iam::187416307283:server-certificate/test_cert_rab3wuqwgja25ct3n4jdj2tzu4"

  default_action {
    type             = "forward"
    target_group_arn = aws_lb_target_group.front_end.arn
  }
}

 

-실행 시킨 이후 위와 같이 Listener가 추가된 것을 확인 할 수 있다.

 

- 이후에 Listener를 attachment 하는 작업이 필수로 필요하다.


- aws_launch_configuration

 

# 17.autolaunch.tf

resource "aws_launch_configuration" "tf-lacf" {
  name = "tf-lacf"
  image_id = aws_ami_from_instance.tf-ami.id
  instance_type = "t2.micro"
  iam_instance_profile = "admin_role"
  security_groups = [aws_security_group.tf-sg.id]
  key_name = "tf-key"
  user_data = <<-EOF
            #! /bin/bash
            systemctl start httpd
            systemctl enable httpd
            EOF
}

- Auto Scaling

 

# 18.auto.tf

resource "aws_placement_group" "tf_pg" {
  name = "tf_pg"
  strategy = "cluster"
}

resource "aws_autoscaling_group" "tf_atsg" {
  name = "tf_atsg"
  max_size = 10
  min_size = 1
  health_check_grace_period = 60
  # health check 하기까지 시간
  health_check_type = "EC2"
  desired_capacity = 2
  force_delete = false
  launch_configuration = aws_launch_configuration.tf-lacf.name
  vpc_zone_identifier = [aws_subnet.tf-pub-a.id, aws_subnet.tf-pub-c.id]
}

- 위에서 생성한 launch_configuration을 이용하여 해당 이미지를 가지고 auto scaling group을 생성한다.

 


 

728x90

'Cloud > Terraform' 카테고리의 다른 글

Terraform - 07/20  (0) 2022.07.20
Terraform - 7/15  (0) 2022.07.15
Terraform - 07/14  (0) 2022.07.14
Terraform - RDS 생성  (0) 2022.07.14
Terraform - Auto Scaling Tracking Policy 생성 및 Load Test로 Auto Scaling 테스트  (0) 2022.07.10