Mantenimiento automático de servidores con AWS Systems manager

AWS Systems Manager es una herramienta que se utiliza para ejecutar tareas de mantenimiento en los servidores de manera automática. Por ejemplo, podemos parchear todos nuestros servidores al mismo tiempo, o realizar un snapshot, o ejecutar un comando shell script, etc.

Lo primero de todo es instalar el agente Systems Manager. En mi caso, lo voy a hacer en un servidor Centos 7 y la guía de instalación es muy sencilla.

Instalación del agente Systems Manager

En el caso del servidor CentOS 7, utilizaremos el comando yum para instalar Systems Manager, tal y como podemos ver a continuación:

[root@prt53ws1 ~]
# mkdir /tmp/ssm
[root@prt53ws1 ~]# cd /tmp/ssm
[root@prt53ws1 ssm]# yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm
Loaded plugins: fastestmirror
amazon-ssm-agent.rpm | 12 MB 00:00:01
Examining /var/tmp/yum-root-tSOyn6/amazon-ssm-agent.rpm: amazon-ssm-agent-2.3.13.0-1.x86_64
Marking /var/tmp/yum-root-tSOyn6/amazon-ssm-agent.rpm to be installed
Resolving Dependencies
--> Running transaction check
---> Package amazon-ssm-agent.x86_64 0:2.3.13.0-1 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
==========================================================================================================================================================
Package Arch Version Repository Size
Installing:
amazon-ssm-agent x86_64 2.3.13.0-1 /amazon-ssm-agent 40 M
Transaction Summary
Install 1 Package

