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 鈥嬧媏n 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 *