카이도스의 Tech Blog
[CHAPTER 2] ASG/ELB 본문
728x90
반응형
CloudNet@-가시다(Gasida)님의 Terraform 스터디를 기준으로 작성됩니다.
참고링크 - https://registry.terraform.io/providers/hashicorp/aws/latest/docs
이전글 : 2023.05.23 - [Terraform] - [CHAPTER 1&2] 기초
1. VPC + 보안그룹 + EC2 배포
코드 파일 내용에 리소스의 이름(myvpc, mysubnet1 등)을 반드시! 꼭! 자신의 닉네임으로 변경해서 배포 후,
해당 **테라폼 코드(파일)**를 올려주세요
- 리소스의 유형과 리소스의 이름이 차이를 알고, 리소스의 속성(예. ID)를 참조하는 방법에 대해서 익숙해지자
1-1. VPC 배포 : vpc.tf
# 신규 디렉터리 생성
mkdir my-vpc-ec2-asg
cd my-vpc-ec2-asg
- VPC 생성
cat <<EOT > vpc.tf
provider "aws" {
region = "ap-northeast-2"
}
resource "aws_vpc" "pjhvpc" {
cidr_block = "10.10.0.0/16"
tags = {
Name = "t101-study"
}
}
EOT
# 배포
terraform init
terraform plan && terraform apply -auto-approve
terraform state list
aws_vpc.pjhvpc
# VPC 확인
export AWS_PAGER=""
aws ec2 describe-vpcs | jq
aws ec2 describe-vpcs --output yaml
- 생성된 VPC DNS 옵션 수정
cat <<EOT > vpc.tf
provider "aws" {
region = "ap-northeast-2"
}
resource "aws_vpc" "pjhvpc" {
cidr_block = "10.10.0.0/16"
enable_dns_support = true
enable_dns_hostnames = true
tags = {
Name = "t101-study"
}
}
EOT
# 배포
terraform plan && terraform apply -auto-approve
- 서브넷 2개 생성 추가
cat <<EOT > vpc.tf
provider "aws" {
region = "ap-northeast-2"
}
resource "aws_vpc" "pjhvpc" {
cidr_block = "10.10.0.0/16"
enable_dns_support = true
enable_dns_hostnames = true
tags = {
Name = "t101-study"
}
}
resource "aws_subnet" "pjhsubnet1" {
vpc_id = aws_vpc.pjhvpc.id
cidr_block = "10.10.1.0/24"
availability_zone = "ap-northeast-2a"
tags = {
Name = "t101-subnet1"
}
}
resource "aws_subnet" "pjhsubnet2" {
vpc_id = aws_vpc.pjhvpc.id
cidr_block = "10.10.2.0/24"
availability_zone = "ap-northeast-2c"
tags = {
Name = "t101-subnet2"
}
}
output "aws_vpc_id" {
value = aws_vpc.pjhvpc.id
}
EOT
- 배포
# 배포
terraform plan && terraform apply -auto-approve
terraform state list
aws_subnet.pjhsubnet1
aws_subnet.pjhsubnet2
aws_vpc.pjhvpc
terraform output
terraform output aws_vpc_id
terraform output -raw aws_vpc_id
# 서브넷 확인
aws ec2 describe-subnets --output text
# 참고 : aws ec2 describe-subnets --filters "Name=vpc-id,Values=vpc-<자신의 VPC ID>"
VPCID=$(terraform output -raw aws_vpc_id)
aws ec2 describe-subnets --filters "Name=vpc-id,Values=$VPCID" | jq
aws ec2 describe-subnets --filters "Name=vpc-id,Values=$VPCID" --output table
cat <<EOT > vpc.tf
provider "aws" {
region = "ap-northeast-2"
}
resource "aws_vpc" "pjhvpc" {
cidr_block = "10.10.0.0/16"
enable_dns_support = true
enable_dns_hostnames = true
tags = {
Name = "t101-study"
}
}
resource "aws_subnet" "pjhsubnet1" {
vpc_id = aws_vpc.pjhvpc.id
cidr_block = "10.10.1.0/24"
availability_zone = "ap-northeast-2a"
tags = {
Name = "t101-subnet1"
}
}
resource "aws_subnet" "pjhsubnet2" {
vpc_id = aws_vpc.pjhvpc.id
cidr_block = "10.10.2.0/24"
availability_zone = "ap-northeast-2c"
tags = {
Name = "t101-subnet2"
}
}
resource "aws_internet_gateway" "pjhigw" {
vpc_id = aws_vpc.pjhvpc.id
tags = {
Name = "t101-igw"
}
}
output "aws_vpc_id" {
value = aws_vpc.pjhvpc.id
}
EOT
- 배포
# 배포
terraform plan && terraform apply -auto-approve
terraform state list
aws_internet_gateway.pjhigw
aws_subnet.pjhsubnet1
aws_subnet.pjhsubnet2
aws_vpc.pjhvpc
cat <<EOT > vpc.tf
provider "aws" {
region = "ap-northeast-2"
}
resource "aws_vpc" "pjhvpc" {
cidr_block = "10.10.0.0/16"
enable_dns_support = true
enable_dns_hostnames = true
tags = {
Name = "t101-study"
}
}
resource "aws_subnet" "pjhsubnet1" {
vpc_id = aws_vpc.pjhvpc.id
cidr_block = "10.10.1.0/24"
availability_zone = "ap-northeast-2a"
tags = {
Name = "t101-subnet1"
}
}
resource "aws_subnet" "pjhsubnet2" {
vpc_id = aws_vpc.pjhvpc.id
cidr_block = "10.10.2.0/24"
availability_zone = "ap-northeast-2c"
tags = {
Name = "t101-subnet2"
}
}
resource "aws_internet_gateway" "pjhigw" {
vpc_id = aws_vpc.pjhvpc.id
tags = {
Name = "t101-igw"
}
}
resource "aws_route_table" "pjhrt" {
vpc_id = aws_vpc.pjhvpc.id
tags = {
Name = "t101-rt"
}
}
resource "aws_route_table_association" "pjhrtassociation1" {
subnet_id = aws_subnet.pjhsubnet1.id
route_table_id = aws_route_table.pjhrt.id
}
resource "aws_route_table_association" "pjhrtassociation2" {
subnet_id = aws_subnet.pjhsubnet2.id
route_table_id = aws_route_table.pjhrt.id
}
resource "aws_route" "pjhdefaultroute" {
route_table_id = aws_route_table.pjhrt.id
destination_cidr_block = "0.0.0.0/0"
gateway_id = aws_internet_gateway.pjhigw.id
}
output "aws_vpc_id" {
value = aws_vpc.pjhvpc.id
}
EOT
- 배포
# 배포
terraform plan && terraform apply -auto-approve
terraform state list
aws_internet_gateway.pjhigw
aws_route.pjhdefaultroute
aws_route_table.pjhrt
aws_route_table_association.pjhrtassociation1
aws_route_table_association.pjhrtassociation2
aws_subnet.pjhsubnet1
aws_subnet.pjhsubnet2
aws_vpc.pjhvpc
# 라우팅 테이블 확인
#aws ec2 describe-route-tables --filters 'Name=tag:Name,Values=t101-rt' --query 'RouteTables[].Associations[].SubnetId'
aws ec2 describe-route-tables --filters 'Name=tag:Name,Values=t101-rt' --output table
1-2. 데이터 소스 data : AWS 데이터 소스의 경우 “VPC data, subnet data, AMI IDs, IP address ranges, the current user’s identity, and much more.” 정보를 제공 - 링크 Docs Sample Instance
- ASG에 추가해야 작동하는 subnet_ids 매개 변수도 있습니다. subnet_ids 는 ASG가 EC2를 어느 VPC의 서브넷에 배포할지 지정하는 매개 변수입니다.
- subnet_ids는 데이터 소스를 사용하여 AWS 계정에서 서브넷 목록을 얻는 것이 좋습니다.
- AWS 데이터 소스의 경우 “VPC data, subnet data, AMI IDs, IP address ranges, the current user’s identity, and much more.” 정보를 제공
data “<PROVIDER>_<TYPE>” “<NAME>” {
[CONFIG …]
}
- PROVIDER : aws 같은 공급자의 이름
- TYPE : vpc 같은 사용하려는 데이터 소스의 유형
- NAME : 테라폼 코드에서 이 데이터 소스를 참조하는 데 사용할 수 있는 식별자
- CONFIG : 해당 데이터 소스에 고유한 하나 이상의 인수로 구성됨
- 예를 들어 aws_vpc 데이터 소스를 사용하여 기본 VPC(default vpc)의 데이터를 사용하는 구문
data “aws_vpc” “default” {
default = true
}
- 데이터 소스에서 데이터를 가져오려면 다음과 같은 속성 참조 구문을 사용합니다
data.<PROVIDER>_<TYPE>.<NAME>.<ATTRIBUTE>
- 예를 들어 aws_vpc 데이터 소스에서 VPC의 ID를 얻으려면 속성 참조 구문을 다음과 같이 사용합니다.
data.aws_vpc.default.id
- 이 데이터를 다른 데이터 소스인 aws_subnet_ids 와 결합하여 해당 VPC 내 서브넷을 조회할 수 있습니다.
data "aws_subnets" "default" {
filter {
name = "vpc-id"
values = [data.aws_vpc.default.id]
}
}
- 마지막으로 vpc_zone_identifier 인수를 이용해 aws_subnet_ids 데이터 소스에서 서브넷ID를 가져와서 ASG가 이 서브넷을 사용하도록 지시할 수 있습니다
resource "aws_autoscaling_group" "example" {
launch_configuration = aws_launch_configuration.example.name
vpc_zone_identifier = data.aws_subnets.default.ids
min_size = 2
max_size = 10
tag {
key = "Name"
value = "terraform-asg-example"
propagate_at_launch = true
}
}
1-3. 보안그룹/EC2 배포 : sg.tf, ec2.tf
- 보안그룹 생성
cat <<EOT > sg.tf
resource "aws_security_group" "pjhsg" {
vpc_id = aws_vpc.pjhvpc.id
name = "T101 SG"
description = "T101 Study SG"
}
resource "aws_security_group_rule" "pjhsginbound" {
type = "ingress"
from_port = 0
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
security_group_id = aws_security_group.pjhsg.id
}
resource "aws_security_group_rule" "pjhsgoutbound" {
type = "egress"
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
security_group_id = aws_security_group.pjhsg.id
}
EOT
# 배포
terraform plan && terraform apply -auto-approve
terraform state list
aws_internet_gateway.pjhigw
aws_route.pjhdefaultroute
aws_route_table.pjhrt
aws_route_table_association.pjhrtassociation1
aws_route_table_association.pjhrtassociation2
aws_security_group.pjhsg
aws_security_group_rule.pjhsginbound
aws_security_group_rule.pjhsgoutbound
aws_subnet.pjhsubnet1
aws_subnet.pjhsubnet2
aws_vpc.pjhvpc
- EC2 생성 : CMD창에서 바로 복사&붙여넣기로 파일 생성 시 \ 주의 ⇒ 그냥 직접 IDE에 붙여넣을때는 \ 제거하세요
cat <<EOT > ec2.tf
data "aws_ami" "pjh_amazonlinux2" {
most_recent = true
filter {
name = "owner-alias"
values = ["amazon"]
}
filter {
name = "name"
values = ["amzn2-ami-hvm-*-x86_64-ebs"]
}
owners = ["amazon"]
}
resource "aws_instance" "pjhec2" {
depends_on = [
aws_internet_gateway.pjhigw
]
ami = data.aws_ami.pjh_amazonlinux2.id
associate_public_ip_address = true
instance_type = "t2.micro"
vpc_security_group_ids = ["\${aws_security_group.pjhsg.id}"]
subnet_id = aws_subnet.pjhsubnet1.id
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
user_data_replace_on_change = true
tags = {
Name = "HallsHolicker-jjang"
}
}
output "pjhec2_public_ip" {
value = aws_instance.pjhec2.public_ip
description = "The public IP of the Instance"
}
EOT
- EC2 확인
terraform plan && terraform apply -auto-approve
Outputs:
pjhec2_public_ip = "43.201.59.6"
terraform state list
data.aws_ami.pjh_amazonlinux2
aws_instance.pjhec2
aws_internet_gateway.pjhigw
aws_route.pjhdefaultroute
aws_route_table.pjhrt
aws_route_table_association.pjhrtassociation1
aws_route_table_association.pjhrtassociation2
aws_security_group.pjhsg
aws_security_group_rule.pjhsginbound
aws_security_group_rule.pjhsgoutbound
aws_subnet.pjhsubnet1
aws_subnet.pjhsubnet2
aws_vpc.pjhvpc
# 출력된 EC2 퍼블릭IP로 cul 접속 확인
terraform output -raw pjhec2_public_ip
43.201.59.6
MYIP=$(terraform output -raw pjhec2_public_ip)
while true; do curl --connect-timeout 1 http://$MYIP/ ; echo "------------------------------"; date; sleep 1; done
<h1>RegionAz(apne2-az1) : Instance ID(i-0a8f28643a652228f) : Private IP(10.10.1.87) : Web Server</h1>
------------------------------
2023년 6월 1일 목요일 14시 42분 41초 KST
<h1>RegionAz(apne2-az1) : Instance ID(i-0a8f28643a652228f) : Private IP(10.10.1.87) : Web Server</h1>
------------------------------
2023년 6월 1일 목요일 14시 42분 42초 KST
<h1>RegionAz(apne2-az1) : Instance ID(i-0a8f28643a652228f) : Private IP(10.10.1.87) : Web Server</h1>
------------------------------
....
- EC2 삭제
rm -f ec2.tf ; terraform apply -auto-approve
2. ASG 배포
목표 : ASG 에 ALB 연동 배포
2-1. 배포 : alb.tf
- ALB 생성
cat <<EOT > alb.tf
resource "aws_lb" "pjhalb" {
name = "t101-alb"
load_balancer_type = "application"
subnets = [aws_subnet.pjhsubnet1.id, aws_subnet.pjhsubnet2.id]
security_groups = [aws_security_group.pjhsg.id]
tags = {
Name = "t101-alb"
}
}
output "pjhalb_dns" {
value = aws_lb.pjhalb.dns_name
description = "The DNS Address of the ALB"
}
EOT
- 배포
# 배포 : 2분 10초 정도 소요
terraform plan && terraform apply -auto-approve
Outputs:
pjhalb_dns = "t101-alb-940947136.ap-northeast-2.elb.amazonaws.com"
terraform state list
aws_internet_gateway.pjhigw
aws_lb.pjhalb
aws_route.pjhdefaultroute
aws_route_table.pjhrt
aws_route_table_association.pjhrtassociation1
aws_route_table_association.pjhrtassociation2
aws_security_group.pjhsg
aws_security_group_rule.pjhsginbound
aws_security_group_rule.pjhsgoutbound
aws_subnet.pjhsubnet1
aws_subnet.pjhsubnet2
aws_vpc.pjhvpc
# ALB 정보 확인
aws elbv2 describe-load-balancers --output table
aws elbv2 describe-load-balancers | jq
# [터미널2] 출력된 ALB DNS주소로 cul 접속 확인
terraform output -raw pjhalb_dns
t101-alb-940947136.ap-northeast-2.elb.amazonaws.com
ALBDNS=$(terraform output -raw pjhalb_dns)
while true; do curl --connect-timeout 1 http://$ALBDNS/ ; echo; echo "------------------------------"; date; sleep 1; done
- ALB의 리스너 생성 : http 80 인입, 리스너 규칙과 일치하지 않을 경우 404 페이지 리턴
cat <<EOT > alb.tf
resource "aws_lb" "pjhalb" {
name = "t101-alb"
load_balancer_type = "application"
subnets = [aws_subnet.pjhsubnet1.id, aws_subnet.pjhsubnet2.id]
security_groups = [aws_security_group.pjhsg.id]
tags = {
Name = "t101-alb"
}
}
resource "aws_lb_listener" "pjhhttp" {
load_balancer_arn = aws_lb.pjhalb.arn
port = 80
protocol = "HTTP"
# By default, return a simple 404 page
default_action {
type = "fixed-response"
fixed_response {
content_type = "text/plain"
message_body = "404: page not found - T101 Study"
status_code = 404
}
}
}
output "pjhalb_dns" {
value = aws_lb.pjhalb.dns_name
description = "The DNS Address of the ALB"
}
EOT
- 배포 후 접속
# 배포
terraform plan && terraform apply -auto-approve
# ALB DNS 주소 curl 접속 확인
ALBDNS=$(terraform output -raw pjhalb_dns)
while true; do curl --connect-timeout 1 http://$ALBDNS/ ; echo; echo "------------------------------"; date; sleep 1; done
2023년 6월 1일 목요일 15시 06분 28초 KST
404: page not found - T101 Study
------------------------------
2023년 6월 1일 목요일 15시 06분 29초 KST
404: page not found - T101 Study
------------------------------
2023년 6월 1일 목요일 15시 06분 31초 KST
404: page not found - T101 Study
------------------------------
- 다음으로 aws_lb_target_group 리소스를 사용하여 ASG의 대상 그룹을 생성
cat <<EOT > alb.tf
resource "aws_lb" "pjhalb" {
name = "t101-alb"
load_balancer_type = "application"
subnets = [aws_subnet.pjhsubnet1.id, aws_subnet.pjhsubnet2.id]
security_groups = [aws_security_group.pjhsg.id]
tags = {
Name = "t101-alb"
}
}
resource "aws_lb_listener" "pjhhttp" {
load_balancer_arn = aws_lb.pjhalb.arn
port = 80
protocol = "HTTP"
# By default, return a simple 404 page
default_action {
type = "fixed-response"
fixed_response {
content_type = "text/plain"
message_body = "404: page not found - T101 Study"
status_code = 404
}
}
}
resource "aws_lb_target_group" "pjhalbtg" {
name = "t101-alb-tg"
port = 80
protocol = "HTTP"
vpc_id = aws_vpc.pjhvpc.id
health_check {
path = "/"
protocol = "HTTP"
matcher = "200-299"
interval = 5
timeout = 3
healthy_threshold = 2
unhealthy_threshold = 2
}
}
output "pjhalb_dns" {
value = aws_lb.pjhalb.dns_name
description = "The DNS Address of the ALB"
}
EOT
2-2. ALB + ASG 연동 : asg.tf
- 대상그룹은 어느 EC2에 요청을 보내는지 아나요? → ASG + ALB 통합 이점 활용(aws_autoscaling_group 리소스에 target_group_arns 인수를 설정)하여 새 대상 그룹을 지정
- 이때 헬스체크도 EC2가 아닌 ELB로 변경 → 이 경우 EC2 불량 시 자동으로 인스턴스가 교체되고 대상그룹에 등록됨
- 코드 파일 작성 : CMD창에서 바로 복사&붙여넣기로 파일 생성 시 \ 주의 ⇒ 그냥 직접 IDE에 붙여넣을때는 \ 제거하세요
cat <<EOT > asg.tf
data "aws_ami" "pjh_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" "pjhlauchconfig" {
name_prefix = "t101-lauchconfig-"
image_id = data.aws_ami.pjh_amazonlinux2.id
instance_type = "t2.micro"
security_groups = [aws_security_group.pjhsg.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
# Required when using a launch configuration with an auto scaling group.
lifecycle {
create_before_destroy = true
}
}
resource "aws_autoscaling_group" "pjhasg" {
name = "pjhasg"
launch_configuration = aws_launch_configuration.pjhlauchconfig.name
vpc_zone_identifier = [aws_subnet.pjhsubnet1.id, aws_subnet.pjhsubnet2.id]
min_size = 2
max_size = 10
health_check_type = "ELB"
target_group_arns = [aws_lb_target_group.pjhalbtg.arn]
tag {
key = "Name"
value = "terraform-asg"
propagate_at_launch = true
}
}
data "aws_instances" "web_instances" {
instance_state_names = ["running"]
}
output "instance_state_privip" {
description = "Instance Private IPs"
value = data.aws_instances.web_instances.private_ips
}
output "instance_state_pubip" {
description = "Instance Public IPs"
value = data.aws_instances.web_instances.public_ips
}
EOT
- 마지막으로 aws_lb_listener_rule 리소스를 사용해 리스너 규칙을 생성하여 연결
cat <<EOT > alb.tf
resource "aws_lb" "pjhalb" {
name = "t101-alb"
load_balancer_type = "application"
subnets = [aws_subnet.pjhsubnet1.id, aws_subnet.pjhsubnet2.id]
security_groups = [aws_security_group.pjhsg.id]
tags = {
Name = "t101-alb"
}
}
resource "aws_lb_listener" "pjhhttp" {
load_balancer_arn = aws_lb.pjhalb.arn
port = 80
protocol = "HTTP"
# By default, return a simple 404 page
default_action {
type = "fixed-response"
fixed_response {
content_type = "text/plain"
message_body = "404: page not found - T101 Study"
status_code = 404
}
}
}
resource "aws_lb_target_group" "pjhalbtg" {
name = "t101-alb-tg"
port = 80
protocol = "HTTP"
vpc_id = aws_vpc.pjhvpc.id
health_check {
path = "/"
protocol = "HTTP"
matcher = "200-299"
interval = 5
timeout = 3
healthy_threshold = 2
unhealthy_threshold = 2
}
}
resource "aws_lb_listener_rule" "pjhalbrule" {
listener_arn = aws_lb_listener.pjhhttp.arn
priority = 100
condition {
path_pattern {
values = ["*"]
}
}
action {
type = "forward"
target_group_arn = aws_lb_target_group.pjhalbtg.arn
}
}
output "pjhalb_dns" {
value = aws_lb.pjhalb.dns_name
description = "The DNS Address of the ALB"
}
EOT
2-3. 배포 완료 후 curl 접속 확인
# 배포
terraform plan && terraform apply -auto-approve
# ALB DNS주소로 curl 접속 확인
ALBDNS=$(terraform output -raw pjhalb_dns)
for i in {1..100}; do curl -s http://$ALBDNS/ ; done | sort | uniq -c | sort -nr
51 <h1>RegionAz(apne2-az1) : Instance ID(i-01ddce72aecf6bde4) : Private IP(10.10.1.209) : Web Server</h1>
49 <h1>RegionAz(apne2-az3) : Instance ID(i-01681d5b1e5704589) : Private IP(10.10.2.63) : Web Server</h1>
# EC2 최소 2대 => 3대로 증가 수정
sed -i -e 's/min_size = 2/min_size = 3/g' asg.tf
# 배포
terraform plan && terraform apply -auto-approve
# ALB DNS주소로 curl 접속 확인
for i in {1..100}; do curl -s http://$ALBDNS/ ; done | sort | uniq -c | sort -nr
34 <h1>RegionAz(apne2-az3) : Instance ID(i-01aa22c310a10aeb6) : Private IP(10.10.2.243) : Web Server</h1>
34 <h1>RegionAz(apne2-az3) : Instance ID(i-01681d5b1e5704589) : Private IP(10.10.2.63) : Web Server</h1>
32 <h1>RegionAz(apne2-az1) : Instance ID(i-01ddce72aecf6bde4) : Private IP(10.10.1.209) : Web Server</h1>
# 강제로 EC2 1대 삭제 후 curl 접속 확인 : 종료 확인 후 치료를 위한 인지까지 3분 정도 시간 소요 - (자가치료) 알아서 1대 추가
50 <h1>RegionAz(apne2-az3) : Instance ID(i-01681d5b1e5704589) : Private IP(10.10.2.63) : Web Server</h1>
50 <h1>RegionAz(apne2-az1) : Instance ID(i-01ddce72aecf6bde4) : Private IP(10.10.1.209) : Web Server</h1>
- 3~5분후 확인
# curl 확인
for i in {1..100}; do curl -s http://$ALBDNS/ ; done | sort | uniq -c | sort -nr
34 <h1>RegionAz(apne2-az3) : Instance ID(i-01681d5b1e5704589) : Private IP(10.10.2.63) : Web Server</h1>
33 <h1>RegionAz(apne2-az3) : Instance ID(i-08dce6b47f8c63eca) : Private IP(10.10.2.225) : Web Server</h1>
33 <h1>RegionAz(apne2-az1) : Instance ID(i-01ddce72aecf6bde4) : Private IP(10.10.1.209) : Web Server</h1>
2-4. 삭제
destroy 는 ‘실행 취소(undo)’를 할 수 없으니, 실제 운영 환경에서는 주의해서 실행해야 함
terraform destroy -auto-approve
728x90
반응형
'Terraform' 카테고리의 다른 글
3주차 - 기본 사용 3/3 & 프로바이더 (0) | 2023.07.21 |
---|---|
2주차 - 테라폼 기본 사용 2/3 (0) | 2023.07.12 |
1주차 - 테라폼 기본 사용 1/2 (0) | 2023.07.05 |
[CHAPTER 1&2] 기초 (0) | 2023.05.23 |
Comments