AWS S3 con Java: carga de archivos, creación y eliminación de buckets de S3

    Introducción

    En este artículo, usaremos el SDK y la API de AWS de Java para crear un depósito S3, cargar archivos en él y, finalmente, eliminarlo.

    Uno de los servicios más populares disponibles en Amazon Web Services es Simple Storage Service (S3).

    S3 facilita a los desarrolladores y otros usuarios la implementación del almacenamiento de datos para uso personal o sus aplicaciones. Los datos se almacenan utilizando un modelo llamado Almacenamiento de objetos en la nube, que almacena los datos en sí (generalmente de un archivo), algunos metadatos que describen el objeto y una ID para identificarlo de manera única.

    S3 proporciona una interfaz web que facilita la carga de archivos para almacenarlos y recuperarlos. Los archivos se pueden organizar en «depósitos de S3» independientes que son contenedores de datos.

    Los archivos de datos se pueden categorizar aún más en carpetas dentro de depósitos para una organización y acceso familiares basados ​​en rutas. Cada depósito se asigna a una URL que permite acceder a los archivos dentro del depósito a través de HTTP. Los usuarios tienen control total para establecer permisos a nivel de depósito o de archivo y, por lo tanto, determinar el acceso a los depósitos y su contenido.

    Además de crear y trabajar con buckets S3 a través de la interfaz web, AWS proporciona los SDK que nos dan acceso a las operaciones del bucket.

    Credenciales de AWS

    Comencemos por aprender a crear un conjunto de credenciales de AWS, que son necesarias para acceder a AWS y realizar llamadas a la API a través del SDK. La forma más sencilla de hacerlo es iniciar sesión en la consola de AWS y crear un nuevo rol de IAM (Identity and Access Management):

  • Inicie sesión en Consola de AWS.

  • Clickea en el Servicios menú en la parte superior izquierda de la pantalla, busque YO SOYy haga clic en la opción desplegable que aparece.

  • Bajo la Estado de seguridad encabezado, expanda el Crear usuarios individuales de IAM opción y haga clic en la Administrar usuarios botón.
  • Haga clic en el Agregar usuario botón.

  • Ingrese el nombre de usuario para su nuevo usuario de IAM y marque la casilla para Acceso programático.

  • Haga clic en el Siguiente: Permisos y luego seleccione Adjunte las políticas existentes directamente.

  • Tipo S3 en el cuadro de búsqueda y en los resultados, marque el cuadro para AmazonS3FullAccess.

  • Haga clic en el Siguiente: Etiquetas , luego haga clic en el Siguiente: Revisión botón.

  • Revise la configuración de usuario de IAM y haga clic en el Crear usuario botón.

  • Serás llevado a una página de confirmación, donde podrás copiar el ID de clave de acceso y Clave de acceso secreta cuáles son las credenciales que utilizará para acceder a la API de AWS a través del SDK de Java.

  • De forma predeterminada, el SDK buscará las credenciales en el Archivo de perfil de credenciales predeterminado, que es un archivo que normalmente se encuentra en ~/.aws/credentials en su máquina local. Deberá crear este archivo usted mismo y agregarle las credenciales de IAM.

    Para configurar esto usted mismo, cree el nuevo archivo ~/.aws/credentials y agregue el siguiente contenido, reemplazando la clave de acceso y la clave secreta con los valores de su usuario de IAM recién creado en la consola de AWS:

    aws_access_key_id = YOUR_ACCESS_KEY_ID
    aws_secret_access_key = YOUR_SECRET_ACCESS_KEY
    

    Cree un archivo de región predeterminado para que lo utilice el AWS SDK agregando un nuevo archivo llamado ~/.aws/config con el siguiente contenido (puede reemplazar la región por una más cercana a donde viven sus usuarios para un rendimiento óptimo):

    region = US_WEST_2
    

    El entorno local ahora debe estar configurado para que AWS Java SDK se autentique correctamente.

    Instalación del SDK con Maven

    Si usa Maven, agregue la siguiente dependencia para incluir AWS Java SDK:

    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk-s3</artifactId>
        <version>${version}</version>
    </dependency>
    

    O, si está usando Gradle:

    compile group: 'com.amazonaws', name: 'aws-java-sdk', version: '${version}'
    

    Ahora, en lugar de solo la dependencia de S3, podría usar aws-java-sdk, que es el SDK completo. Hay muchas dependencias en todo el SDK – 219, para ser exactos, por lo que si solo usa S3, no es necesario descargarlas todas.

    En este punto, estamos listos para automatizar la creación de depósitos, la carga de archivos y la eliminación de depósitos utilizando Java.

    Creación de un bucket de S3 con Java

    AWS Java SDK for S3 proporciona varias clases que se pueden utilizar para crear un nuevo depósito. Estos se encuentran en el software.amazon.awssdk biblioteca. Estas clases son:

    • Región: Representa una región de alojamiento de AWS para realizar las operaciones del SDK.
    • S3Client: Se utiliza para configurar un cliente para que se conecte a AWS S3 a través de servicios web.
    • CreateBucketRequest: Representa una solicitud web para crear depósitos de S3.
    • CreateBucketConfiguration: Representa la configuración para la creación del depósito de S3.

    Echemos un vistazo a cómo podemos configurar un depósito para la creación:

    Region region = Region.US_WEST_2;
    S3Client s3 = S3Client.builder().region(region).build();
    String bucket = "new-bucket12345";
    
    CreateBucketRequest createBucketRequest = CreateBucketRequest
        .builder()
        .bucket(bucket)
        .createBucketConfiguration(CreateBucketConfiguration.builder()
            .locationConstraint(region.id())
            .build())
        .build();
    
    s3.createBucket(createBucketRequest);
    

    Primero, configuramos un Region objeto. Si omitimos este paso, la región predeterminada en el ~/.aws/config se utiliza. Establezca la región más cercana a donde estarán sus usuarios.

    Entonces, hemos creado un S3Client objeto y utilizó su builder(), pasando la región, para instanciarlo.

    Finalmente, para crear un depósito, necesitaremos empaquetar todo en una solicitud y disparar esa solicitud usando el S3Client ejemplo.

    Para empaquetar todo en una solicitud, llamamos al builder() del CreateBucketRequest class y pase el nombre del depósito y el ID de región.

    Finalmente, llamamos al createBucket() método.

    Nota: Los nombres de los depósitos de Amazon deben ser únicos a nivel mundial. Cambiar el new-bucket12345 nombre con otro.

    Después de ejecutar este código, el bucket sí aparece en nuestra consola de AWS:

    Ahora que nuestro depósito está en funcionamiento, ¡sigamos adelante y carguemos algunos archivos!

    Carga de un archivo en un bucket de S3

    Para cargar un objeto en un depósito existente, AWS Java SDK for S3 nos proporciona PutObjectRequest y RequestBody, que se utilizan con el S3Client y Region.

    • PutObjectRequest: Representa una solicitud web para cargar un objeto en un depósito de S3.
    • RequestBody: Representa el cuerpo de la solicitud web que contiene el objeto para cargar.

    Echemos un vistazo a cómo podemos usar estas clases para cargar un archivo:

    public class UploadObject {
        public static void main(String[] args) throws IOException {
            
            Region region = Region.US_WEST_2;
            S3Client s3 = S3Client.builder().region(region).build();
    
            String bucket = "new-bucket12345";
            String key = "key";
    
            // Put Object
            s3.putObject(PutObjectRequest.builder().bucket(bucket).key(key)
                    .build(), RequestBody.fromByteBuffer(getRandomByteBuffer(10000)));
        }
    
        private static ByteBuffer getRandomByteBuffer(int size) throws IOException {
            byte[] b = new byte[size];
            new Random().nextBytes(b);
            return ByteBuffer.wrap(b);
        }
    }
    

    los putObject() método del S3Client la clase acepta un PutObjectRequest objeto. Lo hemos poblado con un búfer de bytes aleatorio. Cuando ejecutamos este código, un nuevo archivo llamado key se cargará en el depósito.

    Revisemos el bucket de S3 en la consola de AWS:

    Eliminar un bucket de S3

    Además de las clases anteriores, y de la misma forma, el DeleteBucketRequest La clase se usa para enviar una solicitud de eliminación de un depósito.

    Region region = Region.US_WEST_2;
    S3Client s3 = S3Client.builder().region(region).build();
    
    String bucket = "new-bucket12345";
    
    DeleteBucketRequest deleteBucketRequest = DeleteBucketRequest.builder().bucket(bucket).build();
    
    s3.deleteBucket(deleteBucketRequest);
    

    Al igual que antes, configuramos un S3Client con el Region instancia y pasar el nombre del depósito. Finalmente, instanciamos un DeleteBucketRequest objeto con la información del depósito y ejecute el deleteBucket() método del S3Client clase.

    Después de eliminar el depósito, se eliminará de la consola S3.

    Conclusión

    En este artículo, analizamos cómo instalar y configurar AWS SDK para Java, específicamente para el servicio S3. Cubrimos la configuración de las credenciales para la autenticación de AWS SDK y la adición de las dependencias necesarias mediante Maven.

    También detallamos el código Java para algunas operaciones comunes de S3, como crear un nuevo depósito, cargar objetos en un depósito y eliminar un depósito.

    Sobre el Autor

    Este artículo fue escrito por Ramiro de la Vega, un desarrollador de software y consultor apasionado por ayudar a otros a mejorar sus vidas a través del código. Jacob es el autor de la Guía básica de codificación para desarrolladores, un libro introductorio que cubre conceptos y herramientas de codificación esenciales. Contiene capítulos sobre arquitectura informática básica, Internet, línea de comandos, HTML, CSS, JavaScript, Python, Java, bases de datos / SQL, Git y más.

    .

    Etiquetas:

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *