Cómo utilizar Java para simular el control del almacenamiento de datos en la nube
El uso de métodos de programación para iniciar sesión en S3 a través de JetS3t se puede dividir en dos pasos. Primero, se debe crear un objeto AWSCredentials y luego pasarlo al objeto S3Service. El objeto AWSCredentials es muy simple. Trata la clave de acceso y la clave secreta como una cadena. El objeto S3Service es en realidad un tipo de interfaz. Dado que S3 proporciona una API RESTful y una API SOAP, la biblioteca JetS3t puede proporcionar dos tipos de implementación: RestS3Service y SoapS3Service. Para los propósitos de este artículo (y la mayoría de las transacciones de S3), la simplicidad de la API RESTful la convierte en una buena opción.
Crear una instancia de RestS3Service conectada es muy simple, como se muestra en el Listado 1:
Paso 1. Cree una instancia de JetS3t RestS3Service
El siguiente es un fragmento de referencia :
def awsAccessKey = “blahblah”
def awsSecretKey = “blah-blah”
def awsCredentials = new AWSCredentials(awsAccessKey, awsSecretKey)
def s3Service = new RestS3Service(awsCredentials)
Ahora puede realizar algunas operaciones interesantes: por ejemplo, crear un depósito, agregar una película y obtener una URL por tiempo limitado. En realidad, esto suena como un proceso de negocios, ¿no es así? Es un proceso de negocios relacionado con la publicación de un activo limitado, como una película.
Crear un depósito
Para el negocio de las películas de ficción, crearé un depósito llamado bc50i. Con JetS3t, el proceso es sencillo. Con el tipo S3Service tienes varias opciones. Prefiero usar la llamada getOrCreateBucket, como se muestra en el Listado 2. Como sugiere el nombre, llamar a este método puede devolver una instancia de depósito (representada como una instancia de tipo S3Bucket) o crear un fragmento en S3.
Introducción a los pasos detallados del uso de la plataforma S3
Paso 2. Cree un segmento de almacenamiento en el servidor S3
El siguiente es un fragmento de referencia:
def bucket = s3Service.getOrCreateBucket("bc50i")
No dejes que mi sencillo ejemplo de código te engañe. La biblioteca JetS3t es muy escalable. Por ejemplo, puede determinar rápidamente cuántos depósitos tiene; simplemente solicite una instancia de servicio S3 con la llamada listAllBuckets. Este método devuelve una matriz de instancias de S3Bucket. Para cualquier instancia de depósito, puede solicitar su nombre y fecha de creación. Además, puede controlar los permisos asociados con JetS3t a través de su tipo AccessControlList. Por ejemplo, puedo obtener una instancia de depósito bc50i y permitir que cualquiera pueda hacerla legible y escribible públicamente, como se muestra en el Listado 3:
Paso 3. Modificar la lista de control de acceso del depósito
El siguiente es el fragmento de referencia:
def bucket.acl = AccessControlList.REST_CANNED_PUBLIC_READ_WRITE
Por supuesto, a través de la API, también puede eliminar el depósito a voluntad. Amazon incluso le permite especificar la ubicación geográfica donde se creará el depósito. Amazon simplifica la complejidad de almacenar los datos reales, pero puede decirle a Amazon que coloque el depósito (y todos los objetos que contiene) en los Estados Unidos o Europa (las opciones disponibles actualmente).
Agregar objetos a depósitos
Crear objetos S3 utilizando la API de JetS3t es tan fácil como operar depósitos.
La biblioteca JetS3t también es inteligente y se encarga de manejar los tipos de contenido relacionados con archivos dentro de los depósitos de S3. Por ejemplo, quiero subir un vídeo nerfwars2.mp4 a S3 para que los usuarios puedan verlo por un tiempo limitado. Crear un objeto S3 es tan simple como crear el tipo java.io.File común y asociar el tipo S3Object con el depósito, como se muestra en el Listado 4:
Paso 4. Cree un objeto S3
El siguiente es un fragmento de referencia:
def s3obj = new S3Object(bucket, new File(”/path/to/nerfwars2.mp4″))
Uso de archivos y almacenamiento Después de inicializar el S3Object, todo lo que hay que hacer es cargarlo a través del método putObject, como se muestra en el Listado 5:
Paso 5. Cargar el video
Lo siguiente es un fragmento de referencia:
s3Service.putObject(bucket, s3obj)
Utilice el Listado 5 para completar la carga. Ahora que el vídeo está en el servidor de Amazon, la clave del vídeo es su nombre. Por supuesto, puedes anular este nombre para llamar a otros objetos si es necesario. De hecho, la API JetS3t (así como la API AmazonS3RESTful) expone mucha información que puede utilizar al crear objetos. Sabemos que también puedes proporcionar listas de control de acceso. Cualquier objeto en S3 puede contener metadatos adicionales que la API le permite crear. Luego, se puede consultar cualquier objeto a través de la S3API de esos metadatos (y el JetS3t derivado).
Crear la URL del objeto
Hasta ahora, mi instancia S3 tiene un depósito que contiene la película. De hecho, mis vídeos están disponibles a través del siguiente URI: . Pero sólo yo puedo conseguirlo. (En este caso, sólo puedo acceder mediante programación porque el control de acceso predeterminado asociado con todo está configurado para denegar cualquier acceso no autorizado). Mi intención es brindar una manera para que los usuarios seleccionados vean videos nuevos (por un tiempo limitado) hasta que comience a cobrar por el acceso (S3 también ayudará con esto).
Crear una URL pública es una característica conveniente proporcionada por S3; de hecho, con S3, puede crear una URL pública, pero solo es válida por un período de tiempo (por ejemplo, 24 horas internas). . Para la película que acabo de almacenar en el servidor S3, crearé una URL válida por 48 horas. Luego proporcionaré esa URL a los usuarios seleccionados para que puedan descargarla y mirarla (suponiendo que la descarguen en dos días).
Manejo de archivos con período de validez
Para crear una URL urgente para un objeto S3, puede utilizar el método createSignedGetUrl de JetS3t, que es un método estático del tipo S3Service. El método toma un nombre de depósito, una clave de objeto (en este caso, el nombre de la película, ¿recuerdas?), algunas credenciales (en forma de objeto AWSCredentials de JetS3t) y una fecha de vencimiento. Si conoce las claves de depósito y objeto que necesita, puede obtener rápidamente la URL con el código Groovy en el Listado 6:
Paso 6. Cree una URL urgente
Aquí está Fragmento de cita:
def now = new Date()
def url = S3Service.createSignedGetUrl(
bucket.getName(), s3obj.key, awsCredentials, ahora + 2)
Usando Groovy, puedo especificar fácilmente una fecha límite de 48 horas usando la sintaxis + 2. La URL resultante se ve así (solo una línea):
Si sus necesidades de ancho de banda y almacenamiento son inconsistentes, S3 puede ser de gran ayuda. Por ejemplo, piense en el modelo de negocio que demostré: los vídeos se publican en épocas específicas del año.
En un modelo de almacenamiento tradicional, donde es necesario comprar una gran cantidad de espacio en un rack en algún lugar (o proporcionarle el hardware y las tuberías), es probable que el volumen de descarga sea alto, pero luego será relativamente lento. Sin embargo, no puede pagar según sea necesario. Con S3, el modelo es de pago por uso: las empresas sólo pagan por el almacenamiento y el ancho de banda cuando lo necesitan. Es más, las características de seguridad de S3 pueden ayudarle a especificar aún más cuándo las personas pueden descargar videos e incluso quién puede descargarlos.
Es muy fácil implementar estos requisitos usando S3. En un nivel alto, crear un archivo de video restringido para descargar requiere 4 pasos:
1. Inicia sesión en S3.
2. Crear un segmento de almacenamiento.
3. Añade los vídeos (u objetos) necesarios al depósito.
4. Cree una URL urgente que apunte al vídeo.