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.
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: