ECS multiple target groups ์ค์ ์ผ๋ก ALB response time ์ธก์ ๊ฐ์
- #ECS
- #multiple target groups
- #ALB
- #response time
๋ค์ด๊ฐ๋ฉฐ
์๋ ํ์ธ์. ๋ ธ๋จธ์ค์์ ๋ฐฑ์๋ ์๋น์ค๋ฅผ ๊ฐ๋ฐํ๊ณ ์๋ ์ ๊ทผ์๋ผ๊ณ ํฉ๋๋ค.
fromm ๋ฉ์์ง ์ฑ์ ์ํฐ์คํธ์ ํ๋ผ์ด๋น ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ ์๋น์ค์
๋๋ค.
์๋น์ค์ ํน์ฑ์ ํ์์๋ ์ ์ ํ๋ค๊ฐ๋ ์ํฐ์คํธ๊ฐ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ฉด ์์๊ฐ์ ํธ๋ํฝ์ด ๋ชฐ๋ ค๋ค๊ฒ ๋ฉ๋๋ค.
์๋น์ค๊ฐ ์ ์ ๋ ์ปค์ง๊ณ , ํธ๋ํฝ์ด ๋์ด๋๋ฉด์ ECS/ALB ๊ด๋ จ ์งํ ํ์ธ์ด ์ ์ ๋ ์ค์ํด์ง๊ธฐ ์์ํ์ต๋๋ค.
๋ชฐ๋ ค์ค๋ ํธ๋ํฝ
fromm ์๋น์ค ์ด์ฐฝ๊ธฐ์๋ AWS console์ ํตํด ECS/ALB๋ฅผ ์ง์ ์์ฑํ๊ณ , ์ฃผ์ ์งํ๋ CloudWatch ๋์๋ณด๋์ ECS CPU/Memory ์ฌ์ฉ๋ฅ , ALB request count / response time ๋ฑ์ ์ค์ ํด์ ๋ชจ๋ํฐ๋ง์ ํ์ฉํ๊ณ ์์์ต๋๋ค.
ํธ๋ํฝ์ด ์ ์ฐจ ๋์ด๋๊ณ , ๋ํ ์ํฐ์คํธ์ ์
์ฃผ๋ก ์ธํด ์คํ์ดํฌ ์ฑ์ผ๋ก ๋ชฐ๋ ค์ฌ ํธ๋ํฝ์ ๋ํ ๋์์ด ์ข ๋ ์ค์ํด์ก์ต๋๋ค.
๊ด๋ จํด์ ๋ถํํ
์คํธ๋ฅผ ์งํํ๊ณ , ECS/RDS ๋ฑ์ ์คํ์ ์กฐ์ ํ ์ ์์์ต๋๋ค.
(๋ถํํ
์คํธ๋ฅผ ์งํํ ๊ณผ์ ์ ์ ํฌ ๊ธฐ์ ๋ธ๋ก๊ทธ์ ์ด์ ๊ธ์์ ํ์ธํ์ค ์ ์์ต๋๋ค.)
์ด๋ค ์งํ๋ฅผ ๋ด์ผ ํ ๊น์?
ํธ๋ํฝ์ ๋๋นํด์ ECS ์๋ฒ๋ฅผ ๋๋ ค๋๊ธด ํ์ง๋ง, ์ค์ ๋ก ์ฌ์ฉ์๋ค์ ์ฌ์ฉ์ฑ์ ๋ฌธ์ ๊ฐ ์๋์ง, ์๋ฒ์ ๊ท๋ชจ๊ฐ ์ ์ ํ ์์ค์ธ์ง ํ๋ณํ ์งํ๊ฐ ํ์ํ์ต๋๋ค.
ECS CPU/Memory ์ฌ์ฉ๋ฅ ์ 1์ฐจ๋ก ํ๋จํ ์ ์๋ ์งํ๋ก ์ฌ์ฉํ ์ ์์์ต๋๋ค๋ง,
์ค์ ์ฌ์ฉ์๋ค์๊ฒ ์ํํ๊ฒ ์๋น์ค๋๊ณ ์๋์ง๋ฅผ ๋ณด๋ ค๋ฉด ALB์ response time์ ์ถ์ ํ ํ์๊ฐ ๋ณด์์ต๋๋ค.
ALB์ response time์ ๊ทธ๋์ ํฌ๊ฒ ์ฐธ๊ณ ํ๊ณ ์์ง ๋ชปํ์๋๋ฐ,
๊ทธ ์ด์ ๋ ์ด๋ฏธ์ง๋ ๋์์ ๋ฑ ์
๋ก๋ api๋ ๋ฒ์ญ ํน์ App ๋ง์ผ ๋ฑ ์ธ๋ถ ์๋น์ค๋ฅผ ํธ์ถํ๋ api ๋ค์ด response time ์งํ์ ์์ฌ ์๊ธฐ ๋๋ฌธ์ด์์ต๋๋ค.
์ค์ ์ฌ์ฉ์์ ์์ฒญ์ด ๋๋ฆฌ๊ฒ ์๋ต์ด ๊ฐ ๊ฒ์ธ์ง, ์ ๋ก๋ api ๋ฑ์ผ๋ก ์ธํด response time์ด ๋๊ฒ ๋์จ ๊ฒ์ธ์ง๊ฐ ๊ตฌ๋ถ์ด ์ ๋์๊ธฐ ๋๋ฌธ์, endpoint ๋ณ๋ก response time์ ๋ถ๋ฆฌํด์ ๋ด์ผ ํ ํ์๊ฐ ์์์ต๋๋ค.
์ด์ ์ ์์ฌ์ ๋ณ๋ก ๋์์ด ์๋๋ response time.png
ECS์ multiple target groups ์ค์
CloudWatch ๋์๋ณด๋์ ALB response time์ endpoint ๋ณ๋ก ๊ฐ๊ฐ ๋ณด๊ธฐ ์ํด์๋, ALB์ target group์ ๋๋๋ ๊ฒ์ด ์ ์ผ ์ ํฉํด ๋ณด์์ต๋๋ค. ALB์ target group์ ๋๋๊ธฐ ์ํด์๋ ECS์ multiple target groups ์ค์ ์ด ํ์ํฉ๋๋ค.
์์์ ์ด๋ฐ์ ECS๋ฅผ console๋ก ์ง์ ์์ฑํ์๋ค๊ณ ๋ง์์ ๋๋ ธ๋๋ฐ์. console ์์์๋ multiple target groups ์ ์ค์ ํ ์ ์์์ต๋๋ค.
์ด๋ฐ์๋ console๋ก ๊ด๋ฆฌ๋ฅผ ํ๊ณ ์์์ง๋ง, ์ผ๋ง ์ ๋ถํฐ๋ terraform์ ๋์
ํด์ ECS๋ฅผ ๊ด๋ฆฌํด ์ค๊ณ ์์์ต๋๋ค.
terraform์์๋ ์ฝ๊ฒ multiple target groups ์ค์ ์ด ๊ฐ๋ฅํฉ๋๋ค.
# target group ์ค์
resource "aws_lb_target_group" "tg1" {
name = "tg1"
port = 80
protocol = "HTTP"
vpc_id = data.aws_vpc.env.id
target_type = "ip"
}
resource "aws_lb_target_group" "tg2" {
name = "tg2"
port = 80
protocol = "HTTP"
vpc_id = data.aws_vpc.env.id
target_type = "ip"
}
# listener ์ค์
resource "aws_lb_listener" "lb_listener" {
...
default_action {
type = "forward"
target_group_arn = aws_lb_target_group.tg1.arn
}
}
resource "aws_lb_listener_rule" "listener_rule" {
listener_arn = aws_lb_listener.lb_listener.arn
priority = 100
action {
type = "forward"
target_group_arn = aws_lb_target_group.tg2.arn
}
condition {
path_pattern {
values = ["/upload", "/translation", "/market"]
}
}
}
# ecs service ์ค์
resource "aws_ecs_service" "ecs_service" {
...
load_balancer {
target_group_arn = aws_lb_target_group.tg1.arn
container_name = "fromm_container"
container_port = 80
}
load_balancer {
target_group_arn = aws_lb_target_group.tg2.arn
container_name = "fromm_container"
container_port = 80
}
}
์ ๋ก๋ api / ์ธ๋ถ ์์ฒญ api ๋ฑ์ endpoint๋ฅผ ๋ณ๋์ target group์ผ๋ก ์ค์ ํ๊ณ , ๋๋จธ์ง ์๋น์ค์ ์ฃผ์ api endpoint ๋ค์ ๋ ๋ค๋ฅธ target group์ผ๋ก ๋ฌถ์ด์, target group๋ณ response time์ ์ถ์ ํ ์ ์๊ฒ ๋์์ต๋๋ค.
์ค์ ์ดํ response time.png
์ด์ ๋ ALB์ request count ์ถ์ด๋ฅผ ๋ณด๋ฉด์, ํธ๋ํฝ์ด ๋ชฐ๋ ธ์ ๋ ECS CPU ์ฌ์ฉ๋ฅ / ALB response time ๋ฑ์ ํ์ธํ๋ฉด์ ๊ด๋ฆฌํ๊ณ ์์ต๋๋ค.
๋ถํํ
์คํธ๋ฅผ ํตํด ์กฐ๊ธ ๊ณผํ๊ฒ ์ ์ฉํ๋ ์๋ฒ ๊ท๋ชจ๋ ์ ์ ์์ค์ผ๋ก ๋ด๋ฆด ์ ์๊ฒ ๋์๊ณ , ๊ทธ์ ๋ฐ๋ฅธ ๋น์ฉ ์ ๊ฐ์๋ ๋์์ด ๋์์ต๋๋ค.
๋ง๋ฌด๋ฆฌ
๋ชจ๋ํฐ๋ง์ ์์ง ๊ฑธ์๋ง ์์ค์ด์ง๋ง, ์ ์ ๋ ์ข์ ๋ฐฉํฅ์ ์ฐพ์๊ฐ๊ณ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์๋น์ค๋ฅผ ๋ง๋ค๊ณ ์ด์ฉํ๋ฉด์ ๋ง์ ๋์์ ์ฃผ๊ณ ๊ณ์ ๊ฐ๋ฐํ ๋๋ฃ๋ค์๊ฒ ์ด ๊ธ์ ๋น์ด ๊ฐ์ฌ์ ๋ง์์ ์ ํ๊ณ ์ถ์ต๋๋ค.
๋๊น์ง ์ฝ์ด์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค~ ๐