ECS:S3オブジェクトの存在の確認
Summary: S3内でオブジェクトの存在を確認する方法。
Instructions
HEADを使用して、オブジェクトの存在をより効率的にチェックします。
オブジェクト・リストは、特定のオブジェクトの存在を検査する本質的に非効率的な方法です。インデックス検索は、この特定の要求に対して比較的遅いだけでなく、全体的な負荷とパフォーマンスにも影響を与える可能性があります
特定のオブジェクトを要求することは、パラメーターに一致する 1 つ以上のオブジェクトを要求するよりも常に効率的です。オブジェクト・リストは、分散索引を照会する必要がある検索形式です
オブジェクトに対して HEAD を使用することは、オブジェクトが存在することを確認するための最良の方法です。ECSオブジェクトSDKでは、これはGetObjectMetadataRequestによって行われます。
オブジェクトが存在しない場合、SDK は 404 エラー応答のために次の例外をスローします。
Exception in thread "main" com.emc.object.s3.S3Exception: Not Found
次に、getObjectMetadataクライアントメソッドで使用されるGetObjectMetadataRequestの使用例を示します。
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()); }
AWS Java SDK を使用していて、オブジェクトが存在しない場合、SDK は次の例外をスローします。
com.amazonaws.services.s3.model.AmazonS3Exception: Not Found
次に例を示します。
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()); }
オブジェクトが存在するかどうかを確認して、putObject が必要かどうかを判断します
putObject が必要かどうかを判断するためにオブジェクトの存在を確認する場合は、PutObjectRequests の条件付きメソッドの使用を検討してください。
withIfMatch() and withIfNoneMatch().
どちらのメソッドもオブジェクトのetag値を必要とし、PUTリクエストでヘッダー「if-match」、「if-none-match」を使用します
withIfUnmodifiedSince() と withIfModifiedSince() というメソッドもあり、それぞれが Date オブジェクトを受け取ります
etagまたはmd5が使用できない場合は、GetObjectMetadataRequest.
を使用して取得する必要があります。効率的な代替手段は、Date が十分に古い場合は withIfUnmodifiedSince() を使用することです。
SRとECSテクニカル サポート
オブジェクトの存在について懸念がある場合は、ECSサポート チームでサービス リクエストを開きます。