

# Creación de una implementación canario de Amazon ECS
<a name="deploy-canary-service"></a>

Al utilizar las implementaciones canario de Amazon ECS, puede cambiar un pequeño porcentaje del tráfico a la nueva revisión de servicio (la revisión “canario”). Valide la implementación y, a continuación, transfiera el tráfico restante a la vez tras un intervalo específico. Este enfoque le permite probar la nueva funcionalidad con un riesgo mínimo antes de realizar la implementación completa.

## Requisitos previos
<a name="deploy-canary-service-prerequisites"></a>

Realice las siguientes operaciones antes de iniciar una implementación canario.

1. Configure los permisos adecuados.
   + Para obtener información sobre los permisos de Elastic Load Balancing, consulte [Rol de IAM de infraestructura de Amazon ECS para los equilibradores de carga](AmazonECSInfrastructureRolePolicyForLoadBalancers.md).
   + Para obtener información acerca de los permisos de Lambda, consulte [Permisos necesarios para las funciones de Lambda en las implementaciones azul/verde de Amazon ECS](blue-green-permissions.md).

1. Las implementaciones canario de Amazon ECS requieren que su servicio utilice una de las siguientes características: configure los recursos adecuados.
   + Equilibrador de carga de aplicación: para más información, consulte [Recursos de equilibrador de carga de aplicación para las implementaciones azul/verde, las implementaciones lineales y las implementaciones canario](alb-resources-for-blue-green.md).
   + Equilibrador de carga de red: para más información, consulte [Recursos de Equilibrador de carga de red para las implementaciones azul/verde, las implementaciones lineales y las implementaciones canario de Amazon ECS](nlb-resources-for-blue-green.md).
   + Service Connect: para más información, consulte [Recursos de Service Connect para las implementaciones azul/verde, las implementaciones lineales y las implementaciones canario de Amazon ECS](service-connect-blue-green.md).

## Procedimiento
<a name="deploy-canary-service-procedure"></a>

Puede utilizar la consola o la AWS CLI para crear un servicio de implementación canario de Amazon ECS.

------
#### [ Console ]

1. Abra la consola en [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2).

1. Determine el recurso desde el que lanza el servicio.    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/AmazonECS/latest/developerguide/deploy-canary-service.html)

   Aparecerá la página **Crear servicio**.

1. En **Detalles del servicio**, haga lo siguiente:

   1. En **Familia de definiciones de tareas**, elija la definición de tarea que se va a utilizar. A continuación, en **Revisión de la definición de tareas**, introduzca la revisión que desee utilizar.

   1. En **Service name** (Nombre del servicio), ingrese un nombre para el servicio.

1. Para ejecutar el servicio en un clúster existente, en **Clúster existente**, elija el clúster. Para ejecutar el servicio en un clúster nuevo, seleccione **Crear clúster** 

1. Elija cómo distribuir las tareas en la infraestructura de clúster. En **Configuración de computación**, elija su opción.    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/AmazonECS/latest/developerguide/deploy-canary-service.html)

1. En **Configuración de implementación**, haga lo siguiente:

   1. En **Tipo de servicio**, seleccione **Réplica**.

   1. En **Desired tasks** (Tareas deseadas), ingrese el número de tareas que se lanzarán y mantendrán en el servicio.

   1. Para que Amazon ECS monitoree la distribución de las tareas entre las zonas de disponibilidad y las redistribuya cuando haya un desequilibrio, en **Reequilibrio del servicio de zonas de disponibilidad**, seleccione **Reequilibrio del servicio de zonas de disponibilidad**.

   1. En **Periodo de gracia de la comprobación de estado**, introduzca la cantidad de tiempo (en segundos) durante la cual el programador de servicios ignora las comprobaciones de estado de Elastic Load Balancing, VPC Lattice y contenedores en mal estado después de que se haya iniciado una tarea por primera vez. Si no se especifica ningún valor para el período de gracia de comprobación de estado, se utiliza el valor predeterminado: 0.

1. En **Configuración de implementación**, configure la implementación canario:

   1. En **Estrategia de implementación**, elija **Canario**.

   1. En **Porcentaje de tráfico canario**, introduzca el porcentaje de tráfico que pasará a la revisión de servicio verde en la primera etapa (por ejemplo, un 10 % para el tráfico canario inicial).

   1. En **Tiempo de incorporación del tráfico canario**, introduzca el tiempo de espera en minutos antes de cambiar el tráfico restante a la revisión de servicio verde.

   1. En **Tiempo de incorporación**, introduzca el número de minutos que las revisiones de servicio azul y verde durarán simultáneamente después del último cambio de tráfico y antes de que finalice la revisión azul.

   1. (Opcional) Ejecute las funciones de Lambda que se van a ejecutar en etapas específicas de la implementación. En **Enlaces de ciclo de vida de la implementación**, seleccione las etapas para ejecutar los enlaces de ciclo de vida.

      Para agregar un enlace de ciclo de vida:

      1. Elija **Agregar**.

      1. En **Función de Lambda**, introduzca el nombre o el ARN de la función.

      1. En **Rol**, selecione el rol de IAM que tiene permiso para invocar la función de Lambda.

      1. En **Etapas del ciclo de vida**, seleccione las etapas en las que debe ejecutarse la función de Lambda.

1. Para configurar el modo en que Amazon ECS detecta y gestiona los errores de implementación, expanda **Deployment failure detection** (Detección de errores de implementación) y, a continuación, elija sus opciones. 

   1. Para detener una implementación cuando las tareas no puedan iniciarse, seleccione **Use the Amazon ECS deployment circuit breaker** (Utilizar el interruptor de circuito de implementación de Amazon ECS).

      Para que el software restaure automáticamente la implementación a su último estado completado cuando el disyuntor de implementación establezca un estado con error, seleccione **Restauración en caso de error**.

   1. Para detener una implementación en función de las métricas de la aplicación, seleccione **Use CloudWatch alarms**. A continuación, elija las alarmas en **Nombre de la alarma de CloudWatch**. Para crear una alarma nueva, vaya a la consola de CloudWatch.

      Para que el software restaure automáticamente la implementación a su último estado de implementación completada cuando una alarma de CloudWatch establezca un estado con error, seleccione **Restauración en caso de error**.

1. (Opcional) Para interconectar su servicio con Service Connect, expanda **Service Connect** y, a continuación, especifique lo siguiente:

   1.  Seleccione **Activar Service Connect**.

   1. En **Service Connect configuration** (Configuración de Service Connect), especifique el modo cliente.
      + Si su servicio ejecuta una aplicación cliente de red que solo necesita conectarse a otros servicios del espacio de nombres, elija **Solo en el lado del cliente**.
      + Si su servicio ejecuta una aplicación de servicio web o red y necesita proporcionar puntos de conexión para este servicio y se conecta a otros servicios del espacio de nombres, elija **Client and server** (Cliente y servidor).

   1. Para usar un espacio de nombres que no sea el espacio de nombres predeterminado del clúster, en **Namespace** (Espacio de nombres), elija el espacio de nombres del servicio. Puede ser un espacio de nombres creado por separado en la misma Región de AWS de su Cuenta de AWS o un espacio de nombres en la misma región que se comparta con su cuenta mediante AWS Resource Access Manager (AWS RAM). Para obtener más información sobre los espacios de nombres de AWS Cloud Map compartidos, consulte [Cross-account AWS Cloud Map namespace sharing](https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html) en la *Guía para desarrolladores de AWS Cloud Map*.

   1. (Opcional) Configure las reglas de encabezado de tráfico de prueba para las implementaciones canario. En **Enrutamiento de tráfico de prueba**, especifique lo siguiente:

      1. Seleccione **Habilitar las reglas de encabezado de tráfico de prueba** para enrutar solicitudes específicas a la revisión de servicio verde durante las pruebas.

      1. En **Reglas de coincidencia de encabezados**, configure los criterios para enrutar el tráfico de prueba:
         + **Nombre del encabezado**: introduzca el nombre del encabezado HTTP que desee que coincida (por ejemplo, `X-Test-Version` o `User-Agent`).
         + **Tipo de coincidencia**: elija los criterios de coincidencia:
           + **Coincidencia exacta**: se enrutan las solicitudes en las que el valor del encabezado coincida exactamente con el valor especificado.
           + **Encabezado presente**: se enrutan las solicitudes que contienen el encabezado especificado, independientemente del valor.
           + **Coincidencia de patrones**: se enrutan las solicitudes en las que el valor del encabezado coincide con un patrón especificado.
         + **Valor del encabezado** (si se utiliza una coincidencia exacta o una coincidencia de patrón): introduzca el valor o patrón con el que desea que haya coincidencia.

         Puede agregar varias reglas de coincidencia de encabezados para crear una lógica de enrutamiento compleja. Las solicitudes que coincidan con alguna de las reglas configuradas se enrutarán a la revisión de servicio verde para su comprobación.

      1. Elija **Agregar regla de encabezado** para configurar condiciones de coincidencia de encabezados adicionales.
