Назад | Перейти на главную страницу

AWS ECS: требуется руководство по архитектурному подходу, контейнерным сетям

Я пытаюсь найти лучший подход к развертыванию приложения на основе докеров в ECS.
Я попытался набросать общую топографию ниже.

И ниже мой файл для создания докеров:

version: '3'

services:
  python-app:
    build:
      context: .
      dockerfile: ./docker/Dockerfile
    restart: always
    container_name: "python-app"
    shm_size: 2G
    tty: true
    volumes:
      - ./src:/app/src
      - ./.env:/app/.env
      - ./store:/app/store
    ports:
      - "3000:3000"
    networks:
      - bb-network

  proxy-rest:
    build:
      context: .
      dockerfile: docker/Dockerfile.PROXY.REST
    restart: always
    container_name: "proxy-rest"
    ports:
      - "5000:5000"
    networks:
      - app-network

  mongo:
    container_name: "mongo"
    image: mongo:latest
    restart: always
    ports:
      - "27017:27017"
    environment:
      MONGO_INITDB_ROOT_USERNAME: $MONGO_USER
      MONGO_INITDB_ROOT_PASSWORD: $MONGO_SECRET
    networks:
      - app-network
    volumes:
      - ./docker/mongodata:/data/db

  client:
    build:
      context: .
      dockerfile: docker/Dockerfile.CLIENT
    container_name: "bb-client"
    ports:
      - "8080:8080"
    environment:
      - ENV=staging
    networks:
      - app-network


networks:
    bb-network:
      driver: bridge

У меня есть другие приложения, успешно развернутые в ECS, используя EC2, с ALB. Однако они были еще более грубыми. Т.е. пара контейнеров с одним публично доступным портом и одной серверной службой. Все это делается через графический интерфейс AWS. Это одна задача на один сервис, на один балансировщик нагрузки на целевую группу.

В этом случае я начал так же и создал:

Однако я быстро обнаружил, что вы не можете открыть / направить несколько портов в разные контейнеры в рамках одной и той же задачи.
С тех пор я обнаружил:
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/register-multiple-targetgroups.html

В нем говорится, что это возможно, но не через графический интерфейс администратора AWS, поэтому в дальнейшем я переключился на esc-cli / aws-cli. Если это не ясно из диаграммы, разные контейнеры должны взаимодействовать друг с другом и дополнительно открывать различные порты для Интернета.

У меня такой вопрос: каков общий (и простой!) Подход / разбивка того, как я должен это организовать?

Некоторые другие подробности: