Crear, enumerar y eliminar buckets de Amazon S3 - AWS SDK for Java 2.x

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Crear, enumerar y eliminar buckets de Amazon S3

Cada objeto (archivo) de Amazon S3 debe residir en un bucket. Un bucket representa una colección (contenedor) de objetos. Cada bucket debe tener una clave (nombre) única. Para obtener información detallada acerca de los buckets y su configuración, consulte Uso de buckets de Amazon S3 en la Guía del usuario de Amazon Simple Storage Service.

nota

Práctica recomendada

Le recomendamos que habilite la regla del ciclo de vida AbortIncompleteMultipartUpload en los buckets de Amazon S3.

Esta regla le indica a Amazon S3 que anule las cargas multiparte que no se completen en un número especificado de días después de iniciarse. Cuando se supera el plazo establecido, Amazon S3 anula la carga y, a continuación, elimina la carga de datos incompleta.

Para obtener más información, consulte Configuración de ciclo de vida para un bucket con control de versiones en la Guía del usuario de Amazon Simple Storage Service.

nota

Estos fragmentos de código presuponen que comprende los conceptos básicos y que ha configurado las credenciales de AWS predeterminadas utilizando la información de Configuración para el acceso mediante inicio de sesión único para el SDK.

Crear un bucket

Cree un objeto CreateBucketRequest y proporcione un nombre de bucket. Páselo al método createBucket de S3Client. Utilice S3Client para realizar operaciones adicionales como mostrar o eliminar buckets, tal y como se muestra en posteriores ejemplos.

Importaciones

import software.amazon.awssdk.core.waiters.WaiterResponse; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.model.CreateBucketRequest; import software.amazon.awssdk.services.s3.model.S3Exception; import software.amazon.awssdk.services.s3.model.HeadBucketRequest; import software.amazon.awssdk.services.s3.model.HeadBucketResponse; import software.amazon.awssdk.services.s3.model.ListBucketsRequest; import software.amazon.awssdk.services.s3.model.ListBucketsResponse; import software.amazon.awssdk.services.s3.model.DeleteBucketRequest; import software.amazon.awssdk.services.s3.waiters.S3Waiter;

Código

Primero, cree un S3Client.

Region region = Region.US_EAST_1; S3Client s3 = S3Client.builder() .region(region) .build();

Realice una solicitud de creación de bucket.

