Categories
Community General Guide In detail Interoperability OpenSource Security Social

LIBRO CLOUDADMINS: Devops y seguridad Cloud

Hola a tod@s,

NOVEDAD! LIBRO BY @cloudadms

Conceptos DevOps avanzados, casos de uso con Rancher (K8S), AWS, OpenNebula, Jenkins, Terraform
http://www.editorialuoc.cat/devops-y-seguridad-cloud
devopsyseguridadcloud
 
DevOps y seguridad cloud surge como parte del material elaborado en el posgrado en Administración y Cloud Computing de la UOC, programa dirigido a los que deseen orientar su experiencia al ámbito de la computación y modelos cloud. Con el objetivo de capacitar a la empresa y a sus profesionales de IT, ofrece los conocimientos, habilidades y herramientas necesarias para perfiles especialistas en el ámbito DevOps y computación en la nube, un perfil profesional altamente demandado en el mercado laboral, tanto en el ámbito nacional como internacional.
 
La nube comprende el concepto básico por el que definiremos la entrega de servicios informáticos a clientes o usuarios por medio de una red. Este nuevo modelo de prestación de servicios permite añadir una capa de abstracción frente a los clientes que no saben dónde estos están ubicados (normalmente alojados en varios proveedores y repartidos por todo el mundo) ni la gestión de recursos que usan. Los servicios en la nube atienden las peticiones recibidas y aportan una flexibilidad y adaptabilidad de recursos frente a la demanda de forma totalmente transparente.
En el libro una vez vistos los conceptos básicos a modo de introducción, se centra en la materia necesaria para tener una visión más avanzada sobre el enfoque del rol de DevOps.

  • Uno de los puntos en los que centraremos nuestra atención es la gestión de la configuración, que nos permitirá acercar todos los entornos que utilizaremos para que sean lo más parecidos posible al entorno de producción final.
  • Uno de los pilares de DevOps es la integración continua que permite agregar los pequeños cambios realizados por los desarrolladores al conjunto de software desarrollado de manera que puedan ser testados y desplegados en entornos de desarrollo lo antes posible. • Veremos también diferentes estrategias de ‘testing’, todas ellas con el objetivo de minimizar los posibles errores que puedan producirse en los entornos productivos. Asimismo, se intentan detectar los errores en etapas tempranas del desarrollo cuando su corrección es más sencilla y menos costosa. • Como continuación de la integración continua veremos el concepto de entrega continua en su aplicación más práctica, donde aprovecharemos para explicar un extenso ejemplo.

Y en consecuencia, ¿interesado/a en cómo afrontarlo?

  • La gestión de infraestructura y de los diferentes entornos como resultado de las distintas etapas de la entrega continua. Tanto la infraestructura como los diferentes entornos deben ser extremadamente flexibles para adaptarse rápidamente a los cambios que se puedan producir en las diferentes etapas del desarrollo.
  • La gestión de los datos también representa un reto en cuanto que deben ser persistentes y estar disponibles a pesar de que el software que da acceso a ellos va cambiando constantemente.

usecases
Ahora depende de ti, reserva tu libro y sumérgete en retos como son la integración continua (CI) y la entrega continua (CD) de la mano de tecnologías de containers como Docker y plataformas como Kubernetes (K8S), bajo servicios de infraestructura como Amazon Web Services (AWS), herramientas de automatización como Terraform y de testing como Jenkins. Practica y vive una experiencia que te llevará al siguiente nivel. Y no olvides de compartir tu experiencia con nosotros, menciona @cloudadms en Twitter. ¡SUERTE! http://www.editorialuoc.cat/devops-y-seguridad-cloud

Categories
General Guide In detail Security

Hiera-eyaml: A salvo de miradas indiscretas


Para todos aquellos que utilizamos Puppet habitualmente hemos implementado módulos para distintos entornos (development, testing, production), distintos problemas, pautas, ideas… Cada una de las declaraciones que podemos hacer en ellos puede tener requerimientos distintos y debemos tener en cuenta los cambios que pueden surgir en un futuro. Probablemente nos hemos encontrado en la situación en la que hemos integrado nuestros datos de configuración (direcciones IP, nombres de aplicaciones, credenciales, o cualquier tipo de datos que no queramos compartir) en el código de nuestro repositorio.
Existen distintos métodos para separar esta información sensible, a continuación explicaremos como hacerlo a través de Hiera y eyaml.
Hiera es una herramienta de búsqueda de pares clave/valor para configurar información. Hiera-eyaml es un backend para Hiera que nos proporciona pares de clave/valor cifradas en ficheros yaml para ser utilizadas a través de Puppet.
PD: Si utilizáis algún gestor de versiones de Ruby como rbenv o rvm tenedlo en cuenta al instalar hiera y hiera-eyaml 😉
Podemos tomar como ejemplo la configuración de un módulo para gestionar el servicio SSH:

