AWS Builder Center: Learn, Build and Connect with builders in the AWS community
AWS Builder Center is the official home for builders on AWS. Share and read what others are working on, follow people who inspire you, explore training and workshops, and find tools to support what you're building.
¿Cómo configuro y superviso el disyuntor de despliegue de Amazon ECS?
Quiero automatizar la restauración y recibir notificaciones cuando se produzca un error en mi despliegue de Amazon Elastic Container Service (Amazon ECS).
Descripción corta
Para automatizar la restauración y supervisar los despliegues con el disyuntor de despliegue de Amazon ECS, complete los siguientes pasos:
- Configure el disyuntor de despliegue.
- Configure Amazon EventBridge para supervisar el disyuntor de despliegue.
- Pruebe el escenario de error de despliegue.
Resolución
Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulte Solución de problemas de AWS CLI. Además, asegúrese de utilizar la versión más reciente de la AWS CLI.
Configuración del disyuntor de despliegue
Siga estos pasos:
- Cree un archivo JSON con una definición de tarea similar a la del siguiente ejemplo:
Nota: Sustituya 123456789876 por el ID de su cuenta de AWS. Si no tiene un elemento EcstAskExecutionRole, cree un rol de ejecución de tareas.{ "family": "my-task", "containerDefinitions": [ { "name": "sample-container", "image": "nginx:alpine", "essential": true } ], "executionRoleArn": "arn:aws:iam::123456789876:role/ecsTaskExecutionRole", "networkMode": "awsvpc", "requiresCompatibilities": [ "FARGATE" ], "cpu": "256", "memory": "512" } - Para registrar la definición de la tarea, ejecute el siguiente comando register-task-definition:
Nota: Sustituya taskdef-success.json por el archivo JSON de definición de tareas.aws ecs register-task-definition \ --cli-input-json file://taskdef-success.json - Para crear un servicio de Amazon ECS con el disyuntor de despliegue y la reversión activados, ejecute el siguiente comando create-service:
Nota: Sustituya subnet-12345 por su subred y sg-12345 por sus grupos de seguridad. Debe configurar deployment-controller en Type=ECS porque el disyuntor de despliegue solo está disponible para los despliegues de actualizaciones sucesivas.aws ecs create-service \ --cluster default \ --service-name my-sample-service \ --deployment-controller type=ECS \ --desired-count 1 \ --deployment-configuration "deploymentCircuitBreaker={enable=true,rollback=true}" \ --task-definition my-task:1 \ --launch-type FARGATE \ --network-configuration "awsvpcConfiguration={subnets=[subnet-12345],securityGroups=[sg-12345],assignPublicIp=ENABLED}"
Si no tiene un clúster predeterminado, ejecute el siguiente comando create-cluster para crear el clúster:
Nota: Sustituya example-cluster por el nombre de su clúster.aws ecs create-cluster \ --cluster-name example-cluster - Ejecute el siguiente comando describe-services para confirmar que el servicio Amazon ECS se encuentra en estado Estable:
Recibirá un resultado similar al del ejemplo siguiente:aws ecs describe-services \ --cluster default \ --services my-sample-service | jq '.services[0].events[] | {message}'{ "message": "(service my-sample-service) has reached a steady state." } { "message": "(service my-sample-service) (deployment ecs-svc/1234567890123456789) deployment completed." } { "message": "(service my-sample-service) has started 1 tasks: (task 2918eb15dd0f4d42affc2a3a07818abf)." }
Configuración de EventBridge para supervisar el disyuntor de despliegue
Siga estos pasos:
-
Ejecute el siguiente comando create-topic para crear un tema de Amazon Simple Notification Service (Amazon SNS) y usarlo como objetivo de la regla de EventBridge:
aws sns create-topic \ --name my-topicNota: Sustituya my-topic por el nombre de su tema de SNS.
-
Para actualizar los atributos del tema y así permitir las llamadas a las API necesarias, ejecute el siguiente comando set-topic-attributes:
aws sns set-topic-attributes \ --topic-arn arn:aws:sns:eu-west-1:123456789876:my-topic \ --attribute-name Policy \ --attribute-value '{ "Version": "2008-10-17", "Id": "my_topic_policy", "Statement": [ { "Sid": "my_topic_default", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": [ "SNS:GetTopicAttributes", "SNS:SetTopicAttributes", "SNS:AddPermission", "SNS:RemovePermission", "SNS:DeleteTopic", "SNS:Subscribe", "SNS:ListSubscriptionsByTopic", "SNS:Publish" ], "Resource": "arn:aws:sns:eu-west-1:123456789876:my-topic", "Condition": { "StringEquals": { "AWS:SourceOwner": "123456789876" } } }, { "Sid": "my_topic_for_sns_Publish", "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sns:Publish", "Resource": "arn:aws:sns:eu-west-1:123456789876:my-topic" } ] }'Nota: Sustituya eu-west-1 por su región de AWS, 123456789876 por su ID de cuenta y my-topic por el nombre del tema.
-
Para suscribirse al tema de SNS con su correo electrónico, ejecute el siguiente comando de suscripción:
aws sns subscribe \ --topic-arn arn:aws:sns:eu-west-1:123456789876:my-topic \ --protocol email \ --notification-endpoint example@example.comNota: Sustituya eu-west-1 por su región, 123456789876 por el ID de su cuenta, my-topic por el nombre del tema y example@example.com por su dirección de correo electrónico.
-
En el correo electrónico de confirmación de suscripción que reciba, elija Confirmar suscripción.
-
Para crear una regla de EventBridge para los eventos fallidos en el despliegue del servicio, ejecute el siguiente comando put-rule:
aws events put-rule \ --name "EcsServiceDeploymentFailed" \ --event-pattern "{\"source\":[\"aws.ecs\"],\"detail-type\":[\"ECS Deployment State Change\"],\"detail\":{\"eventName\":[\"SERVICE_DEPLOYMENT_FAILED\"]}}" -
Para añadir el tema de SNS como el objetivo de la regla de EventBridge, ejecute el siguiente comando put-targets:
aws events put-targets \ --rule EcsServiceDeploymentFailed --targets "Id"="1","Arn"="arn:aws:sns:eu-west-1:123456789876:my-topic"Nota: Sustituya eu-west-1 por su región, 123456789876 por el ID de su cuenta y my-topic por el nombre de su tema.
Prueba del escenario de error de despliegue
Siga estos pasos:
-
Cree un archivo JSON incorrecto con una etiqueta de imagen en su definición de tarea que sea similar a la siguiente:
{ "family": "my-task", "containerDefinitions": [ { "name": "sample-container", "image": "nginx:wrong-image-tag", "essential": true } ], "executionRoleArn": "arn:aws:iam::123456789876:role/ecsTaskExecutionRole", "networkMode": "awsvpc", "requiresCompatibilities": [ "FARGATE" ], "cpu": "256", "memory": "512" }Nota: Sustituya sample-container por su instancia de contenedor, nginx:wrong-image-tag por una etiqueta de imagen incorrecta y 123456789876 por el ID de su cuenta. Una etiqueta de imagen incorrecta provoca un error en el despliegue.
-
Para registrar la definición de la tarea, ejecute el siguiente comando register-task-definition:
aws ecs register-task-definition --cli-input-json file://taskdef-failure.jsonNota: Sustituya taskdef-failure.json por el título del archivo JSON de definición de tareas.
-
Para actualizar el servicio con la nueva definición de tarea e iniciar un nuevo despliegue, ejecute el siguiente comando update-service:
aws ecs update-service --service my-sample-service --task-definition my-task:2Nota: Permite sustituir my-sample-service por su servicio y my-task:2 por su tarea. El nuevo despliegue devuelve un error porque la tarea no puede extraer la imagen. Recibirá un resultado similar al del ejemplo siguiente:
{ "version": "0", "id": "12345abc-2f7c-f86a-e544-a69218eb1446", "detail-type": "ECS Deployment State Change", "source": "aws.ecs", "account": "123456789876", "time": "2024-11-19T17:42:41Z", "region": "eu-west-1", "resources": [ "arn:aws:ecs:eu-west-1:123456789876:service/default/my-sample-service" ], "detail": { "eventType": "ERROR", "eventName": "SERVICE_DEPLOYMENT_FAILED", "clusterArn": "arn:aws:ecs:eu-west-1:123456789876:cluster/default", "deploymentId": "ecs-svc/9876543210987654321", "updatedAt": "2024-11-19T17:42:40.73Z", "reason": "ECS deployment circuit breaker: tasks failed to start." } } -
Para comprobar que el servicio Amazon ECS se ha restaurado, ejecute el siguiente comando describe-services:
aws ecs describe-services \ --cluster default \ --services my-sample-service | jq '.services[0].events[] | {message}'Recibirá un resultado similar al del ejemplo siguiente:
{ "message": "(service my-sample-service) has reached a steady state." } { "message": "(service my-sample-service) (deployment ecs-svc/1234567890123456789) deployment completed." } { "message": "(service my-sample-service) rolling back to deployment ecs-svc/1234567890123456789." } { "message": "(service my-sample-service) (deployment ecs-svc/9876543210987654321) deployment failed: tasks failed to start." } { "message": "(service my-sample-service) has started 1 tasks: (task b808c60616134ec1ac0c656a2bff1ef2)." } { "message": "(service my-sample-service) has started 1 tasks: (task 846c9aebd9224c2b832a38942cae5ea6)." } { "message": "(service my-sample-service) has started 1 tasks: (task 7143d03444574f2db2b567d75df3fe72)." } { "message": "(service my-sample-service) has started 1 tasks: (task 9a6a399770d940a2b442560c02a6a4c0)." } { "message": "(service my-sample-service) has reached a steady state." } { "message": "(service my-sample-service) (deployment ecs-svc/1234567890123456789) deployment completed." } { "message": "(service my-sample-service) has started 1 tasks: (task 2918eb15dd0f4d42affc2a3a07818abf)." }
Información relacionada
Detección de errores por el disyuntor de despliegue de Amazon ECS
- Temas
- Containers
- Etiquetas
- Amazon Elastic Container Service
- Idioma
- Español

Contenido relevante
preguntada hace 10 meses
preguntada hace 9 meses
preguntada hace 10 meses
preguntada hace 10 meses
OFICIAL DE AWSActualizada hace un año
OFICIAL DE AWSActualizada hace un año