import software.amazon.awssdk.core.waiters.WaiterResponse; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.model.CreateBucketRequest; import software.amazon.awssdk.services.s3.model.S3Exception; import software.amazon.awssdk.services.s3.model.HeadBucketRequest; import software.amazon.awssdk.services.s3.model.HeadBucketResponse; import software.amazon.awssdk.services.s3.model.ListBucketsRequest; import software.amazon.awssdk.services.s3.model.ListBucketsResponse; import software.amazon.awssdk.services.s3.model.DeleteBucketRequest; import software.amazon.awssdk.services.s3.waiters.S3Waiter; /** * Before running this Java V2 code example, set up your development * environment, including your credentials. * * For more information, see the following documentation topic: * * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html */ public class S3BucketOps { public static void main(String[] args) { Region region = Region.US_EAST_1; S3Client s3 = S3Client.builder() .region(region) .build(); String bucket = "bucket" + System.currentTimeMillis(); System.out.println(bucket); createBucket(s3, bucket); performOperations(s3, bucket); } // Create a bucket by using a S3Waiter object public static void createBucket(S3Client s3Client, String bucketName) { try { S3Waiter s3Waiter = s3Client.waiter(); CreateBucketRequest bucketRequest = CreateBucketRequest.builder() .bucket(bucketName) .build(); s3Client.createBucket(bucketRequest); HeadBucketRequest bucketRequestWait = HeadBucketRequest.builder() .bucket(bucketName) .build(); // Wait until the bucket is created and print out the response. WaiterResponse<HeadBucketResponse> waiterResponse = s3Waiter.waitUntilBucketExists(bucketRequestWait); waiterResponse.matched().response().ifPresent(System.out::println); System.out.println(bucketName + " is ready"); } catch (S3Exception e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } }

Consulte el ejemplo completo en GitHub.

Obtener una lista de buckets

Cree una ListBucketsRequest. Utilice el método listBuckets de S3Client para recuperar la lista de buckets. Si la solicitud se realiza correctamente, se devuelve un objeto ListBucketsResponse. Utilice este objeto de respuesta para recuperar la lista de buckets.

Importaciones

import software.amazon.awssdk.core.waiters.WaiterResponse; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.model.CreateBucketRequest; import software.amazon.awssdk.services.s3.model.S3Exception; import software.amazon.awssdk.services.s3.model.HeadBucketRequest; import software.amazon.awssdk.services.s3.model.HeadBucketResponse; import software.amazon.awssdk.services.s3.model.ListBucketsRequest; import software.amazon.awssdk.services.s3.model.ListBucketsResponse; import software.amazon.awssdk.services.s3.model.DeleteBucketRequest; import software.amazon.awssdk.services.s3.waiters.S3Waiter;

Código

Primero, cree un S3Client.

Region region = Region.US_EAST_1; S3Client s3 = S3Client.builder() .region(region) .build();

Realice una solicitud de lista de buckets.

// List buckets ListBucketsRequest listBucketsRequest = ListBucketsRequest.builder().build(); ListBucketsResponse listBucketsResponse = s3.listBuckets(listBucketsRequest); listBucketsResponse.buckets().stream().forEach(x -> System.out.println(x.name()));

Consulte el ejemplo completo en GitHub.

Eliminación de un bucket

Antes de eliminar un bucket de Amazon S3, debe asegurarse de que el bucket está vacío o el servicio producirá un error. Si tiene un bucket con control de versiones, también debe eliminar todos los objetos con control de versiones que están en el bucket.

Eliminación de objetos de un bucket

Cree un objeto ListObjectsV2Request y utilice el método listObjects de S3Client para recuperar la lista de objetos del bucket. A continuación, utilice el método deleteObject en cada objeto para eliminarlo.

Importaciones

import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.model.DeleteBucketRequest; import software.amazon.awssdk.services.s3.model.DeleteObjectRequest; import software.amazon.awssdk.services.s3.model.ListObjectsV2Request; import software.amazon.awssdk.services.s3.model.ListObjectsV2Response; import software.amazon.awssdk.services.s3.model.S3Exception; import software.amazon.awssdk.services.s3.model.S3Object;

Código

Primero, cree un S3Client.

ProfileCredentialsProvider credentialsProvider = ProfileCredentialsProvider.create(); Region region = Region.US_EAST_1; S3Client s3 = S3Client.builder() .region(region) .credentialsProvider(credentialsProvider) .build();

Elimine todos los objetos del bucket.

import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.model.DeleteBucketRequest; import software.amazon.awssdk.services.s3.model.DeleteObjectRequest; import software.amazon.awssdk.services.s3.model.ListObjectsV2Request; import software.amazon.awssdk.services.s3.model.ListObjectsV2Response; import software.amazon.awssdk.services.s3.model.S3Exception; import software.amazon.awssdk.services.s3.model.S3Object; /** * Before running this Java V2 code example, set up your development * environment, including your credentials. * * For more information, see the following documentation topic: * * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html */ public class S3BucketDeletion { public static void main(String[] args) throws Exception { final String usage = """ Usage: <bucket> Where: bucket - The bucket to delete (for example, bucket1).\s """; if (args.length != 1) { System.out.println(usage); System.exit(1); } String bucket = args[0]; Region region = Region.US_EAST_1; S3Client s3 = S3Client.builder() .region(region) .build(); deleteObjectsInBucket(s3, bucket); s3.close(); } public static void deleteObjectsInBucket(S3Client s3, String bucket) { try { // To delete a bucket, all the objects in the bucket must be deleted first. ListObjectsV2Request listObjectsV2Request = ListObjectsV2Request.builder() .bucket(bucket) .build(); ListObjectsV2Response listObjectsV2Response; do { listObjectsV2Response = s3.listObjectsV2(listObjectsV2Request); for (S3Object s3Object : listObjectsV2Response.contents()) { DeleteObjectRequest request = DeleteObjectRequest.builder() .bucket(bucket) .key(s3Object.key()) .build(); s3.deleteObject(request); } } while (listObjectsV2Response.isTruncated()); DeleteBucketRequest deleteBucketRequest = DeleteBucketRequest.builder().bucket(bucket).build(); s3.deleteBucket(deleteBucketRequest); } catch (S3Exception e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } } }

Consulte el ejemplo completo en GitHub.

Eliminar un bucket vacío

Cree un objeto DeleteBucketRequest con un nombre de bucket y páselo al método deleteBucket de S3Client.

Importaciones

import software.amazon.awssdk.core.waiters.WaiterResponse; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.model.CreateBucketRequest; import software.amazon.awssdk.services.s3.model.S3Exception; import software.amazon.awssdk.services.s3.model.HeadBucketRequest; import software.amazon.awssdk.services.s3.model.HeadBucketResponse; import software.amazon.awssdk.services.s3.model.ListBucketsRequest; import software.amazon.awssdk.services.s3.model.ListBucketsResponse; import software.amazon.awssdk.services.s3.model.DeleteBucketRequest; import software.amazon.awssdk.services.s3.waiters.S3Waiter;

Código

Primero, cree un S3Client.

Region region = Region.US_EAST_1; S3Client s3 = S3Client.builder() .region(region) .build();

Elimine el bucket.

DeleteBucketRequest deleteBucketRequest = DeleteBucketRequest.builder() .bucket(bucket) .build(); s3.deleteBucket(deleteBucketRequest); s3.close();

Consulte el ejemplo completo en GitHub.