Задача: запустить WordPress на AWS ECS.
Создание кластера и общие сведения по AWS ECS есть тут>>>.
Далее будет рассмотрено:
- создание кластера;
- создание EC2 интанса;
- добавление task definition;
- создание task;
- запуск задачи с WordPress.
Содержание
Кластер
Создаём кластер:
$ aws ecs create-cluster --cluster-name wordpress { "cluster": { "clusterArn": "arn:aws:ecs:eu-west-1:264418146286:cluster/wordpress", "clusterName": "wordpress", "status": "ACTIVE", "registeredContainerInstancesCount": 0, "runningTasksCount": 0, "pendingTasksCount": 0, "activeServicesCount": 0 } }
ECS Container Instance
По умолчанию – новые интасы добавляются в кластер default.
Что бы добавить его в созданный только что кластер – создаём файл user-data
с таким содержимым:
#!/bin/bash echo ECS_CLUSTER=wordpress >> /etc/ecs/ecs.config
AMI ID с ECS агентом можно найти тут>>>.
Запускаем 1 t2.medium
:
$ aws ec2 run-instances --image-id ami-ba346ec9 --key-name my-cluster --instance-type t2.medium --iam-instance-profile Name=ecsInstanceRole --user-data file://wpdata.sh
Ждём, когда поднимется инстанс и проверяем:
$ aws ecs list-container-instances --cluster wordpress { "containerInstanceArns": [ "arn:aws:ecs:eu-west-1:264418146286:container-instance/a2de84be-5b6c-4d9c-aa16-35a1c54b2141" ] }
Task definition
Далее – создаём task definition, в котором описывается два контейнера – собственно WordPress, и MySQL.
Доступ к MySQL из контейнера WordPress реализуется через Docker-links.
Создаём файл:
{ "containerDefinitions": [ { "name": "wordpress", "links": [ "mysql" ], "image": "wordpress", "essential": true, "portMappings": [ { "containerPort": 80, "hostPort": 80 } ], "memory": 500, "cpu": 10 }, { "environment": [ { "name": "MYSQL_ROOT_PASSWORD", "value": "dbpassword" } ], "name": "mysql", "image": "mysql", "cpu": 10, "memory": 500, "essential": true } ], "family": "wordpress" }
Регистрируем её:
$ aws ecs register-task-definition --cli-input-json file://wp-taskdef.json { "taskDefinition": { "taskDefinitionArn": "arn:aws:ecs:eu-west-1:264418146286:task-definition/wordpress:1", "containerDefinitions": [ { "name": "wordpress", "image": "wordpress", "cpu": 10, "memory": 500, "links": [ "mysql" ], ...
Service
Далее – создаём задачу, которая будет использовать созданный task defenition:
{ "cluster": "wordpress", "serviceName": "wordpress", "taskDefinition": "wordpress:1", "loadBalancers":[], "desiredCount": 1 }
Применяем:
$ aws ecs create-service --cli-input-json file://wp-task.json { "service": { "serviceArn": "arn:aws:ecs:eu-west-1:264418146286:service/wordpress", "serviceName": "wordpress", "clusterArn": "arn:aws:ecs:eu-west-1:264418146286:cluster/wordpress", "loadBalancers": [], "status": "ACTIVE", "desiredCount": 1, "runningCount": 0, "pendingCount": 0, "taskDefinition": "arn:aws:ecs:eu-west-1:264418146286:task-definition/wordpress:1", "deploymentConfiguration": { "maximumPercent": 200, "minimumHealthyPercent": 100 ...
Проверяем:
$ aws ecs list-services --cluster wordpress { "serviceArns": [ "arn:aws:ecs:eu-west-1:264418146286:service/wordpress" ] }
После регистрации сервиса, если все условия соблюдены (например – память, указанная в task definition, не больше, чем память на запущенном EC2) – то задача будет запущена автоматически, проверяем:
$ aws ecs list-tasks --cluster wordpress { "taskArns": [ "arn:aws:ecs:eu-west-1:264418146286:task/2aebaf52-3a3b-4eba-8857-6fa70126c070" ] }
Можно подключиться к инстансу, и проверить контейнеры:
$ ssh [email protected] -i my-cluster.pem
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3ada7349b274 wordpress "docker-entrypoint.sh" 4 minutes ago Up 4 minutes 0.0.0.0:80->80/tcp ecs-wordpress-3-wordpress-f0e49284e3b4e7981300 c08ba2320280 mysql "docker-entrypoint.sh" 4 minutes ago Up 4 minutes 3306/tcp ecs-wordpress-3-mysql-ecafd7a0e9a784ffea01 2b479e53eaee amazon/amazon-ecs-agent:latest "/agent" 6 minutes ago Up 6 minutes ecs-agent
Или просмотреть созданные базы:
$ docker exec -ti c08ba2320280 mysql -u root -pdbpassword -e "show databases" mysql: [Warning] Using a password on the command line interface can be insecure. +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | wordpress | +--------------------+
Готово.