Información sobre cómo crear una tarea para instancias administradas de Amazon ECS con la AWS CLI
Los siguientes pasos le permiten configurar un clúster, crear un proveedor de capacidad, registrar una definición de tarea, poner en marcha una tarea de Linux y llevar a cabo otros escenarios comunes en Amazon ECS con Instancias administradas de Amazon ECS mediante la AWS CLI. Utilice la versión más reciente de la AWS CLI. Para obtener más información acerca de cómo actualizar a la versión más reciente, consulte Instalación o actualización de la versión más reciente de la AWS CLI.
nota
Puede utilizar puntos de conexión de servicio de doble pila para interactuar con Amazon ECS desde la AWS AWS CLI, los SDK y la API de Amazon ECS a través de IPv4 e IPv6. Para obtener más información, consulte Uso de puntos de conexión de doble pila en Amazon ECS.
Temas
Requisitos previos
Antes de comenzar este tutorial, complete lo siguiente:
-
Ha completado los pasos de Configuración para usar Amazon ECS.
-
La última versión de la AWS CLI está instalada y configurada. Para obtener más información sobre la instalación o actualización de AWS CLI, consulte Instalación o actualización de la versión más reciente de AWS CLI en la Guía del usuario de AWS Command Line Interface.
-
Se han completado los pasos que se indican en Configuración para utilizar Amazon ECS.
-
Dispone de los roles de IAM necesarios para Instancias administradas de Amazon ECS. Esto incluye:
-
Rol de infraestructura: permite a Amazon ECS realizar llamadas a los servicios de AWS en su nombre para administrar la infraestructura de instancias administradas de Amazon ECS.
Para obtener más información, consulte Rol de IAM de infraestructura de Amazon ECS.
-
Perfil de instancia: proporciona permisos para el agente de contenedor de Amazon ECS y el daemon de Docker que se ponen en marcha en instancias administradas.
El nombre del rol de la instancia debe incluir
ecsInstanceRolecomo prefijo para que coincida con la accióniam:PassRoledel rol de infraestructura.Para obtener más información, consulte Perfil de instancia de instancias administradas de Amazon ECS.
-
-
Tiene una VPC y un grupo de seguridad creados para utilizarlos. En este tutorial se utiliza una imagen de contenedor alojada en Amazon ECR Public, por lo que sus instancias deben tener acceso a Internet. Para que sus instancias tengan una ruta a Internet, utilice una de las siguientes opciones:
-
Utilice una subred privada con una gateway NAT que tenga una dirección IP elástica.
-
Utilice una subred pública y asigne una dirección IP pública a las instancias.
Para obtener más información, consulte Creación de una nube virtual privada.
Para obtener información sobre las reglas y los grupos de seguridad, consulte Grupos de seguridad predeterminados para sus VPC y Reglas de ejemplo en la Guía del usuario de Amazon Virtual Private Cloud.
-
-
(Opcional) AWS CloudShell es una herramienta que proporciona a los clientes una línea de comandos sin necesidad de crear su propia instancia de EC2. Para obtener más información, consulte ¿Qué es AWS CloudShell? en la Guía del usuario de AWS CloudShell.
Paso 1: creación de un clúster
De forma predeterminada, la cuenta recibe un clúster default.
nota
El beneficio de utilizar el clúster default que se le facilita es que no tiene que especificar la opción --cluster en los comandos siguientes. Si crea su propio clúster no predeterminado, tiene que especificar cluster_name--cluster para cada comando que pretenda utilizar con dicho clúster. cluster_name
Cree su propio clúster con un nombre único con el comando siguiente:
aws ecs create-cluster --cluster-namemanaged-instances-cluster
Salida:
{ "cluster": { "status": "ACTIVE", "defaultCapacityProviderStrategy": [], "statistics": [], "capacityProviders": [], "tags": [], "clusterName": "managed-instances-cluster", "settings": [ { "name": "containerInsights", "value": "disabled" } ], "registeredContainerInstancesCount": 0, "pendingTasksCount": 0, "runningTasksCount": 0, "activeServicesCount": 0, "clusterArn": "arn:aws:ecs:region:aws_account_id:cluster/managed-instances-cluster" } }
Paso 2: creación de un proveedor de capacidad de instancias administradas de Amazon ECS
Antes de poder poner en marcha tareas con Instancias administradas de Amazon ECS, debe crear un proveedor de capacidad que defina la configuración de la infraestructura. El proveedor de capacidad especifica los roles de IAM, la configuración de red y otros ajustes de las instancias administradas.
Cree un archivo JSON con la configuración de su proveedor de capacidad. Reemplace los valores marcadores de posición por los identificadores de recursos reales:
{ "name": "managed-instances-cp", "cluster": "managed-instances-cluster", "managedInstancesProvider": { "infrastructureRoleArn": "arn:aws:iam::aws_account_id:role/ecsInfrastructureRole", "instanceLaunchTemplate": { "ec2InstanceProfileArn": "arn:aws:iam::aws_account_id:instance-profile/ecsInstanceRole", "networkConfiguration": { "subnets": [ "subnet-abcdef01234567890", "subnet-1234567890abcdef0" ], "securityGroups": [ "sg-0123456789abcdef0" ] }, "storageConfiguration": { "storageSizeGiB": 100 }, "monitoring": "basic" } } }
Guarde esta configuración como managed-instances-cp.json y cree el proveedor de capacidad:
aws ecs create-capacity-provider --cli-input-json file://managed-instances-cp.json
El comando devuelve una descripción del proveedor de capacidad una vez que haya completado su creación.
Paso 3: configuración de la estrategia de proveedor de capacidad predeterminada del clúster
Actualice el clúster para usar el proveedor de capacidad de instancias administradas de Amazon ECS como estrategia de proveedor de capacidad predeterminada. Esto permite que las tareas y los servicios utilicen automáticamente Instancias administradas de Amazon ECS sin especificar de forma explícita el proveedor de capacidad.
Cree un archivo JSON con la configuración del proveedor de capacidad del clúster.
{ "cluster": "managed-instances-cluster", "capacityProviders": [ "managed-instances-cp" ], "defaultCapacityProviderStrategy": [ { "capacityProvider": "managed-instances-cp", "weight": 1 } ] }
Guarde esta configuración como cluster-cp-strategy.json y actualice el clúster:
aws ecs put-cluster-capacity-providers --cli-input-json file://cluster-cp-strategy.json
Paso 4: registro de una definición de tarea de Linux
Antes de poder poner en marcha una tarea en su clúster, debe registrar una definición de tareas. Las definiciones de tareas son listas de contenedores agrupadas. El siguiente ejemplo es una definición de tarea simple que crea una aplicación web PHP usando la imagen del contenedor httpd alojada en Docker Hub. Para obtener más información acerca de los parámetros de definición de tareas disponibles, consulte Parámetros en la definición de tareas de Amazon ECS para Fargate.
{ "family": "sample-managed-instances", "networkMode": "awsvpc", "containerDefinitions": [ { "name": "managed-instances-app", "image": "public.ecr.aws/docker/library/httpd:latest", "portMappings": [ { "containerPort": 80, "hostPort": 80, "protocol": "tcp" } ], "essential": true, "entryPoint": [ "sh", "-c" ], "command": [ "/bin/sh -c \"echo '<html><head><title>Amazon ECS Sample App</title><style>body {margin-top: 40px; background-color: #333;} </style></head><body><div style=color:white;text-align:center><h1>Amazon ECS Sample App</h1><h2>Congratulations!</h2><p>Your application is now running on a container in Amazon ECS using Amazon ECS Managed Instances.</p></div></body></html>' > /usr/local/apache2/htdocs/index.html && httpd-foreground\"" ] } ], "requiresCompatibilities": [ "MANAGED_INSTANCES" ], "cpu": "256", "memory": "512" }
Guarde el JSON de definición de tarea como un archivo y páselo con la opción --cli-input-json file://. path_to_file.json
Para utilizar un archivo JSON para definiciones de contenedor:
aws ecs register-task-definition --cli-input-json file://$HOME/tasks/managed-instances-task.json
El comando register-task-definition devuelve una descripción de la definición de tarea después de realizar su registro.
Paso 5: Mostrar la lista de definiciones de tareas
Puede enumerar las definiciones de tareas para su cuenta en cualquier momento con el comando list-task-definitions. La salida de este comando muestra los valores family y revision, que puede utilizar conjuntamente al llamar a run-task o start-task.
aws ecs list-task-definitions
Salida:
{ "taskDefinitionArns": [ "arn:aws:ecs:region:aws_account_id:task-definition/sample-managed-instances:1" ] }
Paso 6: Crear un servicio
Una vez que se haya registrado una tarea para la cuenta, puede crear un servicio para la tarea registradas en su clúster. En este ejemplo, se crea un servicio con una instancia de la definición de tarea sample-managed-instances:1 que se ejecuta en el clúster. La tarea requiere una ruta a Internet, por lo que hay dos maneras de lograr esto. Una forma es utilizar una subred privada configurada con una gateway NAT con una dirección IP elástica en una subred pública. Otra forma es utilizar una subred pública y asignar una dirección IP pública a su tarea. A continuación, ofrecemos ambos ejemplos.
Ejemplo de uso de una subred privada:
aws ecs create-service --clustermanaged-instances-cluster--service-namemanaged-instances-service--task-definition sample-managed-instances:1 --desired-count 1 --network-configuration "awsvpcConfiguration={subnets=[subnet-abcd1234],securityGroups=[sg-abcd1234]}"
Ejemplo de uso de una subred pública:
aws ecs create-service --clustermanaged-instances-cluster--service-namemanaged-instances-service--task-definition sample-managed-instances:1 --desired-count 1 --network-configuration "awsvpcConfiguration={subnets=[subnet-abcd1234],securityGroups=[sg-abcd1234],assignPublicIp=ENABLED}"
El comando create-service devuelve una descripción del servicio una vez que haya completado su creación.
Paso 7: Mostrar la lista de los servicios
Enumere los servicios de su clúster. Debe aparecer el servicio que ha creado en la sección anterior. Puede tomar el nombre de servicio o el ARN completo que se devuelve desde este comando y utilizarlo para describir el servicio más adelante.
aws ecs list-services --cluster managed-instances-cluster
Salida:
{ "serviceArns": [ "arn:aws:ecs:region:aws_account_id:service/managed-instances-cluster/managed-instances-service" ] }
Paso 8: descripción del servicio en marcha
Describa el servicio utilizado el nombre del servicio recuperado antes para obtener información adicional sobre la tarea.
aws ecs describe-services --cluster managed-instances-cluster --services managed-instances-service
Si tiene éxito, devolverá una descripción de los errores del servicio y los servicios. Por ejemplo, en la sección services, encontrará información sobre implementaciones, como el estado de las tareas en ejecución o pendientes. También puede encontrar información sobre la definición de tarea, la configuración de la red y los eventos con marca temporal. En la sección de errores, encontrará información sobre los errores, si los hay, asociados a la llamada.
El resultado mostrará que el servicio utiliza el proveedor de capacidad de instancias administradas de Amazon ECS:
{ "services": [ { "capacityProviderStrategy": [ { "capacityProvider": "managed-instances-cp", "weight": 1, "base": 0 } ], "networkConfiguration": { "awsvpcConfiguration": { "subnets": [ "subnet-abcd1234" ], "securityGroups": [ "sg-abcd1234" ], "assignPublicIp": "ENABLED" } }, "enableECSManagedTags": false, "loadBalancers": [], "deploymentController": { "type": "ECS" }, "desiredCount": 1, "clusterArn": "arn:aws:ecs:region:aws_account_id:cluster/managed-instances-cluster", "serviceArn": "arn:aws:ecs:region:aws_account_id:service/managed-instances-service", "serviceName": "managed-instances-service", "taskDefinition": "arn:aws:ecs:region:aws_account_id:task-definition/sample-managed-instances:1" } ], "failures": [] }
Paso 9: Prueba
Para probar la implementación, debe buscar la dirección IP pública de la instancia administrada que pone en marcha la tarea.
Prueba de tarea implementada mediante una subred pública
Primero, obtenga el ARN de la tarea de su servicio:
aws ecs list-tasks --cluster managed-instances-cluster --service managed-instances-service
El resultado contiene el ARN de la tarea:
{ "taskArns": [ "arn:aws:ecs:region:aws_account_id:task/managed-instances-cluster/EXAMPLE" ] }
Describa la tarea para obtener el ARN de la instancia de contenedor. Utilice el ARN de la tarea para el parámetro tasks:
aws ecs describe-tasks --cluster managed-instances-cluster --tasks arn:aws:ecs:region:aws_account_id:task/managed-instances-cluster/EXAMPLE
El resultado muestra que la tarea se está poniendo en marcha en Instancias administradas de Amazon ECS e incluye el ARN de la instancia de contenedor:
{ "tasks": [ { "launchType": "MANAGED_INSTANCES", "capacityProviderName": "managed-instances-cp", "containerInstanceArn": "arn:aws:ecs:region:aws_account_id:container-instance/managed-instances-cluster/CONTAINER_INSTANCE_ID", "taskArn": "arn:aws:ecs:region:aws_account_id:task/managed-instances-cluster/EXAMPLE", "taskDefinitionArn": "arn:aws:ecs:region:aws_account_id:task-definition/sample-managed-instances:1" } ] }
Describa la instancia de contenedor para obtener el ID de la instancia de EC2:
aws ecs describe-container-instances --cluster managed-instances-cluster --container-instancesCONTAINER_INSTANCE_ID
El resultado incluye el ID de instancia de EC2:
{ "containerInstances": [ { "ec2InstanceId": "i-1234567890abcdef0", "capacityProviderName": "managed-instances-cp", "containerInstanceArn": "arn:aws:ecs:region:aws_account_id:container-instance/managed-instances-cluster/CONTAINER_INSTANCE_ID" } ] }
Describa la instancia de EC2 para obtener la dirección IP pública:
aws ec2 describe-instances --instance-idsi-1234567890abcdef0
La dirección IP pública se encuentra en la salida:
{ "Reservations": [ { "Instances": [ { "PublicIpAddress": "198.51.100.2", "InstanceId": "i-1234567890abcdef0" } ] } ] }
Ingrese dicha dirección IP pública en el navegador web. Debe ver una página web en la que se muestre la aplicación de muestra de Amazon ECS en marcha en Instancias administradas de Amazon ECS.
Prueba de tarea implementada mediante una subred privada
Para las tareas implementadas en subredes privadas, puede utilizar Amazon ECS Exec para conectarse al contenedor y probar la implementación desde la instancia. Siga los mismos pasos anteriores para obtener el ARN de la tarea y, a continuación, utilice ECS Exec:
aws ecs execute-command --cluster managed-instances-cluster \ --task arn:aws:ecs:region:aws_account_id:task/managed-instances-cluster/EXAMPLE\ --container managed-instances-app \ --interactive \ --command "/bin/sh"
Después de poner en marcha el intérprete de comandos interactivo, puede probar el servidor web:
curl localhost
Debería ver el equivalente en HTML de la página web de la aplicación de ejemplo de Amazon ECS.
Paso 10: limpieza
Cuando termine este tutorial, debe limpiar los recursos asociados para evitar incurrir en cargos generados por recursos sin utilizar.
Elimine el servicio de :
aws ecs delete-service --cluster managed-instances-cluster --service managed-instances-service --force
Espere a que se elimine el servicio y se detengan todas las tareas y, a continuación, elimine el proveedor de capacidad:
aws ecs delete-capacity-provider --capacity-provider managed-instances-cp
Elimine el clúster:
aws ecs delete-cluster --cluster managed-instances-cluster
nota
Las instancias administradas terminan automáticamente cuando se elimina el proveedor de capacidad. No es necesario terminar manualmente las instancias de EC2.