**nota**  
Las reglas de encabezado de tráfico de prueba le permiten validar la nueva funcionalidad con tráfico controlado antes de finalizar la implementación completa. Esto le permite comprobar la revisión de servicio verde con solicitudes específicas (como las de las herramientas de pruebas internas o de los usuarios de la versión beta) y, al mismo tiempo, mantener un flujo de tráfico normal hacia la revisión de servicio azul.

   1. (Opcional) Especifique una configuración de registro. Seleccione **Utilizar colección de registros**. La opción predeterminada envía registros de contenedor a los Registros de CloudWatch. Las demás opciones del controlador de registro se configuran mediante AWS FireLens. Para obtener más información, consulte [Envío de registros de Amazon ECS a un servicio de AWS o AWS Partner](using_firelens.md).

      A continuación, se describe con más detalle cada uno de los destinos de registro de contenedor.
      + **Amazon CloudWatch**: configure la tarea para enviar registros de contenedor a CloudWatch Logs. Se proporcionan las opciones de controlador de registro predeterminadas que crean un grupo de registros de CloudWatch en su nombre. Para especificar otro nombre de grupo de registros, cambie los valores de las opciones del controlador.
      + **Amazon Data Firehose**: configure la tarea para enviar registros de contenedor a Firehose. Se proporcionan las opciones de controlador de registro predeterminadas que envían registros a un flujo de entrega de Firehose. Para especificar un nombre de flujo de entrega distinto, cambie los valores de las opciones del controlador.
      + **Amazon Kinesis Data Streams**: configure la tarea para enviar registros de contenedores a Kinesis Data Streams. Se proporcionan las opciones de controlador de registro predeterminadas que envían registros a un flujo de Kinesis Data Streams. Para especificar otro nombre de transmisión, cambie los valores de las opciones del controlador.
      + **Amazon OpenSearch Service**: configure la tarea para enviar registros de contenedor a un dominio de OpenSearch Service. Se deben proporcionar las opciones del controlador de registros. 
      + **Amazon S3**: configure la tarea para enviar registros de contenedor a un bucket de Amazon S3. Se proporcionan las opciones de controlador de registro predeterminadas, pero debe especificar un nombre de bucket de Amazon S3 válido.

1. (Opcional) Configure **Equilibrio de carga** para una implementación canario.    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/AmazonECS/latest/developerguide/deploy-canary-service.html)

