Я новичок в Amazon ECS и хотел бы знать, как настроить сервисы, чтобы легко масштабировать один контейнер вверх / вниз.
Вот моя архитектура проекта:
На данный момент я только что создал одно определение задачи со всеми моими контейнерами, а в моем кластере у меня есть только одна служба. У меня также есть балансировщик нагрузки в API (так что я могу получить к нему доступ с веб-сайта через DNS-имя).
Отлично работает, но я хочу иметь возможность запускать больше рабочих процессов, не запуская все остальное, и, похоже, я не могу это сделать прямо сейчас (поправьте меня, если я ошибаюсь). Итак, у меня есть несколько вопросов:
Вот мое текущее определение задачи:
{
"taskDefinitionArn": "arn:aws:ecs:ap-southeast-2:347930943102:task-definition/Flipendo:4",
"revision": 4,
"containerDefinitions": [
{
"volumesFrom": [],
"portMappings": [],
"command": [],
"environment": [
],
"essential": true,
"entryPoint": [],
"links": [
"rabbitmq"
],
"mountPoints": [],
"memory": 2048,
"name": "worker",
"cpu": 4096,
"image": "flipendo/worker"
},
{
"volumesFrom": [],
"portMappings": [],
"command": [],
"environment": [],
"essential": true,
"entryPoint": [],
"links": [],
"mountPoints": [],
"memory": 2048,
"name": "rabbitmq",
"cpu": 2048,
"image": "rabbitmq"
},
{
"volumesFrom": [],
"portMappings": [
{
"hostPort": 443,
"containerPort": 3000
}
],
"command": [],
"environment": [
],
"essential": true,
"entryPoint": [],
"links": [
"rabbitmq"
],
"mountPoints": [],
"memory": 2048,
"name": "api",
"cpu": 2048,
"image": "flipendo/api"
},
{
"volumesFrom": [],
"portMappings": [
{
"hostPort": 80,
"containerPort": 3000
}
],
"command": [],
"environment": [
{
"name": "API_PORT",
"value": "443"
},
{
"name": "API_ADDR",
"value": "load balancer dns server"
}
],
"essential": true,
"entryPoint": [],
"links": [
"api"
],
"mountPoints": [],
"memory": 1024,
"name": "website",
"cpu": 1024,
"image": "flipendo/website"
}
],
"volumes": [],
"family": "Flipendo"
}
Большое спасибо.
Do I need to create separate task definitions?
да
Do I need to create separate services?
Не обязательно. Вы можете просто запускать задачи самостоятельно, без «сервиса». Но «сервис» допускает связь с Load Balancer, автоматическим масштабированием приложений, а также без простоев развертываний.
Единственный способ «Docker link» ваши контейнеры - это определить их в одном определении задачи, как вы это делаете сейчас. Таким образом, ECS разместит все контейнеры в одном экземпляре. Разделение на разные задачи означает отсутствие связывания, поскольку контейнеры могут запускаться в разных экземплярах.
Поэтому, если вы решите разделить их, тогда каждый контейнер должен будет подключаться к другим контейнерам через «служебные» URL-адреса.
Мой совет:
Таким образом, вы можете масштабировать каждую «услугу» индивидуально.
Если вы решите остаться с rabbitMQ, вам придется использовать ELB для контейнера rabbitMQ и вручную связать порт контейнера, используемый rabbitMQ, с ELB.
ALB автоматически обнаружит порты контейнеров, используемые вашими службами.
См. Здесь для получения дополнительных сведений об ALB и ECS: