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