1. (Opcional) Para ayudar a identificar el servicio y las tareas, expanda la sección **Tags** (Etiquetas) y, a continuación, configure sus etiquetas.

   Para que Amazon ECS etiquete automáticamente todas las tareas recién lanzadas con el nombre del clúster y las etiquetas de definición de tareas, seleccione **Activar las etiquetas administradas de Amazon ECS** y, a continuación, en **Propagar etiquetas de**, seleccione **Definiciones de tareas**.

   Para que Amazon ECS etiquete automáticamente todas las tareas recién lanzadas con el nombre del clúster y las etiquetas de servicio, seleccione **Activar las etiquetas administradas de Amazon ECS** y, a continuación, en **Propagar etiquetas de**, seleccione **Servicio**.

   Añada o elimine una etiqueta.
   + [Agregar una etiqueta] Seleccione **Add tag** (Agregar etiqueta), y, a continuación, haga lo siguiente:
     + En **Clave**, escriba el nombre de la clave.
     + En **Valor**, escriba el valor de la clave.
   + [Eliminar una etiqueta] Junto a la etiqueta, elija **Remove tag (Quitar etiqueta)**.

1. Seleccione **Crear**.

------
#### [ AWS CLI ]

1. Cree un archivo llamado `canary-service-definition.json` con el siguiente contenido.

   Sustituya las {{entradas del usuario}} por sus valores.

   ```
   {
     "serviceName": "myCanaryService",
     "cluster": "arn:aws:ecs:us-west-2:123456789012:cluster/sample-fargate-cluster",
     "taskDefinition": "sample-fargate:1",
     "desiredCount": 5,
     "launchType": "FARGATE",
     "networkConfiguration": {
       "awsvpcConfiguration": {
         "subnets": [
           "subnet-09ce6e74c116a2299",
           "subnet-00bb3bd7a73526788",
           "subnet-0048a611aaec65477"
         ],
         "securityGroups": [
           "sg-09d45005497daa123"
         ],
         "assignPublicIp": "ENABLED"
       }
     },
     "deploymentController": {
       "type": "ECS"
     },
     "deploymentConfiguration": {
       "strategy": "CANARY",
       "maximumPercent": 200,
       "minimumHealthyPercent": 100,
       "canaryConfiguration" : {
           "canaryPercent" : 5.0,
           "canaryBakeTime" : 10
       },
       "bakeTimeInMinutes": 10,
       "alarms": {
         "alarmNames": [
           "myAlarm"
         ],
         "rollback": true,
         "enable": true
       }
     },
     "loadBalancers": [
       {
         "targetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/blue-target-group/54402ff563af1197",
         "containerName": "fargate-app",
         "containerPort": 80,
         "advancedConfiguration": {
           "alternateTargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/green-target-group/cad10a56f5843199",
           "productionListenerRule": "arn:aws:elasticloadbalancing:us-west-2:123456789012:listener-rule/app/my-canary-demo/32e0e4f946c3c05b/9cfa8c482e204f7d/831dbaf72edb911",
           "roleArn": "arn:aws:iam::123456789012:role/LoadBalancerManagementforECS"
         }
       }
     ]
   }
   ```

1. Ejecuta `create-service`.

   ```
   aws ecs create-service --cli-input-json file://canary-service-definition.json
   ```

------

## Siguientes pasos
<a name="deploy-canary-service-next-steps"></a>

Tras configurar la implementación canario, siga estos pasos:
+ Actualice el servicio para iniciar la implementación. Para obtener más información, consulte [Actualización de un servicio de Amazon ECS](update-service-console-v2.md).
+ Supervise el proceso de implementación para asegurarse de que siga el patrón de la implementación canario:
  + Se crea y escala verticalmente la revisión de servicio verde
  + Un pequeño porcentaje del tráfico (canario) se transfiere a la revisión verde
  + El sistema espera el intervalo canario especificado
  + El tráfico restante se transfiere a la vez a la revisión verde
  + Transcurrido el tiempo de incorporación, la revisión azul finaliza