Implemente una imagen de contenedor acoplable mediante ECS
Antes de poder agregar instancias de ECS a un clúster, primero debe ir a la consola de administración de EC2 y crear instancias “optimizadas por ECS” con un rol de IAM que tenga adjunta la política “AmazonEC2ContainerServiceforEC2Role”.
-
Vaya a su Panel EC2 y haga clic en el botón “Iniciar instancia”.
-
En
Community AMIs
, busqueecs-optimized
y seleccione la que mejor se adapte a las necesidades de su proyecto. Cualquiera funcionará. Haga clic en Siguiente. -
Cuando llegue a
Configurar detalles de la instancia
, haga clic encrear nuevo enlace de función de IAM
y cree una nueva función llamadaecsInstanceRole
. -
Adjunte la política
AmazonEC2ContainerServiceforEC2Role
a ese rol. -
De forma predeterminada, su instancia de contenedor se inicia en su clúster
predeterminado
. Si desea iniciar su propio clúster en lugar del predeterminado, elija la lista “Detalles avanzados” y pegue el siguiente script en el campo “Datos de usuario”, reemplazando “su_nombre_de_clúster” con el nombre de su clúster.#!/bin/bash echo ECS_CLUSTER=your_cluster_name » /etc/ecs/ecs.config
-
Luego, termine de configurar su instancia de ECS.
NOTA: Si está creando un servidor web, querrá crear un grupo de seguridad
para permitir el acceso al puerto 80.
- Cree un repositorio:
aws ecr create-repository --repository-name example-repository
- Autentique su cliente Docker en su registro:
aws ecr get-login --region us-east-1 | sh
- Cree su imagen de Docker:
docker build -t example-image.
- Etiquete su imagen para que pueda enviar la imagen a este repositorio:
docker tag ejemplo-imagen:último ejemplo-espacio de nombres/ejemplo-imagen:último
- Envíe esta imagen a su repositorio de AWS recién creado:
docker push example-namespace/example-image:latest
- Registre una definición de tarea de ECS:
aws ecs register-task-definition --cli-input-json example-task.json
- Ejecute la tarea:
aws ecs run-task --task-definition example-task
Implemente una aplicación de muestra en el servicio AWS ECS como prueba de concepto
Siga los siguientes pasos para probar una aplicación de muestra en el servicio AWS ECS como prueba de concepto.
-
Inicie sesión en la consola de administración de AWS y vaya a Catálogo de servicios de AWS -> Cómputo -> Ec2
-
Cree una VM (instancia EC2) con el sistema operativo amazon linux de 64 bits, que usaremos para configurar docker, git, la herramienta del agente AWS ECS y otras herramientas. También usaremos la misma máquina virtual como nodo en el clúster de ECS para implementar aplicaciones basadas en contenedores. Siga los pasos a continuación para crear una máquina virtual. a) Siga los pasos habituales para crear una instancia EC2, dé un énfasis especial a los pasos posteriores durante la creación de la instancia EC2. b) Seleccione un rol de IAM con los siguientes permisos mínimos: AmazonEC2ContainerServiceforEC2Role c) Asegúrese de que Java esté instalado en la VM
-
Instalación de la ventana acoplable [ejecutar los siguientes comandos] primero actualice el repositorio de paquetes yum
sudo yum update –y ahora para instalar docker ejecutar yum install
sudo yum install -y docker
-
Inicie el servicio de ventana acoplable
sudo service docker start
-
Agregue el usuario ec2 al grupo docker para que pueda ejecutar los comandos de Docker sin usar sudo.
sudo usermod -a -G docker ec2-user
-
Cierre la sesión de EC2 y vuelva a iniciar sesión para obtener los nuevos permisos del grupo Docker.
-
Verifique que el usuario de ec2 pueda ejecutar los comandos de Docker sin sudo.
docker info
-
Instalación de Git
sudo yum install -y git
-
Clone la aplicación PHP de muestra en la instancia Ec2 desde git. Usaremos esta aplicación para nuestro POC.
git clone https://github.com/awslabs/ecs-demo-php-simple-app
cd ecs-demo-php-simple-app
verifique que Dockerfile existe enumerando el contenido del directorio
ls
- Vaya al catálogo de servicios de AWS -> Cómputo -> Servicio de contenedor Ec2
- Haga clic en Comenzar
- Haga clic en cancelar
- Haga clic en repositorios en el menú Repositorios de la izquierda
- Haga clic en Comenzar
15. Ingrese el nombre del repositorio y haga clic en siguiente
16. Configurar herramientas EC2
aws configure
proporcione el ID de la clave de acceso de AWS, la clave de acceso secreta, el nombre de la región predeterminado según su cuenta 17. Cree, etiquete y envíe una imagen de Docker a) Recupere el comando de inicio de sesión de Docker que puede usar para autenticar su cliente de Docker en su registro:
aws ecr get-login --region us-east-1
b) Ejecute el retorno de comando como salida del paso anterior 18. Cree la imagen de Docker desde su Dockerfile. (Recuerde el Paso 9, donde descargó una aplicación acoplable de muestra) a)
docker build -t amazon-ecs-sample .
(Tenga en cuenta que “.” significa directorio actual) b) Ejecute las imágenes de la ventana acoplable para verificar que la imagen se creó correctamente y que el nombre de la imagen contiene un repositorio en el que puede enviar sus cambios a la imagen de la ventana acoplable.
docker images
c) Ejecute la imagen recién construida. La opción -p 80:80 asigna el puerto 80 expuesto en el contenedor al puerto 80 en el sistema host (instancia Ec2 en este caso).
docker run -p 80:80 amazon-ecs-sample
Ignore la advertencia “apache2: no se pudo determinar de manera confiable el nombre de dominio completo del servidor, usando 172.17.0.2 para ServerName” 19. Intente acceder a la página web de la aplicación de muestra en el navegador, asegúrese de que el puerto 80 esté abierto en los grupos de seguridad asociados con la instancia
http://<ec2-instance-dns-address>
-
Presione la tecla ctrl + c, esto detendrá la imagen de la ventana acoplable. La aplicación de muestra no debe ser accesible.
-
Ahora, después de verificar con éxito nuestra aplicación docker de muestra, intentaremos configurar un clúster para ejecutar la aplicación de muestra automáticamente. Además, para fines de demostración, intentaremos usar la instancia ec2 existente como un nodo en el clúster. Esto se puede lograr instalando un programa de agente en la instancia ec2.
-
Instalación del agente de contenedores de Amazon ECS en la instancia ec2 a)
sudo yum install -y ecs-init
b) Reinicie el demonio docker
sudo service docker restart
c) Inicie el trabajo advenedizo ecs-init
sudo start ecs
d) (Opcional) Puede verificar que el agente se está ejecutando y ver información sobre su nueva instancia de contenedor con la API de introspección del agente. Asegúrese de que el puerto 51678 esté abierto en el grupo de seguridad.
curl http://localhost:51678/v1/metadata
-
Vaya al catálogo de servicios de AWS -> Cómputo -> Servicio de contenedor Ec2 -> Clúster y verifique que se haya creado un clúster predeterminado
-
Ahora procedemos a crear un grupo de tareas y agregar nuestra imagen acoplable como tarea para ejecutar en el clúster a) Examine el archivo simple-app-task-def.json en la carpeta ecs-demo-php-simple-app. b) Edite simple-app-task-def.json y reduzca la memoria, de modo que pueda ejecutarse en una instancia elegible de nivel gratuito (supongo que uno está usando una instancia ec2 elegible de nivel gratuito para este POC; de lo contrario, no es necesario reducir la memoria límite) c) Actualice memory=250 en todas las ocurrencias en el archivo simple-app-task-def.json d) Registre una definición de tarea con el archivo simple-app-task-def.json.
aws ecs register-task-definition –cli-input-json file://simple-app-task-def.json
e) Vaya a la definición de tarea en la página de servicio del contenedor ec2, encontrará la definición de tarea registrada
f) Utilice el siguiente comando de la CLI de AWS para ejecutar una tarea con la definición de tarea de aplicación de ejemplo de consola.
aws ecs run-task --task-definition console-sample-app
g) Abra la aplicación web de muestra en el navegador, debe ser accesible (consulte el paso 19)
Gracias por leer, comparta sus comentarios y consultas para la discusión de seguimiento.
ejemplo-tarea.json
{
"family": "example-task",
"containerDefinitions": [
{
"environment": [],
"name": "example-container",
"image": "example-namespace/example-image:latest",
"cpu": 10,
"memory": 500,
"portMappings": [
{
"containerPort": 8080,
"hostPort": 80
}
],
"entryPoint": [],
"essential": true
}
]
}