class ssh {
  $ssh_packages      = ['openssh','openssh-clients','openssh-server']
  $permit_root_login = 'no'
  $ssh_users         = ['root','jeff','gary','hunter']
  package { $ssh_packages:
    ensure => present,
    before => File['/etc/ssh/sshd_config'],
  }
  file { '/etc/ssh/sshd_config':
    ensure  => present,
    owner   => 'root',
    group   => 'root',
    mode    => '0644',
    # Template uses $permit_root_login and $ssh_users
    content => template('ssh/sshd_config.erb'),
  }

Y este sería la plantilla que podríamos utilizar para el fichero sshd_config:

Protocol 2
SyslogFacility AUTHPRIV
PasswordAuthentication yes
ChallengeResponseAuthentication no
GSSAPIAuthentication yes
GSSAPICleanupCredentials yes
# PermitRootLogin Setting
PermitRootLogin <%= permit_root_login %>
# Allow individual Users
<% ssh_users.each do |user| -%>
AllowUser <%= user %>
<% end -%>
# Accept locale-related environment variables
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL
X11Forwarding yes
Subsystem	sftp	/usr/libexec/openssh/sftp-server

Con Hiera podemos hacer referencia a las variables más sensibles cambiando estas 3 lineas:

$ssh_packages      = hiera('ssh_packages')
$permit_root_login = hiera('permit_root_login')
$ssh_users         = hiera('ssh_users')

 
 
Hiera-eyaml nos puede ayudar a evitar comprometer nuestros datos sensible en el backend configurado con hiera. Podemos seguir este procedimiento para lograrlo:

  1. Generar claves pública y privada, por defecto las crea dentro del directorio ./keys en que ejecutemos el siguiente comando. $ eyaml createkeys
  2.  

  3. Añadimos el backend eyaml a la configuración de Hiera en /etc/hiera.yaml
    ---
    :backends:
        - eyaml
        - yaml
    :hierarchy:
        - %{environment}
        - common
    :yaml:
        :datadir: '/etc/puppet/hieradata'
    :eyaml:
        :datadir: '/etc/puppet/hieradata'
        # If using the pkcs7 encryptor (default)
        :pkcs7_private_key: /path/to/private_key.pkcs7.pem
        :pkcs7_public_key:  /path/to/public_key.pkcs7.pem
  4.  

  5. Añadir un fichero de configuración eyaml, de este modo no deberemos especificar la ubicación cada vez que queramos cifrar datos, por defecto sería ~/.eyaml/config.yaml pero podemos sobrescribir esta configuración con la variable de entorno EYAML_CONFIG.
  6.  

  7. Encriptamos los datos con el comando $ eyaml encrypt -p y obtenemos un string similar a este
    ENC[PKCS7,Y22exl+OvjDe+drmik2XEeD3VQtl1uZJXFFF2NnrMXDWx0csyqLB/2NOWefvNBTZfOlPvMlAesyr4bUY4I5XeVbVk38XKxeriH69EFAD4CahIZlC8lkE/uDhjJGQfh052eonkungHIcuGKY/5sEbbZl/qufjAtp/ufor15VBJtsXt17tXP4yl5ZP119Fwq8xiREGOL0lVvFYJz2hZc1ppPCNG5lwuLnTekXN/OazNYpf4CMd/HjZFXwcXRtTlzewJLc+/gox2IfByQRhsI/AgogRfYQKocZgFb/DOZoXR7wmIZGeunzwhqfmEtGiqpvJJQ5wVRdzJVpTnANBA5qxeA==]
  8.  

  9. En este punto ya podemos añadir la información cifrada en el fichero eyaml definido en el segundo paso.
    ssh::permit_root_login: ENC[PKCS7,Y22exl+OvjDe+drmik2XEeD3VQtl1uZJXFFF2NnrMXDWx0csyqLB/2NOWefvNBTZfOlPvMlAesyr4bUY4I5XeVbVk38XKxeriH69EFAD4CahIZlC8lkE/uDhjJGQfh052eonkungHIcuGKY/5sEbbZl/qufjAtp/ufor15VBJtsXt17tXP4yl5ZP119Fwq8xiREGOL0lVvFYJz2hZc1ppPCNG5lwuLnTekXN/OazNYpf4CMd/HjZFXwcXRtTlzewJLc+/gox2IfByQRhsI/AgogRfYQKocZgFb/DOZoXR7wmIZGeunzwhqfmEtGiqpvJJQ5wVRdzJVpTnANBA5qxeA==]
  10.  
     

Debemos tener especial cuidado con las claves generadas con hiera-eyaml y administrar la información cifrada con nuestro gestor de claves favorito (KeepassX, Passpack, etc.) 
En conclusión podemos obtener varias ventajas de utilizar Hiera en combinación con hiera-eyaml, entre ellas:

