在 AWS ECS 上部署 Flask 应用程序

Deploying flask application on AWS ECS

我按照 youtube 上提供的 Corey Schafer 视频创建了一个示例烧瓶应用程序。我能够 运行 在本地环境中运行良好。我想使用 fargate 选项将它部署在 AWS ECS 集群中,这样我就不必管理 EC2 实例。我能够使用 Terraform 构建示例集群和服务。下面是代码(缺少应用程序负载均衡器部分)

provider "aws" {
  region = "us-east-2"
}


resource "aws_ecs_cluster" "sample_cluster" {
  name = "sample_cluster"

  setting {
    name  = "containerInsights"
    value = "enabled"
  }
}

data "aws_iam_role" "ecs_task_execution_role" {
  name = "ecsTaskExecutionRole"
}

resource "aws_ecs_task_definition" "sample_cluster_task_definition" {
  container_definitions = file("templates/container_definition.json")
  family                = "sample_terraform_task_definition"
  cpu                   = 256
  memory                = 512
  execution_role_arn    = data.aws_iam_role.ecs_task_execution_role.arn
  network_mode          = "awsvpc"
  runtime_platform {
    operating_system_family = "LINUX"
    cpu_architecture        = "X86_64"
  }
  requires_compatibilities = ["FARGATE"]
}

data "aws_subnets" "private" {
  filter {
    name   = "vpc-id"
    values = ["vpc-ac6d734yrbfjd7ebc7"]
  }

}




resource "aws_ecs_service" "sample_service" {
  name            = "sample_ecs_service"
  cluster         = aws_ecs_cluster.sample_cluster.arn
  task_definition = aws_ecs_task_definition.sample_cluster_task_definition.arn
  launch_type     = "FARGATE"
  desired_count = 1
  network_configuration {
    subnets          = toset(data.aws_subnets.private.ids)
    security_groups = ["sg-0044394c6e4b485738762f7"]
    assign_public_ip = "true"
  }
  depends_on = [aws_ecs_task_definition.sample_cluster_task_definition,data.aws_subnets.private ,aws_ecs_cluster.sample_cluster]
}

我正在努力解决如何(如果需要)在 AWS 中配置 Web 服务器,因为本地环境有一个不适合生产环境的开发服务器。所以我的问题是

  1. 对于网络服务器,例如nginx 是单独的 docker 容器还是 AWS 是否有任何可用作 Web 服务器的托管服务。例如,我使用 AWS RDS 而不是单独的数据库容器。
  2. 如果需要单独的 docker 容器,它是相同任务定义的一部分还是不同。推荐哪一款

我只是想让部署更像实际的生产设置,所以如果有人在生产中的 aws ecs 中部署了 Flask 应用程序,请帮帮我。谢谢

既然你问的是“最佳实践”,那么通常认为 运行 Nginx 在 Flask 之前是最佳实践。要在 ECS/Fargate 上完成此操作,您需要在同一 ECS 任务中 运行 两个容器(在同一任务定义中定义它们)。您可以将 Nginx 配置为在 127.0.0.1:5000(或 Flask 使用的任何端口)代理到 Flask,因为 multiple containers in the same task share 127.0.0.1 in Fargate.