AWS-S3

En este artículo voy a hacer una introducción a Amazon Web Service S3 (Simple Storage Service), que nos ofrece un servicio de almacenamiento masivo de objetos. AWS S3 ofrece un almacén de objetos distribuido y altamente escalable. Se utiliza para almacenar grandes cantidades de datos de forma segura y económica. El almacenamiento de objetos es ideal para almacenar grandes ficheros multimedia o archivos grandes como copias de seguridad. Otra utilidad que nos ofrece es el almacenamiento de los datos estáticos de nuestra página web, que es lo que vamos a estudiar en esta entrada.

Conceptos sobre AWS S3

Para la organización de nuestros archivos, tenemos que conocer los siguientes conceptos:

  • buckets: son algo parecido a un directorio o carpeta de nuestro sistema operativo, donde colocaremos nuestros archivos. Los nombres de los buckets están compartidos entre toda la red de Amazon S3, por lo que si creamos un bucket, nadie más podrá usar ese nombre para un nuevo bucket.
  • objects: son las entidades de datos en sí, es decir, nuestros archivos. Un object almacena tanto los datos como los metadatos necesarios para S3, y pueden ocupar entre 1 byte y 5 Gigabytes.
  • keys: son una clave única dentro de un bucket que identifica a los objects de cada bucket. Un object se identifica de manera unívoca dentro de todo S3 mediante su bucket+key.
  • ACL: Podemos indicar el control de acceso a nuestro objetos, podremos dar capacidad de “Lectura”, “Escritura” o “Control Total”.

Más características de AWS S3

  • Uso de una API sencilla para la comunicación de nuestras aplicaciones con S3. Estas peticiones HTTP nos permitirán la gestión de los objetos, buckets, … En definitiva, todas las acciones necesarias para administrar nuestro S3. Toda la información en cuanto accesos y códigos de ejemplo se pueden encontrar en la documentación oficial.
  • Para la descargas de los objetos tenemos dos alternativas: si eres el propietario del objeto puedes hacer una llamada a la API para la descarga, sino, si hemos configurado el objeto con una ACL de lectura, podemos utilizar una URL para accder a él. Cada archivo en S3 posee una URL única, lo que nos facilitará mucho el poner a disposición de nuestros clientes todos los datos que almacenemos.
  • El servicio se paga por distintos conceptos: almacenamiento, transferencia, peticiones GET o PUT,… pero hay que tener en cuenta, siendo un servicio de Cloud Computing, que el pago se realiza por uso. La tarifas son baratas y las puedes consultar en la siguiente página.

Continue reading

vagrant_openstack

Vagrant nos permite automatizar la creación y gestión de máquinas virtuales. Las máquinas virtuales creadas por vagrant se pueden ejecutar con distintos gestores de máquinas virtuales (VirtualBox, VMWare, KVM,…), pero también tenemos a nuestra disposición varios proveedores donde podemos lanzar máquinas virtuales usando vagrant, por ejemplo Amazon Web Service. En este artículo, sin embargo, vamos a utilizar vagrant para crear instancias en un entorno de Cloud Computing IaaS desarrollado con OpenStack. Si no estás familiarizado con vagrant y quieres aprender a usarlo, ya hice una introducción a esta herramienta en el artículo: Gestionando máquinas virtuales con Vagrant. En otro caso, si no tienes experiencia trabajando con OpenStack, olvídate de este tutorial y empieza a leer.

Configuración de vagrant

Para utilizar la funcionalidad de gestionar instancias openstack desde vagrant, necesitamos instalar un plugin vagrant. El desarrollo de dicho plugin lo puedes encontrar en el repositorio GitHub: ggiamarchi/vagrant-openstack-provider, y se puede usar desde la versión 1.4 de vagrant. Para instalar el plugin, ejecutamos la siguiente instrucción:

$ vagrant plugin install vagrant-openstack-provider

Creación de una instancia

Una vez que tenemos que tenemos instalado el plugin, debemos crear una fichero Vagrantfile, donde definimos los parámetros necesarios para crear una instancia en openstack: por un lado los datos de credenciales para establecer la conexión  y por otro la información necesaria para crear una instancia (nombre, sabor, imagen, grupos de seguridad, redes, …).

Para indicar los datos de las credenciales en el fichero Vagranfile, he optado por cargar el fichero de credenciales de OpenStack y utilizar el nombre de las variables de entorno que creamos, para ello:

$ source openrc.sh

Y un ejemplo del fichero Vagrantfile, podría ser  el siguiente:

require 'vagrant-openstack-provider'

Vagrant.configure('2') do |config|

  config.vm.box       = 'openstack'
  config.ssh.username = 'debian'

  config.vm.provider :openstack do |os|
    os.openstack_auth_url = ENV['OS_AUTH_URL']
    os.username           = ENV['OS_USERNAME']
    os.password           = ENV['OS_PASSWORD']
    os.tenant_name        = ENV['OS_TENANT_NAME']
    os.region             = ENV['OS_REGION_NAME']
    os.server_name        = "server"
    os.flavor             = 'm1.small'
    os.image              = 'Debian Jessie 8.2'
    os.security_groups    = ['default']
    os.floating_ip_pool   = 'ext-net'
    os.networks = ['red']
  end
end

Continue reading

docker