  • Facilita la configuración de los distintos entornos: configuramos fácilmente datos por defecto con múltiples niveles de override.
  • Facilita la reutilización de los módulos públicos de Puppet: No edites el código, sólo coloca la información necesaria en Hiera.
  • Facilita la colaboración: No necesitas preocuparte de limpiar tu información antes de mostrar el módulo.

 
Saludos!

Categories
Bigdata General Guide In detail

Como configurar una replicación Master-Slave en MySQL Percona 5.5

image
En MySQL (no Percona) si queremos realizar un servidor de replicación (Slave) nos encontramos que antes de realizar el backup, debemos bloquear la escritura en las tablas, apuntar la posición del log binario, realizar el backup y habilitar nuevamente la escritura en las tablas. Esto se tiene que realizar así, porque si durante el proceso de backup se escribe algo en una tabla, la relación entre la posición del log binario que hemos apuntado y el contenido del backup no será correcto y si usáramos ese backup para realizar la replicación, la base de datos slave seria diferente a la base de datos master. El problema de lo que acabo de citar, es que si queremos hacer esto con una base de datos de una web en producción, deberemos poner la web en mantenimiento y según el tamaño de la base de datos pueden llegar a ser horas en las que la web no estará operativa y hay situaciones en las que no podemos permitirnos ese lujo (perdidas económicas). Para evitar pasar por este problema, si disponemos de un servidor de bases de datos con Percona MySQL 5.5, podemos realizar esta tarea de forma muy sencilla y sin necesidad de bloquear la escritura en las tablas en el proceso de backup, gracias a una herramienta de Percona llamada ‘innobackupex’, que lo que hace es que durante el proceso de backup cree un fichero independiente con todas las transacciones que se realizan durante el proceso, y una vez termina, integra en el backup esas transacciones y finalmente nos genera la posición del log binario correcta. Para realizar este proceso, simplemente deberemos seguir los siguiente pasos:
DATOS INICIALES QUE NECESITAMOS (IP O HOSTNAME DE AMBOS SERVIDORES)

MASTER_HOST='m.m.m.m'
SLAVE_HOST='s.s.s.s'

PASOS A REALIZAR EN EL SERVIDOR BD MASTER
1. Accedemos vía SSH y nos cercioramos de que la hora del servidor es la correcta
2. Instalamos el paquete ‘percona-xtrabackup’ (forma parte del mismo repositorio de donde hemos descargado Percona MySQL) que nos proporcionará la aplicación “innobackupex” que usaremos para realizar el proceso:

yum install percona-xtrabackup

3. Creamos el usuario en Percona MySQL, que realizará la réplica de la BD:

mysql -uroot -p******
mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO repl_user_name@'s.s.s.s' IDENTIFIED BY 'pass_repl_user';
mysql> exit

4. Nos anotamos los valores que hemos usado en la creación del usuario:

MASTER_USER='repl_user_name'
MASTER_PASSWORD='pass_repl_user'

5. Editamos el fichero de configuración de Percona MySQL (my.cnf) con nuestro editor favorito (en este caso vim):

vim /etc/my.cnf

6. Añadimos los siguientes valores (o modificamos las variables si ya existen):

log-bin=mysql-bin
server_id=1

7. Reiniciamos el servicio de Percona MySQL, para aplicar los cambios que hemos realizado en el fichero de configuración.

/etc/init.d/mysql restart

PASOS A REALIZAR EN EL SERVIDOR BD SLAVE
1. Accedemos vía SSH y nos cercioramos de que la hora del servidor es la misma que la del servidor master
2. Instalamos el paquete ‘percona-xtrabackup’:

yum install percona-xtrabackup

3. Editamos el fichero de configuración de Percona MySQL (my.cnf) con nuestro editor favorito (en este caso vim):

vim /etc/my.cnf

4. Añadimos los siguientes valores (o modificamos las variables si ya existen):

server_id=2
relay_log=mysql-relay-bin
log_slave_updates=1
read_only=1

5. Reiniciamos el servicio de Percona MySQL, para aplicar los cambios que hemos realizado en el fichero de configuración:

/etc/init.d/mysql restart

PASOS A REALIZAR EN EL SERVIDOR BD MASTER
1. Realizamos backup de todas las bases de datos con la aplicación innobackupex al directorio “backup” que hemos creado previamente:

innobackupex --defaults-file=/etc/my.cnf --user=root --password=password_del_usuario_root --export /root/backup/

2. Al terminar el backup, veremos el siguinte texto, del que anotaremos los valores de MASTER_LOG_FILE y MASTER_LOG_POS:

'mysql-bin.000000', position 000
MASTER_LOG_FILE='mysql-bin.00000'
MASTER_LOG_POS=000

3. Comprimimos el directorio de backup que se ha creado (nombre del directorio con la fecha y hora) en formato tar.gz:

tar czvf 2014-xxxxxxx.tar.gz /root/backup/2014-xxxxxxx

4. Eliminamos el directorio que ya hemos comprimido (para liberar espacio):

rm -Rf /root/backup/2014-xxxxxxx/

5. Copiamos por SSH el backup comprimido al servidor BD Slave (a un directorio previamente creado):

scp 2014-xxx.tar.gz root@s.s.s.s:/root/backup/.

PASOS A REALIZAR EN EL SERVIDOR BD SLAVE
1. Accedemos al directorio donde hemos copiado el backup comprimido

cd /root/backups/

2. Descomprimimos el backup:

tar xzvf 2014-xxx.tar.gz

3. Realizamos el paso previo a la restauración del backup. Especificamos la memoria que destinaremos al proceso:

innobackupex --use-memory=1G --apply-log /root/backup/2014-xxx

4. Paramos el servicio de Percona MySQL:

/etc/init.d/mysql stop

5. Eliminamos todo el contenido del directorio de mysql:

rm -Rf /var/lib/mysql/*

6. Restauramos el backup:

innobackupex --copy-back /root/backup/2014-xxx

7. Restablecemos los permisos al directorio de Percona MySQL:

chown -R mysql:mysql /var/lib/mysql

8. Reiniciamos el servicio de Percona MySQL, para que cargue los datos restaurados con el backup

/etc/init.d/mysql start

9. Configuramos los datos del servidor master, con los datos previamente recogidos (el valor de MASTER_LOG_POS va sin comillas):

mysql -uroot -p******
mysql> CHANGE MASTER TO MASTER_HOST='m.m.m.m', MASTER_USER='repl_user_name', MASTER_PASSWORD='pass_repl_user', MASTER_LOG_FILE='mysql-bin.000', MASTER_LOG_POS=000;

10. Comenzamos la replicación:

mysql> START SLAVE;

11. Vemos el estado de la réplica, y nos fijamos en el valor de “Second Behind Master”. Cuando llegue este valor a cero, la replicación estará finalizada:

mysql> SHOW SLAVE STATUS\G;
Categories
General Guide

Gestionar discos en Amazon Web Services (AWS)


Si trabajamos con Amazon Web Services, uno de los servicios que usaremos sin duda es EC2. Con EC2 podremos crear instancias (máquinas virtuales) con gran facilidad, y estas, están directamente ligadas al uso de volúmenes EBS (discos virtuales).
Una de las dudas con las que me encuentro a menudo usando instancias EC2 con volúmenes EBS, es elegir bien la capacidad que asignar al disco basándome en el uso que le voy a dar a esa instancia. Si que es verdad que podemos mas a o menos calcularlo, pero a veces nos podemos quedar cortos, ya que nunca sabes si en un futuro vas a implementar algo que pueda requerir mucho espacio… como una base de datos que puede ir creciendo.
Para evitar esto, y no tener que asignar muchísimo espacio que no vamos a usar a corto plazo (ya que el coste esta directamente relacionado con la capacidad asignada a un disco EBS) la mejor solución es usar LVM (Logical Volume Manager).
A continuación voy a explicar los pasos a seguir, mas comunes, para gestionar volúmenes EBS sobre una instancia EC2 ya creada.

Categories
General Guide

Homebrew – Servicio Cloud SSH


Soy Aitor Roma, CEO de RedAven.com una empresa dedicada a la administración de sistemas y a partir de ahora una nueva incorporación de CloudAdmins.org
Antes de escribir este post hice unas votaciones en Facebook i en las listas de CloudAdmins (Donde os recomiendo que os inscribáis ya que se pueden producir debates muy interesantes), para ver el interés que podría tener varios artículos que tenía pensados. Este es el articulo ganador en las votaciones!

Categories
Bigdata General Guide In detail NoSQL OpenSource Social

Datos en formato Grafo (Parte II – Web Semántica o Linked Data)

La Web Semántica también llamada Web 3.0 o Linked Data, es una funcionalidad de la Web que permite encontrar, compartir y combinar la información más fácilmente. Es una iniciativa de Tim_Berners-Lee (director del W3C e inventor de la Web) para permitir que la información que reside en la red sea accesible y “comprensible” no sólo por los humanos, sino también por las máquinas. Es una revolución tecnológica que está cambiando la forma de entender la Web y obligando a que todo evolucione: los buscadores, los navegadores, el desarrollo y el SEO.  Aquí es donde aparecen actores que quizás no les interese esta evolución.

La Web Semántica propone nuevas técnicas y paradigmas para la representación del conocimiento que faciliten la localización, compartición e integración de recursos a través de la Web. Estas nuevas técnicas se basan en la introducción de conocimiento semántico explícito que describa y/o estructure la información y servicios disponibles, de forma apropiada de ser procesada automáticamente por un software. La Web Semántica mantiene los principios que han hecho de la web actual un éxito, como son los principios de descentralización, compartición, compatibilidad, y la apertura al crecimiento.

Hay artículos que mencionan el fin de los grandes buscadores como Google si se aplicara la Web Semántica en toda la red. En este contexto un problema clave es alcanzar un entendimiento entre usuarios, desarrolladores y programas de muy diverso perfil. Uno de los ejes principales de esta visión es la noción de ontología, que viene del campo de la Inteligencia artificial, como herramienta clave para alcanzar dicho entendimiento entre las partes que participan de este conocimiento común.

Esquema de la Web Semántica

grafic1

Para entender la Web Semántica en su totalidad tenemos que entender las partes de RDF, OWL y el lenguaje de consultas sobre estos formatos denominados SPARQL. Como se puede ver en el siguiente esquema, un XML es un subconjunto RDF, como un RDF es un subconjunto de OWL. Vienen a ser un OWL que incluye las propiedades del RDF y el RDF incluya las propiedades del XML.

OWL, RDF y XML

grafic2

Comparación Web Actual con Web Semántica

En el gráfico se puede ver una comparativa de la Web Semántica con la Web actual, tal como se relacionan sus elementos entre ellas. El HTML tiene un tipo de relación simple llamada hipervínculo (HREF) que relaciona recursos (HTML) sin nombrar el tipo de relación, en cambio la Web Semántica tiene muchos tipos de relaciones entre distintos tipos de información, esta es una de las principales grandezas que tiene esta nueva tecnología.

grafic

Comparación generación Web actual con Web Semántica

Característica 1ª Generación 2ª Generación
Lenguaje principal HTML XML (RDF, OWL)
Forma y estructura Documentos no estructurados Documentos estructurados
Semántica Semántica implícita Etiquetado explícito (metadatos, web semántica)
Relación entre contenido y forma HTML = fusión de forma y contenido Estructura en capas de forma y contenido: XML + transformación (p.ej., XSL) a HTML, WML, PDF, u otros formatos
Editabilidad Documentos estáticos Documentos dinámicos
Descomponibilidad y recomponibilidad Sitios web monolíticos, independientes Bricolaje (agregación), sindicación, reasignación de contenido
Interactividad Medio de difusión unidireccional Web editable, bidireccional
Audiencias Para consumo humano Para humanos y ordenadores (p.ej., servicios web)
Control de producción Centralizado Descentralizado (peer-to-peer P2P)

Utilidad y ventajas de la Web Semántica

Para el fin de recuperar información, la Web semántica pretende la creación de una nueva forma de intercambio de datos que se fundamente en las representaciones de la información contenida en los recursos de la Web, de manera que puedan ser entendidos por las máquinas.

Se busca la mejora en la comunicación entre las máquinas y los humanos, reduciendo considerablemente la acción de estos segundos sobre los primeros. La forma de conseguirlo es dando a la Web un mayor significado, con lo cual se favorece la compartición, procesamiento y transferencia de información de forma sencilla.

La principal ventaja de la Web Semántica es recuperar información. Ésta permite al usuario dejar en manos del software, tareas de procesamiento o razonamiento de un determinado contenido. Por otra parte, el introducir significado a una Web mejora la eficacia de los buscadores, ya que facilita su tarea de estudio del documento. De esta manera, se puede afirmar que la Web Semántica facilita la localización de recursos; la comunicación entre programas y personas; y el procesamiento y manipulación de datos e información de manera automática en lugar de manualmente, como hasta ahora.

En conclusión, se intenta llegar a un estándar en esquematizar la información para poder poner la gran cantidad de información de la red en orden. Una mejor organización significa una mejor agilidad en moverse por la red. Además que se distribuye de forma más humana posible en comparación como se hace actualmente.

Algunos creen que la implementación de la nueva web será el fin de los grandes buscadores (ya que la web pasaría a ser descentralizada); otros que simplemente evolucionarán a mejor aunque tendremos más varias disponibilidades; o otros creen que habrán buscadores más temáticos y no tan generales. Lo más importante es que la libre circulación de la información dará mejores resultados.

Como ejemplos de casos prácticos actuales podemos encontrar:

  • Redes Sociales como Facebook, LinkedIn, Myspace, OpenSocial, etc.

  • Amarok y otros reproductores MP3 que tienen una base de datos de música en RDF.

  • Parecido a las redes sociales hay el buscador y reproductor musical Spotify, Last.fm. dónde el usuario, a partir de un grupo de música puede ir descubriendo grupos o músicas semejantes.

  • Hay experimentos como la Dbpedia.org que mapea toda la información de la Wikipedia para ser migrada a RDF. Otros como OntoWorld es un nuevo buscador desarrollado por MediaWiki. Hice pruebas con la DBPedia y busqué “Viajar+Joven” y me apareció Albergues (aquí la inteligéncia de que automáticamente relacionó Joven con viajes LowCost)

Antecedentes

Antes de entender la Web Semántica, hay que entender sus antecedentes y su evolución hacia la posible Web 3.0.

En el inicio del WWW (World Wide Web) teníamos la Web 1.0 donde todas las páginas eran estáticas, principalmente creadas con el lenguaje HTML, con unos buscadores muy limitados. La mayoría de contribución de la red eran Webs de corporaciones, identidades públicas y privadas. El usuario tenía muy limitada su participación en ellas lo que la convertía en una red unidireccional. Más tarde, se empezó con la creación de páginas personales estáticas. Posteriormente, el Web 2.0 revolucionó el WWW con la llegada de lenguajes como el PHP, Flash, Java, etc. Estos lenguajes permitieron desarrollar Webs dinámicas y multimedia. La web dinámica tiene como principal protagonista el usuario humano que escribe artículos en su blog o colabora en un wiki. En cambio, la web semántica orienta el protagonismo en agentes inteligentes que entiendan de lógica descriptiva en OWL; y concebida para que las máquinas hagan el trabajo de las personas a la hora de procesar la avalancha de información publicada en la Web. Con ella encontramos ya inteligencia artificial en la web.

No está aún del todo claro si la Web Semántica y la Web 3.0 son sinónimas. Se comenta que “Web 3.0” es aún un concepto demasiado abstracto para definirlo. La web 3.0 será una revolución, si como hemos comentado anteriormente; se logra una combinación efectiva entre la inclusión de contenido semántico en las páginas web y el uso de inteligencia artificial que saque partido de ella.

Podemos comprobar que el rápido desarrollo de la sociedad de la información, en concreto de las tecnologías implicadas, ha hecho posible la superación de muchas barreras. Por ejemplo: el almacenamiento de datos es un reto superado, la comunicación es también otro problema resuelto gracias a Internet. Entonces, ¿cuáles son los nuevos retos a superar? Según muchos, es la búsqueda de información y su integración.

El ejemplo más claro y más rápido que se puede encontrar está en Internet. A pesar de la gran cantidad de información que hay en la red, no se encuentra siempre lo que se busca y a veces se tarda mucho en encontrarlo. Los metadatos y las ontologías intentan mejorar estos inconvenientes, y la Web Semántica se caracteriza por incorporar básicamente éstos.

Con las ontologías se intenta encontrar un lenguaje común para describir varios temas. Una ontología combina varios esquemas en una estructura de datos, que contiene todas las entidades relevantes y sus relaciones dentro del dominio. La ontología es usada para una variedad de propósitos, incluyendo el razonamiento inductivo, la clasificación, y una variedad de técnicas de resolución de problemas. Las ontologías se usan para establecer conceptos y relaciones, pudiendo ser compartidas por todos.

Dar significado a los datos ya disponibles en Internet es una tarea que se resuelve añadiendo nuevos datos a los datos previos. Estos “meta-datos” expresan la semántica de dicha información, haciendo referencia a elementos de una ontología (compartida por todos).

La idea de la web semántica es establecer un marco, a nivel mundial, capaz de abarcar tareas como la búsqueda, teniendo en cuenta la semántica y aportar esa tecnología de integración. Así, Berners Lee, a través del consorcio W3C, pretende establecer una serie de estándares lo suficientemente consensuados como para que sean globalmente utilizados. Por ello han planteado una arquitectura general:

Las siguientes diapositivas muestran un posible camino para la evolución de Internet. En éstas, ya se habla de la Web 4.0, pero lo curioso es que aún no se ha definido ni la Web 3.0. Se pueden comprobar los antecedentes de la Web Semántica, un posible después y su línea de evolución. Claramente son unos datos muy subjetivos y no oficiales, pero da una idea de los antecedentes previos y lo que puede llegar en un futuro. Se puede comprobar que cada tecnología viene acompañada de una serie de componentes e ideas que la forman.

Categories
General Guide In detail

Automatizando copias de seguridad de volumenes EBS con boto y Python


Recientemente hemos visto como AWS ha acogido boto como API de facto para interactuar con muchos de sus servicios (Amazon S3, Amazon EC2, Amazon DynamoDB y muchos más). Boto nos facilita las tareas que realizamos habitualmente a través de CLI, entre ellas la de llevar a cabo una copia de seguridad de nuestros volúmenes EBS. En este artículo vamos describir los pasos para automatizar de forma fácil y sencilla este proceso.
Para empezar tendremos instalar boto a través pip. Pip es una utilidad de phyton para instalar paquetes.

pip install boto

A continuación debemos introducir nuestras credenciales en el archivo de configuración de boto.

export AWS_ACCESS_KEY_ID="..."
export AWS_SECRET_ACCESS_KEY="..."

Debemos utilizar una IAM que tenga como mínimo los siguientes privilegios

"Action": [
        "ec2:CreateSnapshot",
        "ec2:CreateTags",
        "ec2:DeleteSnapshot",
        "ec2:DescribeAvailabilityZones",
        "ec2:DescribeSnapshots",
        "ec2:DescribeTags",
        "ec2:DescribeVolumeAttribute",
        "ec2:DescribeVolumeStatus",
        "ec2:DescribeVolumes"
      ],

Seguidamente añadimos una notificación automática a través de SNS de AWS y añadimos la dirección de correo de la IAM que vayamos a utilizar para esta labor.
Una vez tengamos acceso a nuestros servicios en AWS y disponemos de un ARN válido, llevaremos a cabo las copias de seguridad utilizando esta simple herramienta llamada aws-snapshot-tool. La configuración es muy fácil, solo tenemos que editar el archivo config.py.

config = {
    'ec2_region_name': 'us-east-1',
    'ec2_region_endpoint': 'ec2.us-east-1.amazonaws.com',
    'tag_name': 'tag:MakeSnapshot',
    'tag_value':    'True',
    'keep_day': 5,
    'keep_week': 5,
    'keep_month': 11,
    'log_file': '/tmp/makesnapshots.log',
}

Finalmente solo nos falta etiquetar cada volumen EBS del que queramos obtener un respaldo y establecer la retención de estos.

# chmod +x makesnapshots.py
# crontab -e
30 1 * * 1-5 /opt/aws-snapshot-tool/makesnapshots.py day
30 2 * * 6 /opt/aws-snapshot-tool/makesnapshots.py week
30 3 1 * * /opt/aws-snapshot-tool/makesnapshots.py month

Le podemos encontrar algunas pegas, por ejemplo si disponemos de recursos en distintas regiones de AWS o si queremos aplicar políticas de retención diferentes a nuestros volúmenes EBS. Aún así hemos visto como con boto y Python tenemos una interfaz robusta, muy cómoda de utilizar que nos permite mantener y administrar varios aspectos de nuestros entornos alojados en AWS.
Otra opción es delegar en terceros como autosnappy 😉
Ivan Farré
Cloudadmins.org

Categories
General Guide In detail OpenSource

Monta tu Cloudlab con Opennebula!

La pasada semana tuvimos el placer de vibrar juntamente con la gente de Opennebula en su primera Conferencia Internacional (http://www.opennebulaconf.com) en Berlín.
Dentro de las actividades de la conferencia se realizó un seminario dónde los asistentes participaron en el montaje de su propio entorno cloudlab con Opennebula.  ¿Te animas? Todavía tienes tiempo…
Bájate el OVA para VirtualBox  aquí y sigue el tutorial!

Que aproveche! Seguiremos informando…
A Cloudadmin

Categories
General Guide In detail

Primeros pasos de Puppet en Amazon EC2


Después de varias pruebas con Puppet, ir a la Puppet Camp, reuniones de la puppet-users-barcelona y la ayuda de la fabulosa gente del puppet-users-barcelona (https://groups.google.com/forum/?hl=en&fromgroups=#!forum/puppet-users-barcelona). Hemos creado esta pequeña introducción de una de las posibilidades de utilizar Puppet en Amazon EC2. Aunque Amazon hace poco lanzó el producto OpsWorks (https://aws.amazon.com/opsworks/) basado en Chef (http://finance.yahoo.com/news/amazon-services-chooses-opscode-chef-181000793.html). Por ahora, nosotros preferimos utilizar Puppet antes que Chef, porqué hay mucha documentación, mucha más comunidad y nos gusta más. Y por el momento vemos muchos más casos de éxitos de empresas importantes con Puppet que con Chef.  Ejemplo de Pinterest, Wuaki.tv, Zynga, etc.
Recomendamos leer alguna Introducción de como funciona Puppet antes de leer este POST. En Google se pueden encontrar muchos (http://www.ant30.es/2011/11/puppet-gestion-de-configuracion-centralizada/)

Escenario 1: Puppet Master como nodo central.

Recordad que Puppet se presenta en dos partes: un servidor (el Puppetmaster), que recibe las conexiones de los clientes y contiene los manifests, módulos, plantillas, archivos, etc. Y luego un programa cliente que se ejecuta en cada máquina bajo control de Puppet y que se conecta mediante intercambio de certificados al PuppetMaster para conseguir su manifests.

Paquetes a instalar:

Si queremos trabajar con un PuppetMaster y nodos de puppet conectándose al Puppet Master. Primero debemos instalar mediante nuestro sistema de paquetería de nuestro Sistema Operativo los paquetes “puppet” y “puppet-master” en la máquina elegida como servidor. Luego instalamos en cada nodo cliente el paquete “puppet”.
En el servidor:

# apt-get install puppetmaster puppet

En el cliente:

# apt-get install puppet

Resolución de nombres:

Una vez instalados los paquetes, tendremos que hacer una sencilla configuración de Puppet. Aunque antes tendremos que forzar a todas las máquinas que el nodo llamado “puppet” apunte a la IP del puppetmaster. Por eso lo podemos hacer mediante DNS y sinó podemos porqué nosotros no controlamos el DNS, lo podemos hacer modificando el fichero “/etc/hosts” de cada máquina que contenga Puppet.
Para eso editamos el “/etc/hosts” de todas nuestras máquinas. Si por ejemplo el puppet master tiene la IP 192.168.1.20 la cosa quedaría de la siguiente forma:

cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 machine
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
192.168.1.20 puppet

Si estuviésemos dentro del Puppetmaster lanzado el siguiente comando ya bastaría:

# echo `ifconfig eth0|grep addr|head -n 2|tail -n 1 |cut -d “:” -f 2 | cut -d ” ” -f 1` “puppet” >> /etc/hosts

Configuración:

Luego necesitamos editar 2 ficheros.
/etc/puppet/puppet.conf (en teoría ya viene por defecto configurado correctamente)
Miramos si existe el fichero /etc/puppet/autosign.conf, si no existe lo creamos.
Dentro del fichero /etc/puppet/autosign.conf solo hace falta que contenga una “*” que significa que toda petición de un nodo cliente que se conecte se autofirme para ahorrarnos hacerlo manualmente. Esto tiene inconvenientes de seguridad porqué todo nodo con visibilidad al PuppetMaster se podria connectar al él. Por lo tanto tendríamos que proteger la red de nodos no deseados (cerrando los puertos de Puppet). Con Security Groups de Amazon se puede solucionar o con un IP tables o con otros métodos. También podriamos configurar el PuppetMaster para firmar solo un cierto rango de IPs o ciertas máquinas que contengan estén en un subdominio de DNS. Aquí os recomendamos que busquéis en la documentación oficial de Puppet.
En este caso, el autosign.conf queda así:

# cat /etc/puppet/autosign.conf
“*”

Conexión de clientes:

Si acabamos de preparar el servidor Puppetmaster y queremos conectar un nodo cliente de puppet. Antes se tiene que pasar los certificados con el comando y con el mismo comando se lanza también el Puppet.

# puppet agent -t
 

 Si solo quisiesemos lanzar el nodo las veces que nosotros quisiesemos, por ejemplo al arrancar la máquina, y no mediante el demonio de Puppet. Tendríamos que apagar el demonio de Puppet y lanzar el siguiente comando:

# /usr/sbin/puppetd -t –onetime –no-daemonize (para arrancar una sola vez el Puppet y no dejarlo abierto funcionando cada 30 minutos)
 

También tenemos la forma de probar nuevas modificaciones de Puppet sin aplicar cambios mediante el siguiente comando. Es decir para poder debugar antes.

# puppet agent -t -noop
 
En el Puppetmaster para comprobar que esté todo bien, en el servidor podemos listar los nodos firmados y conectados usando el comando:

# puppet cert –list –all
En el caso que no tuviesemos puesto el método comentado anteriormente para firmar automáticamente, podemos firmar manualmente los nuevos nodos de puppet a conectarse al Puppetmaster, mediante el siguiente comando:

# puppet cert sign ec2-10-59-6-191.eu-west-1.compute.internal. 
 

En el Pupetmaster podemos revocar el certificado del nodo:

# puppet cert –revoke nodo1.example.com
 

Para limpiar el nodo.

# puppet cert –clean nodo1.example.com
 

O para limpiar todos los nodos.

# puppet cert –clean –all

Varias cosas a tener en cuenta.

– Este es un ejemplo de muchas posibles. Hay otras opciones de autoregistrar las máquinas en un DNS como el AWS Route 53.
– Si encontráis algún error o que falta algo o que nos hayamos dejado algo. O conoceis otras formas de trabajar con EC2, no dudéis en comentarlo en el grupo de CloudAdmins de LinkedIn.
– Cuando reiniciamos las máquinas virtuales de Amazon, o creamos una AMI, podemos perder el hostname correcto de la máquina. Por lo tanto, nosotros solemos poner en el rc.local , lo siguiente para que la máquina se encienda con el hostname adecuado.

cat /etc/rc.local
#!/bin/sh -e
hostname ec2-`ifconfig eth0|grep addr|head -n 2|tail -n 1 |cut -d “:” -f 2 | cut -d ” ” -f 1| sed ‘s/\./\-/g’`
/bin/hostname > /etc/hostname
echo “127.0.0.1 “`hostname` >> /etc/hosts

Escenario 2 : Sin nodo central Puppet Master. Todo en una sola máquina.

Mirar que fácil y que sencillo es con este método que utilizábamos en nuestros primeros tests.
Primero mediante “apt-get”, yum o equivalente instalamos el: git y puppetmaster.
# apt-get install puppetmaster git
Nos bajamos el código con nuestros manifests de Puppet. Por ejemplo con Git (también podriamos utilizar SVN, wget o lo que nos gusté más). En nuestro ejemplo:

# mkdir /code
# cd /code
# git clone gituser@server.net:/var/cache/git/code.git

Y luego lanzamos el puppet mediante:

# puppet agent -d /code/manifests/site.conf 
 

De esta forma la máquina hace de Puppetmaster y a la vez de cliente Puppet. Sin falta de firmar certificados y configuraciones complicadas. Lástima que aquí perdemos potencialidad de la que nos ofrece Puppet (guardar storeconfigs, los facters, etc.)
Estas 2 líneas las podríamos poner en nuestro “rc.local” del sistema operativo para que cada vez que arranque la máquina de Amazon EC2 se puppetize el entorno.
En este artículo queríamos dar las gracias a la gente de puppet-users-barcelona ( https://groups.google.com/forum/?hl=en&fromgroups=#!forum/puppet-users-barcelona ) por su ayuda, por la fabulosa PuppetCamp que organizaron y por las reuniones mensuales que hacen. Desde aquí os comentamos que es muy recomendado ir .

Referencias interesantes:

http://www.slideshare.net/roml/puppetcamp-15934250
http://kentbye.com/post/32415279029/how-pinterest-uses-amazon-ec2s-auto-scaling-features
http://www.slideshare.net/markstanislav/being-a-puppet-master-automating-amazon-ec2-with-puppet-friends

Categories
Bigdata Guide In detail

Opendedup: Deduplicación en línea sobre volumenes de datos en AWS S3 y Azure.



Sam Silverberg, desarrollador con una dilatada experiencia está al frente del proyecto Opendedup. Opendedup se centra en el desarrollo de nuevos sistemas de ficheros con el objetivo de dar solución e ir más allá en el terreno de la deduplicación en línea. Si analizamos su “core” Opendedup ha desarrollado y apuesta por SDFS, un sistema de ficheros multiplataforma con deduplicación en línea que permite reducir en más del 90% el espacio utilizado, permite deduplicar más de un Petabyte de datos, ofrece rendimientos superiores a 1Gbps, se integra con entornos de virtualización de VMWare como repositorio de máquinas virtuales, soporta “snapshots” a nivel de ficheros o directorios, etc…
http://opendedup.org/whatisdedup
sdfs
Siendo fiel al título de este POST, veremos como SDFS nos puede ayudar en la optimización del uso de recursos en proveedores Cloud para fines como por ejemplo de archivado, dónde este permite almacenar “bloques” deduplicados sobre servicios de almacenamiento en la nube como son Amazon S3 o Azure. Cosa que facilita almacenar una cantidad ilimitada de datos sin la necesidad de almacenamiento local con capacidades de cifrado (AES 256 bit) y compresión (obvia y por defecto).
Si lo analizamos más en detalles, los beneficios están bastante claros ya que reducimos al mínimo el almacenamiento externo, uso de ancho de banda y maximizamos aspectos como el rendimiento de escritura.
Como detalle adicional es importante tener en cuenta que el enfoque de almacenamiento externo mediante bloques requiere que el espacio de nombres y los metadatos de archivos se almacenen localmente en el sistema en el que se monta el volumen SDFS, esto asegura por un lado el máximo rendimiento al permitir que todas las funciones del sistema de archivos se realizan a nivel local a excepción de los datos de lecturas y escrituras pero por otro nos limita a utilizar la misma máquina para acceder a los datos.
En base a su tutorial de uso y si entramos en el caso específico de volúmenes deduplicados sobre AWS S3:
1) Realizaremos la instalación de opendedup – http://opendedup.org/download
2) Utilizando las credenciales que nos proporciona Amazon AWS para su servicio S3 y con un ‘bucket’ ya disponible crearemos un volumen SDFS :
./mkfs.sdfs  –volume-name=<volume name> –volume-capacity=<volume capacity> –aws-enabled=true –cloud-access-key=<the aws assigned access key> –cloud-bucket-name=<a universally unique bucket name such as the aws-access-key> –cloud-secret-key=<assigned aws secret key> –chunk-store-encrypt=true
3) Montaremos el volumen y a jugar…
./mount.sdfs <volume name> <mount point>
Salud!
Cloudadmins.org