Рубрики
Без рубрики

Преобразование файла Docker-Compose в определение задачи AWS

В предыдущем посте мы узнали, как создать архитектуру AWS для поддержки нашего приложения Python … Tagged с AWS, Python, DevOps.

Разверните контейнерный Python для AWS, используя действия GitHub. (3 серии деталей)

В предыдущем посте мы узнали, как создать архитектуру AWS для поддержки нашего приложения Python. В этом посте мы узнаем, как создать определение задачи из файла докера.

Перед тем, как погрузиться в учебник, давайте определим, что такое файл с композитом Docker, и вспомнить из предыдущего учебника, что является определением задачи.

Что такое Docker-Compose?:

Из этого Учебник , Docker-Compose определяется как:

Docker Compose – это способ создать воспроизводимые контейнеры Docker, используя файл конфигурации вместо очень длинных команд Docker. Используя структурированный файл конфигурации, ошибки легче набрать, а контейнерные взаимодействия легче определить.

Что такое определение задачи:

Давайте вспомним, что такое определение задачи: это просто спецификация. Вы используете его для определения одного или нескольких контейнеров, которые вы хотите запустить вместе, наряду с другими деталями, такими как переменные среды, требования процессора/памяти и т. Д.

Из двух определений мы видим, что роль определения задачи похожа на роль файла с композитом Docker.

Поэтому мы будем использовать файл с композитом Docker для создания задачи.

Настоящий материал, преобразование:

Чтобы сделать нашу трансформацию, мы можем вернуться к проэкт Мы представили в первой части и CD в каталог проекта.

Мы будем использовать инструмент Python под названием Контейнер-трансформ для достижения нашей трансформации.

Вы можете установить его в виртуальную среду своего проекта:

PIP установить контейнер-трансформу

С установленным инструментом мы можем теперь использовать его для генерации файла определения задачи.

Кошка Docker-Compose.yml | контейнер-трансформ -v> .aws/задача-definition.json

Вывод этой команды отправляется в файл .AWS/TASK-DEFINITION.JSON , если все прошло хорошо, у вас будет что -то подобное:

{

"containerDefinitions": [

{

"command": [

"celery",

"-A",

"celery_factory:celery",

"beat",

"-S",

"redbeat.RedBeatScheduler",

"--loglevel=info"

],

"essential": true,

"image": "task_runner",

"links": [

"redis"

],

"name": "celery-beat"

},

{

"command": [

"celery",

"worker",

"-A",

"celery_factory:celery",

"--loglevel=info",

"-E"

],

"essential": true,

"image": "task_runner",

"links": [

"redis"

],

"name": "celery-worker"

},

{

"command": [

"./start_flower"

],

"environment": [

{

"name": "FLOWER_PORT",

"value": "5556"

}

],

"essential": true,

"image": "task_runner",

"links": [

"redis"

],

"name": "flower",

"portMappings": [

{

"containerPort": 5556,

"hostPort": 5556

}

]

},

{

"essential": true,

"image": "redis",

"name": "redis"

}

],

"family": "",

"volumes": []

}

Что здесь отметить; Все услуги, которые у нас есть в файле докеров, теперь находятся в Контейнердефиниции разделы определения нашей задачи. Однако этот файл еще не полностью завершен. Нам придется обновить его с другими ключами, такими как сетевой режим, ресурсы, роль выполнения, которую мы создали ранее, и параметр журнала для отправки журналов в CloudWatch. Давайте отредактируем файл, добавив следующее. Нам также нужно удалить Ссылка Ключ из каждого определения контейнера.

"requiresCompatibilities": [



"FARGATE"



],



"inferenceAccelerators": [],

"volumes": [],



"networkMode": "awsvpc",



"memory": "512",



"cpu": "256",



"executionRoleArn": "arn:aws:iam::Your-id-from-aws:role/ecs-devops-execution-role",



"family": "ecs-devops-task-definition",



"taskRoleArn": "",



"placementConstraints": []

Что это за элементы?

  • Требуется совместимость : Здесь мы указываем, что наш тип запуска имеет тип Fargate.

  • NetworkMode : Это режим сети Docker для использования для контейнеров в задаче. AWS предлагает следующие сетевые режимы: Нет , мост , AWSVPC и хост Анкет В типе запуска Fargate, AWSVPC Сетевой режим требуется. С помощью этой настройки задача выделяется свой собственный эластичный сетевой интерфейс (ENI) и основной частный адрес IPv4. Это дает задаче те же сетевые свойства, что и экземпляры Amazon EC2. Узнайте больше о сетевом режиме Здесь Анкет

  • память : Является ли сумма оперативной памяти для распределения на контейнеры, если в вашем кластере нет каких -либо зарегистрированных экземпляров контейнеров с доступной запрашиваемой памятью, задача потерпит неудачу.

  • Процессор : Количество единиц процессора, которые будет зарезервировать контейнер Amazon ECS для контейнера.

  • CERSUTIONROLEARN : Имя ресурса Amazon (ARN) роли выполнения задачи, которая дает Amazon Как вы можете видеть, это роль IAM, которую мы создали в нашем стеке CloudFormation.

  • Семья : Имя определения задачи, которое мы создали в стеке CloudFormation.

В каждом определении контейнера нам нужно добавить этот код для отправки журналов контейнеров в CloudWatch.

"logConfiguration": {



"logDriver": "awslogs",



"options": {



"awslogs-group": "ecs-devops-service-logs-groups",



"awslogs-region": "us-east-2",



"awslogs-stream-prefix": "celery-beat"



}



},

Добавьте эти строки в каждый сервис AWS и измените awslogs-stream-prefix Ключ и поместите имя контейнера. Чтобы узнать больше о параметрах определения задач, проверьте Документация AWS

С этими параметрами отредактированы, мы получим следующее определение задачи.

{

"containerDefinitions": [

{

"command": [

"celery",

"-A",

"celery_factory:celery",

"beat",

"--scheduler=redbeat.RedBeatScheduler",

"--loglevel=debug"

],

"essential": true,

"image": "task_runner",

"environment": [

{

"name": "CELERY_BROKER_URL",

"value": "redis://127.0.0.1:6379"

}

],

"name": "celery-beat",

"logConfiguration": {

"logDriver": "awslogs",

"options": {

"awslogs-group": "ecs-devops-service-logs",

"awslogs-region": "us-east-2",

"awslogs-stream-prefix": "celery-beat"

}

}

},

{

"command": [

"celery",

"-A",

"celery_factory:celery",

"worker",

"--loglevel=error",

"-E"

],

"essential": true,

"image": "task_runner",

"name": "celery-worker",

"environment": [

{

"name": "CELERY_BROKER_URL",

"value": "redis://127.0.0.1:6379"

}

],

"logConfiguration": {

"logDriver": "awslogs",

"options": {

"awslogs-group": "ecs-devops-service-logs",

"awslogs-region": "us-east-2",

"awslogs-stream-prefix": "celery-worker"

}

}

},

{

"command": ["./start_flower"],

"environment": [

{

"name": "FLOWER_PORT",

"value": "5556"

},

{

"name": "CELERY_BROKER_URL",

"value": "redis://127.0.0.1:6379"

}

],

"essential": true,

"image": "task_runner",

"logConfiguration": {

"logDriver": "awslogs",



"options": {

"awslogs-group": "ecs-devops-service-logs",



"awslogs-region": "us-east-2",



"awslogs-stream-prefix": "celery-flower"

}

},

"name": "flower",

"portMappings": [

{

"containerPort": 5556,

"hostPort": 5556

}

]

},

{

"essential": true,

"image": "redis",

"name": "redis",

"portMappings": [

{

"containerPort": 6379

}

],

"logConfiguration": {

"logDriver": "awslogs",

"options": {

"awslogs-group": "ecs-devops-service-logs",



"awslogs-region": "us-east-2",



"awslogs-stream-prefix": "celery-redis"

}

}

}

],

"requiresCompatibilities": ["FARGATE"],



"inferenceAccelerators": [],

"volumes": [],

"networkMode": "awsvpc",

"memory": "512",

"cpu": "256",

"executionRoleArn":"arn:aws:iam::****youraws id*****:role/ecs-devops-execution-role",

"family": "ecs-devops-task-definition",

"taskRoleArn": "",

"placementConstraints": []

}

В этом уроке мы узнали, как использовать инструмент преобразования контейнеров, чтобы преобразовать файл с композитом Docker в определение задачи AWS.

С нашим определением задачи мы теперь можем перейти к третьей части этого учебника, где мы будем использовать определение задачи для развертывания наших контейнеров в нашу стек CloudFormation, созданный в первой части, используя действия GitHub.

Тогда увидимся.

Разверните контейнерный Python для AWS, используя действия GitHub. (3 серии деталей)

Оригинал: “https://dev.to/espoir/converting-a-docker-compose-file-to-an-aws-task-definition-3poc”