¿Cómo puedo verificar si el depósito ya existe en mi cuenta de AWS S3 usando el SDK de Java?
Usando el siguiente código
AmazonS3ClientBuilder.defaultClient().doesBucketExistV2(bucketName);Comprueba la existencia global del depósito y devuelve verdadero si un depósito con este nombre existe globalmente incluso si no soy el propietario de este depósito o no tengo acceso a ese depósito.
Entiendo la intención de hacer este método de esta manera para que nos permita determinar la disponibilidad del nombre del depósito, pero esto no es lo que necesito. Por supuesto, arrojará una excepción de que no tengo acceso a él más tarde, pero regresa indicando que existe el depósito con este nombre.
Quiero verificar si el depósito con el nombre dado existe en mi cuenta S3 para poder realizar operaciones en él.
Una posible solución puede ser list todos los cubos y buscar mi cubo en esa lista devuelta, lo que creo que no es un buen rendimiento (corríjame si me equivoco), ya que puede haber cientos de miles de cubos y búsquedas. en ellos no es eficiente.
¿Cómo puedo determinar si existe un depósito en mi cuenta de S3 que no verifica la existencia global ?
Una solicitud HeadBucket hace el trabajo.
HeadBucketRequest headBucketRequest = HeadBucketRequest.builder() .bucket(bucketName) .build(); try { s3Client.headBucket(headBucketRequest); return true; } catch (NoSuchBucketException e) { return false; }SDK 1.x no tiene un constructor HeadBucketRequest ni una NoSuchBucketException .
En caso de que alguien esté buscando la respuesta usando AWS SDK para Java 1.x , esto funciona:
private boolean checkAccessToBucket(final String bucketName) { try { final HeadBucketRequest request = new HeadBucketRequest(bucketName); s3Client.headBucket(request); return true; } catch (AmazonServiceException ex) { if (ex.getStatusCode() == 404 | ex.getStatusCode() == 403 || ex.getStatusCode() == 301) { return false; } throw ex; } catch (Exception ex) { LOGGER.error("Cannot check access", ex); throw ex; } }