Intentando get la list de instancias de ec2 bajo un grupo de deployment usando el command aws

  • Creé una aplicación ficticia en Codedeploy, luego creé un grupo de implementación y agregué una instancia de EC2 debajo de él.

  • No hice ninguna implementación todavía.

  • Estoy tratando de encontrar el command aws apropiado que me permita get la list de instancias de EC2 bajo un grupo de implementación. Al observar los commands que figuran en esta list , verifiqué algunos ejemplos como list-deployment-instances . Todos ellos tienen este parámetro deployment-id , que es –

La identificación única de una implementación.

Supongo que esto se genera después de hacer una implementación. Corrígeme si estoy equivocado. De todos modos, todavía no encontré ningún command que me brinde la list de instancias de ec2 en un grupo de implementación. ¿Me estoy perdiendo de algo?

Backgroud

  • Tenemos varias instancias de EC2 detrás de un equilibrador de carga, que se ejecuta en producción y es posible que algunas de ellas deban implementarse con una twig de git diferente (para probar alguna característica, antes de implementar todas las instancias, y esto puede ser necesario durante las implementaciones posteriores) .
  • Nuestro equipo de DevOps aún no usa escalado automático. Por lo tanto, abren o networkingucen manualmente las instancias.
  • Durante la próxima implementación, necesitaríamos implementar la twig git apropiada para el grupo de instancias, dependiendo de la twig de git en la que se encuentren actualmente. Entonces, antes de eso, nos gustaría actualizar el grupo de deployment utilizando un script que lo hará al verificar la revisión de git desplegada en cada una de las instancias.

Actualización – Apertura Bounty

Estamos intentando agregar un control de cordura antes de iniciar la implementación, para ver si el número total de instancias alcanzables (las cajas disminuyen a veces) actualmente bajo un grupo de deployment es menor que el número cuando lo revisamos la última vez, y en ese caso ¿con qué margen?

En la pregunta original, estaba pensando en encontrar directamente las instancias en un grupo de implementación, pero ahora me doy count de que las instancias en un grupo de implementación pueden no ser corregidas y ahora estoy pensando en encontrar las tags bajo un grupo de implementación y luego encontrar las instancias con esas tags. Podría almacenar el recuento contra cada grupo de implementación en un file y usarlo para comparar la próxima vez. Pero no pude encontrar ningún command AWS CLI para encontrar las instancias con una label determinada. Supongo que algo como esto debería estar disponible porque el Panel deploy panel permite lo mismo.

Nota: Sé que si algunas instancias no son alcanzables, entonces el resultado final de la implementación se muestra como un éxito y las instancias fallidas se pueden encontrar desde el Panel de deployment de AWS Code. Pero, aún así, me gustaría saber si podría haber algún command de la CLI de AWS o alguna API disponible a través de cualquier SDK con el que pudiera encontrar el número de instancias alcanzables en un grupo de implementación.

Como observa, no hay una manera fácil de determinar las instancias que se ejecutan solo desde el nombre del grupo de deployment. Comprobé dos veces la CLI y necesita la ID del grupo de implementación para hacer reference a las instancias actualmente implementadas.

No debería necesitar tener que get la list de instancias para implementar. Esto se hace según los criterios de instancia especificados en cada grupo de deployment. ¡Concéntrese en labelr correctamente las instancias para que CodeDeploy enumere las instancias que desea automáticamente!

Debe tener cada label de grupo de deployment con las tags apropiadas EG Environment=Testing; GitBranch=ResizeQueue Environment=Testing; GitBranch=ResizeQueue . Esto se puede hacer desde la console de AWS o desde un Grupo de escalado automático para que todas las instancias de lanzamiento tengan tags válidas.

Luego, en el grupo de implementación, las instancias son conocidas por ese set de tags y pueden implementarse usando esa especificación. Puede implementar la actualización de la bifurcación solo en esas instancias.

Un par de puntos para agregar a la respuesta de Rodrigo:

  1. ¿Por qué no hay API para get instancias en un grupo de implementación? No consideramos las instancias como parte del recurso CodeDeploy (Están más cerca del recurso de EC2). Las tags y los ASG se consideran parte del recurso CodeDeploy. Otra razón es que las instancias labeldas pueden cambiar y esta parte está fuera del control de CodeDeploy: los clientes pueden eliminar / agregar instancias a través de EC2 (la misma lógica va para ASG). No queremos mostrar los resources que pueden cambiar y al mismo time fuera de nuestro control: esto causará confusión a nuestros clientes. CodeDeploy solo registrará instancias en las que se implementó: en este momento, esas instancias son parte del recurso CodeDeploy y se vuelven fijas (es por eso que tenemos las API get-deployment-instance y batch-get-deployment-instances). Dicho esto, un enfoque recomendado es usar EC2 CLI: aws ec2 describe-instances --filters "Name=tag-key,Values=Owner" para get las instancias de interés.

  2. Parece que su service es sensible a la cantidad de instancias saludables antes de la implementación. La adopción de ASG y la configuration de host mínimo saludable en CodeDeploy pueden ser útiles: no es necesario que DevOps realice ninguna intervención manual.

  3. En su sección de actualización, mencionó que debe agregar una verificación de cordura antes de la implementación inicial. Puede establecer un conteo de host saludable mínimo en la configuration de implementación de CodeDeploy. Si en el momento de la implementación, sucedió que no hay suficientes instancias para implementar, la implementación fallará rápidamente: no se tocará ninguna instancia. Si hay suficientes instancias, la implementación se iniciará y la restricción de host saludable mínima se mantendrá durante todo el process de implementación.