ECS : Vérification de l’existence de l’objet S3
Summary: Comment vérifier l’existence d’un objet dans S3.
Instructions
Utilisation de la commande HEAD pour vérifier plus efficacement l’existence d’un objet.
La liste d’objets est un moyen intrinsèquement inefficace de vérifier l’existence d’un objet spécifique. La recherche d’index est non seulement relativement lente pour cette demande spécifique, mais elle peut également affecter la charge et les performances globales.
La demande d’un objet spécifique est toujours plus efficace que la demande d’un ou de plusieurs objets correspondant aux paramètres. La liste d’objets est une forme de recherche dans laquelle les index distribués doivent être interrogés.
L’utilisation de HEAD sur l’objet est la meilleure méthode pour vérifier qu’il existe. Avec le SDK d’objets ECS, cette opération s’effectue à l’aide de GetObjectMetadataRequest.
Si l’objet n’existe PAS, le Kit de développement logiciel (SDK) lève l’exception suivante en raison d’une réponse d’erreur 404 :
Exception in thread "main" com.emc.object.s3.S3Exception: Not Found
Voici un exemple d’utilisation de GetObjectMetadataRequest qui est utilisé dans la méthode du client getObjectMetadata :
try { GetObjectMetadataRequest gom = new GetObjectMetadataRequest(<bucket>, <key>); S3ObjectMetadata om = s3.getObjectMetadata(gom); System.out.println("etag: " + om.getETag()); System.out.println("last modified: " + om.getLastModified().toString()); } catch(com.emc.object.s3.S3Exception e) { System.out.println("What happened: " + e.getMessage()); }
Si vous utilisez le kit SDK Java AWS et que l’objet n’existe pas, le SDK lève l’exception suivante.
com.amazonaws.services.s3.model.AmazonS3Exception: Not Found
En voici un exemple :
try { GetObjectMetadataRequest gom = new GetObjectMetadataRequest(AWSS3Factory.S3_BUCKET, key); s3.getObjectMetadata(gom); } catch(com.amazonaws.services.s3.model.AmazonS3Exception e) { System.out.println("What happened: " + e.getMessage()); }
Vérifiez si l’objet existe pour déterminer si putObject est nécessaire.
Si vous vérifiez l’existence de l’objet pour déterminer si putObject est nécessaire, envisagez d’utiliser les méthodes conditionnelles PutObjectRequests :
withIfMatch() and withIfNoneMatch().
Ces deux méthodes nécessitent une valeur etag d’objet et utilisent les en-têtes « if-match »,« if-none-match » dans la demande PUT.
Il y a aussi les méthodes withIfUnmodifiedSince() et withIfModifiedSince() qui prennent chacune un objet Date.
Si etag ou md5 ne sont pas disponibles, il faut les récupérer à l’aide d’un objet GetObjectMetadataRequest.
Une alternative efficace serait d’utiliser withIfUnmodifiedSince() si la date était assez ancienne.
Demande de service avec support technique ECS
Si vous avez des doutes concernant l’existence d’un objet, ouvrez une demande de service auprès de l’équipe de support ECS.