Installed size: 40 M
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : amazon-ssm-agent-2.3.13.0-1.x86_64 1/1
Created symlink from /etc/systemd/system/multi-user.target.wants/amazon-ssm-agent.service to /etc/systemd/system/amazon-ssm-agent.service.
Verifying : amazon-ssm-agent-2.3.13.0-1.x86_64 1/1
Total size: 40 M
Installed:
amazon-ssm-agent.x86_64 0:2.3.13.0-1
Complete!
[root@prt53ws1 ssm]# systemctl enable amazon-ssm-agent
[root@prt53ws1 ssm]# systemctl start amazon-ssm-agent
[root@prt53ws1 ssm]# systemctl status amazon-ssm-agent
● amazon-ssm-agent.service - amazon-ssm-agent
Loaded: loaded (/etc/systemd/system/amazon-ssm-agent.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2018-09-10 16:35:44 CEST; 32s ago
Main PID: 6185 (amazon-ssm-agen)
CGroup: /system.slice/amazon-ssm-agent.service
└─6185 /usr/bin/amazon-ssm-agent
Sep 10 16:35:46 prt53ws1 amazon-ssm-agent[6185]: 2018-09-10 16:35:45 INFO [OfflineService] Starting message polling
Sep 10 16:35:46 prt53ws1 amazon-ssm-agent[6185]: 2018-09-10 16:35:45 INFO [OfflineService] Starting send replies to MDS
Sep 10 16:35:46 prt53ws1 amazon-ssm-agent[6185]: 2018-09-10 16:35:45 INFO [LongRunningPluginsManager] starting long running plugin manager
Sep 10 16:35:46 prt53ws1 amazon-ssm-agent[6185]: 2018-09-10 16:35:45 INFO [LongRunningPluginsManager] there aren't any long running plugin to execute
Sep 10 16:35:46 prt53ws1 amazon-ssm-agent[6185]: 2018-09-10 16:35:45 INFO [LongRunningPluginsManager] There are no long running plugins current...lthcheck
Sep 10 16:35:47 prt53ws1 amazon-ssm-agent[6185]: 2018-09-10 16:35:45 INFO [StartupProcessor] Executing startup processor tasks
Sep 10 16:35:47 prt53ws1 amazon-ssm-agent[6185]: 2018-09-10 16:35:45 INFO [StartupProcessor] Write to serial port: Amazon SSM Agent v2.3.13.0 is running
Sep 10 16:35:47 prt53ws1 amazon-ssm-agent[6185]: 2018-09-10 16:35:45 INFO [StartupProcessor] Write to serial port: OsProductName: CentOS Linux
Sep 10 16:35:47 prt53ws1 amazon-ssm-agent[6185]: 2018-09-10 16:35:45 INFO [StartupProcessor] Write to serial port: OsVersion: 7
Sep 10 16:36:06 prt53ws1 amazon-ssm-agent[6185]: 2018-09-10 16:36:06 INFO [MessagingDeliveryService] [Association] No associations on boot. Req...seconds.
Hint: Some lines were ellipsized, use -l to show in full.
[root@prt53ws1 ssm]#

Ejecución de un comando en remoto con Systems Manager

Una vez que hemos instalado el agente, vamos a ejecutar un comando en remoto en uno de nuestros servidores a modo de prueba para entender su funcionamiento.

En primer lugar, vamos a la consola EC2 y al menú «Run Command» de la sección Systems Manager.

AWS Systems Manager Run Command

Definimos los detalles del comando que queremos ejecutar.

AWS Systems Manager Run Command Command definition

Lo ejecutamos y vemos su resultado:

AWS Systems Manager Command
AWS Systems Manager Command view result

Como soy un tío muy responsable, en este caso no tenía ningún paquete a actualizar.

AWS Systems Manager Command output

Ahora ya nos hemos hecho una idea de cómo funciona Systems Manager pero la idea de esto es poder realizar el mantenimiento automático de cientos de servidores e ir programando tareas, por ejemplo, para los servidores de desarrollo y luego para los de producción.

Enviar un comando a un servidor remoto mediante AWS Systems Manager

[root@ip-10-0-4-252 ~]# aws ssm send-command –document-name «AWS-RunShellScript» –parameters commands=[«ls -la > /tmp/ls.txt«] –targets «Key=instanceids,Values=i-0093481eeaab71526»
{
«Command»: {
«Comment»: «»,
«Status»: «Pending»,
«MaxErrors»: «0»,
«Parameters»: {
«commands»: [
«ls -la > /tmp/ls.txt»
]
},
«ExpiresAfter»: 1536851337.126,
«ServiceRole»: «»,
«DocumentName»: «AWS-RunShellScript»,
«TargetCount»: 0,
«OutputS3BucketName»: «»,
«NotificationConfig»: {
«NotificationArn»: «»,
«NotificationEvents»: [],
«NotificationType»: «»
},
«CompletedCount»: 0,
«Targets»: [
{
«Values»: [
«i-0093481eeaab71526»
],
«Key»: «instanceids»
}
],
«StatusDetails»: «Pending»,
«ErrorCount»: 0,
«OutputS3KeyPrefix»: «»,
«RequestedDateTime»: 1536844137.126,
«CommandId»: «cc0faa41-bbb8-4ad2-9dfd-055f7bac9f63»,
«InstanceIds»: [],
«MaxConcurrency»: «50»
}
}
[root@ip-10-0-4-252 ~]#

Si nos conectamos al servidor remoto, veremos que ha ejecutado el comando:

[root@prt53ws1 ~]# head /tmp/ls.txt
total 229424
dr-xr-xr-x. 2 root root 28672 Sep 11 17:21 .
drwxr-xr-x. 13 root root 155 May 14 16:08 ..
-rwxr-xr-x 1 root root 41480 Apr 11 06:35 [
-rwxr-xr-x 1 root root 107856 Aug 2 2017 a2p
-rwxr-xr-x 1 root root 52720 Jun 27 15:49 ab
-rwxr-xr-x 2 root root 36734 Jun 10 2014 aclocal
-rwxr-xr-x 2 root root 36734 Jun 10 2014 aclocal-1.13
-rwxr-xr-x 1 root root 29200 Jun 27 15:26 addr2line
-rwxr-xr-x 1 root root 29 Apr 11 02:53 alias
[root@prt53ws1 ~]#

Te puede interesar

Tutorial de shell script en Linux

COMPÁRTEME

Deja un comentario