Muchos usamos dropbox en nuestros dispositivos móviles IOS y Android, también Evernote, con la llegada de iTunes Match muchos tenemos nuestra biblioteca musical en la nube..y todo esto y muchos más servicios que por simple desconocimiento están "manejados" a través de algún tipo de Cloud Computing.... Uno de los principales jugadores de este paradigma es Amazon (AWS), ofreciendo su Infraestructura y Plataforma a los desarrolladores a través de SDKs específicos para cada una de las tecnologías de desarrollo o al menos las mas utilizadas.
En este post nos centraremos en conocer uno de los servicios más interesantes, baratos y sencillos de implementar: Amazon S3.
Antes de empezar..
Simple Storage Service o S3 nos permite almacenar cualquier tipo de objeto siguiendo un esquema simple de almacenamiento:
Buckets: son los contenedores asociados a nuestra suscripción de S3. Estos "contendrán" los objetos que vayamos cargando, por objeto se entiende fichero, y sin tener un limite de los mismos por cada contenedor
Objetos: son los ficheros que cargaremos desde nuestras aplicaciones y que estarán disponibles para ser usados en todo el basto sentido de la palabra
Seguridad: Como es lógico es posible establecer un mecanismo de acceso que permita compartir todos o parte de los objetos con permisos para operar sobre ellos.
Este servicio dispone de unos porcentajes de disponibilidad y continuidad muy elevados, o sea un montón de 99.99999, por lo que es muy recomendable para desarrollar u orientar aplicaciones de backup, intercambio de ficheros, etc...
Dicho esto, vamos al lío!!!
Primeros pasos
Intentaré describir como hacer una app que nos permita sacar una foto o elegir una de nuestra librería, a continuación será almacenada en un bucket y por último nos permitirá visualizarla. No es un gran paso para la humanidad :-) pero puede ser útil ver como se hace.
Antes de comenzar, para desarrollar contra los AWS es obligatorio disponer de una cuenta o estar registrados bajo AWS. Para esto es necesario asociar nuestra cuenta o suscripción a una tarjeta de crédito…..pero esto no significa tener que pagar para poder probar o aprender. Amazon en este sentido ofrece una cuenta gratuita limitada a unos consumos de gran parte de sus servicios, estos limites son más que suficientes para probar nuestros desarrollos.
En primer lugar tenemos que descargar el SDK de http://aws.amazon.com/es/sdkforios/
Una vez descargado, debería tener la siguiente estructura:
Como decía antes, necesitamos estar registrados y generar un par de claves obligatorias para validarnos cada vez que deseamos acceder a cualquiera de los servicios disponibles en AWS. La primera vez que usemos AWS deberemos obtener nuestros credenciales desde la consola en las opciones, de configuración de la cuenta
Es importante recordar las dos claves, como buena práctica podemos crear un fichero de definiciones (el típico .h) e incluirlo en nuestro proyecto, podría tener este aspecto:
Configurar xCode
Incluirlos en un proyecto es tan sencillo como añadir un framework al mismo:
Podemos hacer un pequeño test para comprobar que tenemos conexión y que podemos acceder a un bucket o contenedor, para hacer esto vamos a la consola web de AWS y crearemos un contendor. Después crearemos un proyecto en Xcode y añadiremos un poco de código para probar el acceso.
En la consola AWS, seleccionaremos la pestaña de 'Amazon S3' y pincharemos el botón 'Create Bucket':
Debería aparecer un popup parecido a este:
En Xcode crearemos un proyecto nuevo de tipo Single View Application, le llamaremos AWSS3Ejemplo.
Figure 1 Marcar los checks de ARC y Storyboard
Y una vez creado añadiremos el siguiente código en el método DidFinishLaunchingWithOptions: de la clase AppDelegate del proyecto:
Si no tenemos conexión o se produce algún tipo de error debería ver en la consola un mensaje parecido al siguiente:
EjemploS3enIOS[31228:f803] Error Domain=NSURLErrorDomain Code=-1009 "The Internet connection appears to be offline." UserInfo=0x6b7c3d0 {NSErrorFailingURLStringKey=https://s3.amazonaws.com/, NSErrorFailingURLKey=https://s3.amazonaws.com/, NSLocalizedDescription=The Internet connection appears to be offline., NSUnderlyingError=0x6b51900 "The Internet connection appears to be offline."}
Ya podemos desarrollar!!!
En la segunda parte veremos como podemos acceder a un bucket especifico, y como subir o consumir los objetos dentro del mismo.