Últimamente Docker está de moda. Si haces una búsqueda por intenet verás que existen multitud de páginas hablando del tema. Podría preguntarme, qué necesidad tengo de escribir otra entrada en mi blog sobre un tema tan estudiado. Y la respuesta sería que si lo escribo lo aprendo, y además he llegado a la conclusión de que tengo que aprenderlo. Empezamos con una definición: Docker es un proyecto de software libre que permite automatizar el despliegue de aplicaciones dentro de contenedores.  ¿Automatizar el despliegue de aplicaciones?, ¡esto me interesa!: este año estoy impartiendo un módulo del CFGS de Administración de Sistemas Informáticos, que se titula: “Implantación de aplicaciones web”. Parece razonable que mis alumnos deban conocer esta nueva tecnología, que en los últimos años (realmente desde marzo de 2013 cuando el proyecto fue liberado como software libre) hemos escuchado como una nueva manera de gestionar contenedores. Docker nos permite, de una forma sencilla, crear contenedores  ligeros y portables donde ejecutar nuestras aplicaciones software sobre cualquier máquina con Docker instalado, independientemente del sistema operativo que la máquina tenga por debajo, facilitando así también los despliegues. De ahí que el lema de Docker sea: “Build, Ship and Run. Any application, Anywhere” y se haya convertido en una herramienta fundamental tanto para desarrolladores como para administradores de sistemas. Continue reading

intro

Heroku es una aplicación que nos ofrece un servicio de Cloud Computing PaaS (Plataforma como servicio). Como leemos en la Wikipedia es propiedad de Salesforce.com y es una de las primeras plataformas de computación en la nube, que fue desarrollada desde junio de 2007, con el objetivo de soportar solamente el lenguaje de programación Ruby, pero posteriormente se ha extendido el soporte a Java, Node.js, Scala, Clojure y Python y PHP.

Características de heroku

La funcionalidad ofrecida por heroku esta disponible con el uso de dynos, que son una adaptación de los contenedores Linux y nos ofrecen la capacidad de computo dentro de la plataforma.

Cada dyno ejecuta distintos procesos, por ejemplo ejecuta los servidores web y los servidores de bases de datos, o cualquier otro proceso que le indiquemos en un fichero Procfile. Las características principales de los dynos son:

  • Escabilidad: Si, por ejemplo, tenemos muchas peticiones a nuestra aplicación podemos hacer un escalado horizontal, es decir, podemos crear más dynos que respondan las peticiones. La carga de peticiones se balanceará entre los dynos existentes. Además podemos hacer una escalabilidad vertical, en este caso lo que hacemos es cambiar las características hardware de nuestro dyno, por ejemplo aumentar la cantidad de RAM. Las características de escabilidad no están activadas en el plan gratuito de heroku. Además la escabilidad no es automática, hay que realizarla manualmente.
  • Redundancia: En el momento en que podemos tener varios dynos detrás de una balanceado de carga, nuestra aplicación es redundante. Es decir, si algún dyno tiene un problema, los demás responderían las peticiones.
  • Aislamiento y seguridad: Cada uno de los dynos está aislado de los demás. Esto nos ofrece seguridad frente a la ejecución de procesos en otros dynos, además también nos ofrece protección para que ningún dyno consuma todos los recursos de la máquina.
  • Sistema de archivo efímero: Cada dyno posee un sistema de archivo cuya principal característica es que es efímero. Es decir los datos de nuestra aplicación (por ejemplo ficheros subidos) no son accesibles desde otros dynos, y si reiniciamos el dyno estos datos se pierden. Es muy recomendable tener los datos de la aplicación en un sistema externo, por ejemplo un almacén de objetos, como Amanzon S3 o OpenStack Swift.
  • Direccionamiento IP: Cuando tenemos varios dynos, cada uno de ellos puede estar ejecutándose en máquinas diferentes. El acceso a nuestra aplicación siempre se hace desde un balanceador de carga (routers). Esto significa que los dynos no tienen una ip estática, y el acceso a ellos siempre se hace a la dirección IP que tiene el balanceador. Cuando se reinicia un dyno se puede ejecutar en otra máquina, y por lo tanto puede cambiar de dirección IP.
  • Interfaces de red: Cada dyno tiene una interfaz de red con un direccionamiento privado /30, en el rango 172.16.0.0/12. Por lo tanto cada dyno está conecta a una red independiente que no comparte con ningún otro dyno. Para acceder a él, como hemos indicado anteriormente, habrá que hacerlo a través de la ip pública que tiene asignada el balanceador de carga.

Continue reading

5dayOpenStack

El grupo OpenStack Sevilla se une a los eventos de celebración del 5º aniversario del proyecto OpenStack que van a organizar los distintos grupos locales de usuarios de OpenStack con el apoyo de la OpenStack Foundation. En este caso tendrá lugar un encuentro el próximo 1 de Julio a partir de las 19:00 en las oficinas de Bitnami en Sevilla y se impartirán las siguientes charlas:

Puedes ver el reportaje fotográfico del evento:

openstack

El pasado mes de mayo y junio, he impartido, junto a mi compañero Alberto Molina (@alberto_molina), un curso de iniciación y uso de Openstack organizado por openwebinars.net, titulado: Infraestructura en la nube con OpenStack. Además de los contenidos que hemos ofrecido a los alumnos, se han realizado 10 vídeos de dos horas con clases en directo. Los contenidos previstos en el curso eran:

Infraestructura en la nube

  • Introducción
  • Plataformas de software de IaaS
  • El proyecto OpenStack
  • Componentes
  • Arquitectura lógica
  • Entorno de trabajo

OpenStack: Uso básico

  • Conceptos previos
  • Imágenes
  • Instancias
  • Volúmenes
  • Redes
  • Ejemplos de uso

OpenStack: Uso avanzado

  • Clientes de línea de comandos
  • Manejo desde la línea de comandos
  • OpenStack APIs RESTful

Puedes acceder a todos los contenidos del curso, cuya licencia es Creative Commons puedes acceder a  la página http://iesgn.github.io/ow1/.