Два основных вопроса с кодом terraform.
- Альбом для Ecs fargate предназначен для маршрутизации в другие зоны доступности? или маршрутизация в контейнеры
- Если я создаю подсеть на основе номера зоны доступности (us-east-2a, 2b, 2c, поэтому число равно 3 и создаю 3 подсети) и сопоставляю ее с кластером ecs с помощью alb, применяется ли зона доступности?
Я пытаюсь создать инфраструктуру, как показано на изображении
resource "aws_vpc" "cluster_vpc" {
tags = {
Name = "ecs-vpc"
}
cidr_block = "10.30.0.0/16"
}
data "aws_availability_zones" "available" {
}
resource "aws_subnet" "cluster" {
vpc_id = aws_vpc.cluster_vpc.id
count = length(data.aws_availability_zones.available.names)
cidr_block = "10.30.${10 + count.index}.0/24"
availability_zone = data.aws_availability_zones.available.names[count.index]
tags = {
Name = "ecs-subnet"
}
}
resource "aws_internet_gateway" "cluster_igw" {
vpc_id = aws_vpc.cluster_vpc.id
tags = {
Name = "ecs-igw"
}
}
resource "aws_route_table" "public_route" {
vpc_id = aws_vpc.cluster_vpc.id
route {
cidr_block = "0.0.0.0/0"
gateway_id = aws_internet_gateway.cluster_igw.id
}
tags = {
Name = "ecs-route-table"
}
}
resource "aws_route_table_association" "to-public" {
count = length(aws_subnet.cluster)
subnet_id = aws_subnet.cluster[count.index].id
route_table_id = aws_route_table.public_route.id
}
resource "aws_ecs_cluster" "staging" {
name = "service-ecs-cluster"
}
resource "aws_ecs_service" "staging" {
name = "staging"
cluster = aws_ecs_cluster.staging.id
task_definition = aws_ecs_task_definition.service.arn
desired_count = 1
launch_type = "FARGATE"
network_configuration {
security_groups = [aws_security_group.ecs_tasks.id]
subnets = aws_subnet.cluster[*].id
assign_public_ip = true
}
load_balancer {
target_group_arn = aws_lb_target_group.staging.arn
container_name = var.app_name
container_port = var.container_port
}
resource "aws_lb" "staging" {
name = "alb"
subnets = aws_subnet.cluster[*].id
load_balancer_type = "application"
security_groups = [aws_security_group.lb.id]
access_logs {
bucket = aws_s3_bucket.log_storage.id
prefix = "frontend-alb"
enabled = true
}
tags = {
Environment = "staging"
Application = var.app_name
}
}
... omit like lb_target, or specific components
Есть ли проблемы с вашим кодом, или вы просто ищете ответы на два своих вопроса? — person KIM schedule 30.12.2020
оба код работает хорошо, но я не уверен в своем коде, хотя он работает. — person KIM schedule 30.12.2020
@Marcin, я намерен создать инфраструктуру с тремя зонами доступности, а также развернуть aws fargate в трех зонах доступности. но я думаю, что мой код просто создает три зоны доступности и не использую их — person KIM schedule 30.12.2020
Если кластер ALB и ECS используют одни и те же подсети (и кажется, что они взяты из кода Terraform), тогда он должен создать все, как показано на схеме. — person KIM schedule 30.12.2020
@MarkoE, спасибо за ответ 1. если us-east-2a не работает, us-east-2b активируется автоматически, и alb будет направлять запросы на us-east-2b? 2. Это вызовет повышение тарифов? 3. aws fargate может сам маршрутизировать трафик? (если alb используется для маршрутизации зоны доступности, как aws направляет запросы маршрута?) — person KIM schedule 30.12.2020
Не совсем. Он должен предоставить единую фиксированную конечную точку (URL) для вашей службы ECS. ALB автоматически распределяет входящее соединение из Интернета по вашим сервисам ECS. Они могут находиться в одной или нескольких зонах доступности. В вашем случае это только 1 AZ, так как вы используете
desired_count = 1
. Это означает, что у вас будет только 1 сервис ECS в одной зоне доступности.Да, потому что ваш ALB включен для тех же подсетей, что и ваша служба ECS через
aws_subnet.cluster[*].id
. Но, как объяснялось в первом вопросе, у вас будет только 1 услуга в одной зоне доступности.Как объяснялось ранее, ваш
desired_count = 1
, поэтому у вас не будет услуг ECS в 3 зонах доступности.Кроме того, вы создаете только общедоступные подсети, в то время как ваша схематическая диаграмма показывает, что службы ECS должны находиться в частных.
большой! если я увеличиваю желаемое_счет до 3 или применяю автоматическое масштабирование, работает АЗ? — person KIM; 30.12.2020
и. Приведет ли это к увеличению тарифов? Я немного сбит с толку, что если зона доступности работает, служба aws fargate должна активировать каждую зону доступности. это означает, что если у меня есть два AZ (us-east-2a, us-east-2b), также у меня есть два фаргейта ecs, верно? — person KIM; 30.12.2020
@KIM Да, 3 услуги ecs будут распределены по нескольким зонам доступности. Вы можете изменить
desired_count
на 3 и проверить детали ваших задач в вашем сервисе ECS. Вы можете подтвердить, в какие подсети они были помещены. — person KIM; 30.12.2020@KIM Я не уверен, что вы имеете в виду во втором комментарии? Вы можете иметь столько сервисов ECS Fargate, сколько захотите. Вы можете разместить их все в одной зоне доступности или в нескольких зонах доступности. У вас может быть больше услуг, чем есть АЗ. — person KIM; 30.12.2020
несколько AZ могут использовать один фаргейт ecs? — person KIM; 30.12.2020
Я понимаю, что если одна зона доступности сломалась, другая зона доступности работает, и это может быть сделано с помощью ALB (потому что alb может направить ее в другую доступную зону), и каждая зона доступности дублирует AWS ECS Fargate. — person KIM; 30.12.2020
@KIM С точки зрения ALB, если вы включите ALB для всех зон доступности, то да, все они могут направлять трафик через все зоны доступности в одну службу ECS, поскольку ALB по умолчанию использует межзональную балансировку нагрузки. — person KIM; 30.12.2020
Позвольте нам продолжить это обсуждение в чате. — person KIM; 30.12.2020