Automatizando el despliegue de Lambdas con Ansible en AWS

Publicado el 09 mayo 2016 por Dbigcloud @dbigcloud

En posts anteriores os he ido hablando de Ansible y de cómo automatizar tareas en nuestros servidores, también os he comentado que llevo un tiempo trabajando con Amazon Web Services y Lambdas. Llevar el mantenimiento de éstas, puede llegar a ser un poco tedioso cuando se tienen bastantes, por eso me he visto con la necesidad de automatizar el despliegue.

Ansible y AWS  se llevan bastante bien sobre todo con instancias EC2, leyendo un poco me he encontrado con un módulo, con el que poder automatizar los despliegues y mantenimiento de Lambdas con Ansible. Os voy a explicar cómo usarlo.

Para comenzar a usar el módulo de Ansible con Lambda, debemos tener instalado Ansible en nuestro servidor, si aun no lo tenéis instalado, podéis comenzar con este pequeño tutorial, una vez instalado debemos de localizar el fichero de configuración de Ansible y comprobar cual es la ruta donde guarda los módulos, una vez localizada, procedemos a clonar el repositorio de Ansible-Lambda. Para poder usar los servicios de AWS, necesitamos el ACCESS_KEY_ID y SECRET_ACCESS_KEY de una cuenta de usuario con permisos suficientes para administrar las Lambdas, estos datos los podemos encriptar usando la utilidad ansible-vault, la cual nos generará un fichero encriptado con dichos valores, con esto ya podemos comenzar a crear playbooks para la administración de las Lambdas.

Cómo usar Ansible para desplegar Lambdas, paso a paso:

Para preparar nuestro, creamos un directorio donde vamos a guardarlos módulos de Ansible.

drsromero@dbigcloud:~$ sudo mkdir -p /usr/share/ansible_modules

Editamos el fichero /etc/ansible/ansible.cfg y sustituimos la linea del path de library por el path que hemos creado anteriormente.

drsromero@dbigcloud:~$ sudo grep "library" /etc/ansible/ansible.cfg
#library   = /usr/share/my_modules/

Accedemos a la path creado enteriormente y clonamos el repositorio.

drsromero@dbigcloud:/$ cd /usr/share/ansible_modules
drsromero@dbigcloud:/usr/share/ansible_modules$ sudo git clone https://github.com/pjodouin/ansible-lambda
Clonar en «ansible-lambda»...
remote: Counting objects: 803, done. remote: Total 803 (delta 0), reused 0 (delta 0), pack-reused 803
Receiving objects: 100% (803/803), 251.83 KiB | 0 bytes/s, done.
Resolving deltas: 100% (509/509), done.>
Checking connectivity... hecho.

Ahora creamos un fichero encriptado con los valores del ACCESS_KEY_ID y SECRET_ACCESS_KEY de nuestra cuenta de AWS.

drsromero@dbigcloud:/usr/share/ansible_modules$ sudo ansible-vault create aws_vars.yml
Vault password: Confirm Vault password:
AWS_ACCESS_KEY_ID='XXXXXXXXXXXXXXXXX'
AWS_SECRET_ACCESS_KEY='XXXXXXXXXXXXXXXX'

Si queremos visualizar el fichero veremos cómo aparece encriptado.

drsromero@dbigcloud:/usr/share/ansible_modules$ sudo cat aws_vars.yml 
$ANSIBLE_VAULT;1.1;AES256 34653566313932613530656439363866643865326364306534363736363633939306564326361306
36376635373766303635623333353336613338366637356364346523423423426568341341341234
6266383566363531660a636236663938383737383566316166656465303835633663636439336337
37373331373332323466303737653735343062346136396263313565633262656334336530313663
33386236373765653835313562383666466366431654546546546546546546546548751232132189
34616636633537306539323939343338326237343962396563323862316664623338383835313036
62623393035326437333531663230323833383731336337341324134134346456776868968976856

De esta forma ya podemos usar Ansible para listar/actualizar/crear Lambdas en AWS, para probar que todo funciona correctamente podemos ejecutar el siguiente comando que nos mostrara información de todas las Lambdas.

drsromero@dbigcloud:~/ansible-playbooks$ ansible localhost -m lambda_facts
localhost | SUCCESS => {
    "ansible_facts": {
        "lambda_facts": {
            "function_list": [
                {
                    "CodeSha256": "T/7xxxxWRrqK/6Kmxxxxxxxxx=",
                    "CodeSize": 583,
                    "Description": "NO EJECUTAR - Lambda para arrancar instancias apagadas.",
                    "FunctionArn": "arn:aws:lambda:eu-west-xxxxxxxxxxxxx:function:EC2_start",
                    "FunctionName": "EC2_start",
                    "Handler": "lambda_function.lambda_handler",
                    "LastModified": "2016-04-21T06:23:24.660+0000",
                    "MemorySize": 128,
                    "Role": "arn:aws:iam::xxxxxxxxxxxx:role/lambda_start_stop",
                    "Runtime": "python2.7",
                    "Timeout": 3,
                    "Version": "$LATEST"
                }

"changed": false
}

Con esto ya podemos comenzar a crear Playbooks, en el mismo repositorio hay ejemplos para crear, eliminar o actualizar Lambdas, e incluso mantener las versiones. Espero que os sea de utilidad.


Compártelo: