Tutorial: actualización de las dependencias de la aplicación, implementación de una revisión a un nodo administrado y realización de una comprobación de estado específica de la aplicación mediante la consola
En muchos casos, un nodo administrado debe reiniciarse una vez que se haya aplicado la revisión correspondiente a la última actualización de software. No obstante, el reinicio de un nodo en producción sin contar con las debidas medidas de protección puede ocasionar varios problemas, como la invocación de alarmas, el registro de datos de métrica incorrectos y la interrupción de las sincronizaciones de datos.
En este tutorial se demuestra cómo evitar este tipo de problemas a través del uso del documento de AWS Systems Manager (documento de SSM) AWS-RunPatchBaselineWithHooks
para realizar una operación de implementación de una revisión compleja y de varios pasos que permita lograr lo siguiente:
-
impedir nuevas conexiones a la aplicación
-
instalar las actualizaciones del sistema operativo.
-
actualizar las dependencias del paquete de la aplicación
-
reiniciar el sistema
-
realizar una comprobación de estado específica de la aplicación
Para este ejemplo, se ha configurado la infraestructura de la siguiente manera:
-
Las máquinas virtuales de destino se registran como nodos administrados con Systems Manager.
-
Iptables
se utiliza como un firewall local. -
La aplicación alojada en los nodos administrados se ejecuta en el puerto 443.
-
La aplicación alojada en los nodos administrados es una aplicación de
nodeJS
. -
El administrador de procesos pm2 es el encargado de administrar la aplicación alojada en los nodos administrados.
-
La aplicación ya cuenta con un punto de enlace de comprobación de estado especificado.
-
El punto de enlace de comprobación de estado de la aplicación no requiere autenticación del usuario final. El punto de enlace permite una comprobación de estado conforme a los requisitos de la organización a la hora de establecer la disponibilidad. (En sus entornos, es posible que sea suficiente con solo comprobar que la aplicación de
nodeJS
se está ejecutando y es capaz de atender las solicitudes. No obstante, en otros casos, es posible que se desee verificar también que se ha establecido una conexión con el nivel de almacenamiento en caché o el nivel de base de datos).
Los ejemplos expuestos en este tutorial son únicamente para fines ilustrativos y no se pretende su implementación como tales en entornos de producción. Asimismo, tenga en cuenta que la característica de los enlaces de ciclo de vida de Patch Manager, una herramienta de Systems Manager, con el documento AWS-RunPatchBaselineWithHooks
puede admitir muchos otros casos. A continuación, se presentan varios ejemplos.
-
Detenga un agente de informes de métricas antes de aplicar una revisión y reiniciarlo después de que el nodo administrado se reinicie.
-
Desconecte el nodo administrado de un clúster de CRM o PCS antes de aplicar las revisiones y vuelva a adjuntarlo después de reiniciar el nodo.
-
Actualice el software de terceros (por ejemplo, Java, Tomcat, aplicaciones de Adobe, etc.) en las máquinas de Windows Server luego de aplicar las actualizaciones del sistema operativo (SO), pero antes de que el nodo administrado se reinicie.
Para actualizar las dependencias de la aplicación, aplicar una revisión a un nodo administrado y realizar una comprobación de estado específica de la aplicación
-
Cree un documento de SSM para su script de preinstalación con el siguiente contenido y asígnele el nombre
NodeJSAppPrePatch
. Sustituyayour_application
por el nombre de la aplicación.Este script bloquea inmediatamente las nuevas solicitudes entrantes y proporciona cinco segundos para que las ya activas se completen antes de comenzar la operación de aplicación de parches. Para la opción
sleep
, especifique una cantidad de segundos mayor que la que suele tardar en completarse las solicitudes entrantes.# exit on error set -e # set up rule to block incoming traffic iptables -I INPUT -j DROP -p tcp --syn --destination-port 443 || exit 1 # wait for current connections to end. Set timeout appropriate to your application's latency sleep 5 # Stop your application pm2 stop
your_application
Para obtener más información acerca de la creación de documentos de SSM, consulte Crear contenido en el documento de SSM.
-
Cree otro documento SSM con el siguiente contenido para su script de posinstalación para actualizar las dependencias de su aplicación y asígnele el nombre
NodeJSAppPostPatch
. Sustituya/your/application/path
por la ruta de acceso a su aplicación.cd
/your/application/path
npm update # you can use npm-check-updates if you want to upgrade major versions -
Cree otro documento de SSM con el siguiente contenido para que su script de
onExit
recupere su aplicación y realice una comprobación de estado. Asigne un nombre a este documento de SSMNodeJSAppOnExitPatch
. Sustituyayour_application
por el nombre de la aplicación.# exit on error set -e # restart nodeJs application pm2 start
your_application
# sleep while your application starts and to allow for a crash sleep 10 # check with pm2 to see if your application is running pm2 pidyour_application
# re-enable incoming connections iptables -D INPUT -j DROP -p tcp --syn --destination-port # perform health check /usr/bin/curl -m 10 -vk -A "" http://localhost:443/health-check || exit 1 -
Cree una asociación en State Manager, una herramienta de AWS Systems Manager para ejecutar la operación mediante los siguientes pasos:
Abra la consola de AWS Systems Manager en https://console.aws.amazon.com/systems-manager/
. -
En el panel de navegación, elija State Manager y, a continuación, elija Create association (Crear asociación).
-
En Name (Nombre) proporcione un nombre que ayude a identificar la finalidad de la asociación.
-
En la lista Document (Documento), elija
AWS-RunPatchBaselineWithHooks
. -
En Operation (Operación), elija Install (Instalar).
-
(Opcional) En Snapshot Id, (ID de instantánea), proporcione un valor GUID que genere de modo que le permita agilizar la operación y garantizar la consistencia. El valor GUID puede ser tan sencillo como
00000000-0000-0000-0000-111122223333
. -
En Pre Install Hook Doc Name (Nombre del documento del enlace de preinstalación), ingrese
NodeJSAppPrePatch
. -
En Post Install Hook Doc Name (Nombre del documento del enlace de posinstalación), ingrese
NodeJSAppPostPatch
. -
En On ExitHook Doc Name (Nombre del documento del enlace de salida), ingrese
NodeJSAppOnExitPatch
.
-
En el caso de Targets (Destinos), especifique etiquetas, elija nodos manualmente, elija un grupo de recursos o elija todos los nodos administrados para identificar sus nodos administrados.
-
En Specify schedule (Especificar programación), especifique con qué frecuencia se ejecutará la asociación. En el caso de la aplicación de revisiones en el nodo administrado, la cadencia habitual suele ser una vez a la semana.
-
En la sección Rate control (Control de velocidad), elija las opciones para controlar cómo se ejecuta la asociación en varios nodos administrados. Asegúrese de que solo se actualiza una parte de los nodos administrados a la vez. De lo contrario, toda su flota o la mayor parte de ella podría quedar sin conexión a la vez. Para obtener más información sobre el uso de controles de velocidad, consulte Comprensión de los controles de frecuencia y destinos en las asociaciones de State Manager.
(Opcional) En Output options (Opciones de salida), para guardar la salida del comando en un archivo, seleccione el cuadro Enable writing output to S3 (Permitir la escritura de salida en S3). Ingrese los nombres del bucket y del prefijo (carpeta) en los cuadros.
nota
Los permisos de S3 que conceden la capacidad de escribir datos en un bucket de S3 son los del perfil de instancias asignado al nodo administrado, no los del usuario de IAM que realiza esta tarea. Para obtener más información, consulte Configuración de permisos de instancia requeridos para Systems Manager o Creación de un rol de servicio de IAM para un entorno híbrido. Además, si el bucket de S3 especificado se encuentra en una Cuenta de AWS diferente, verifique que el perfil de instancias o el rol de servicio de IAM asociado al nodo administrado tenga los permisos necesarios para escribir en ese bucket.
-
Elija Crear asociación.