S3 REST APIを実装する際の推奨事項

StorageGRID Webscaleで使用するためにS3 REST APIを実装する場合は、次の推奨事項を考慮してください。

存在しないオブジェクトに対するHEADの推奨事項

オブジェクトが存在しないはずのパスにオブジェクトが存在するかどうかをアプリケーションで定期的にチェックする場合は、「Available」整合性制御を使用します。たとえば、アプリケーションが特定の場所に対してPUT処理の前にHEAD処理を行う場合は、「Available」整合性レベルを使用してください。

そうしないと、使用できないストレージ ノードがある場合にHEAD処理でオブジェクトが見つからないと、「500 Internal Server Error」が大量に返される可能性があります。

PUT Bucket整合性要求を使用して各バケットに「Available」整合性制御を設定できます。または、個々のAPI処理の要求ヘッダーで整合性制御を指定することもできます。

オブジェクト キーの推奨事項

オブジェクト キーの最初の4文字に、ランダムな値を使用しないでください。この推奨事項は、AWSのキー プレフィックスの推奨事項とは異なります。ランダムな値ではなく、一意でもないプレフィックスを使用してください(imageなど)。

AWSの推奨事項に従い、キー プレフィックスにランダムな一意の文字を使用する場合は、オブジェクト キーの前にディレクトリ名を指定してください。たとえば、次の形式を使用します。

mybucket/mydir/f8e3-image3132.jpg

次の形式は使用しないでください。

mybucket/f8e3-image3132.jpg

「範囲を指定した読み取り」の推奨事項

StorageGRID Webscale[Stored Object Compression]グリッド オプションが有効になっている場合は、S3クライアント アプリケーションで、返されるバイト数の範囲を指定するGET Object処理を実行しないようにする必要があります。StorageGRID Webscaleでは、要求されたバイトにアクセスするためにオブジェクトの圧縮を解除する必要があるため、このような「範囲を指定した読み取り」処理は効率的ではありません。非常に大きなオブジェクトから小さい範囲のバイト数を要求するGET Object処理は特に効率が悪く、たとえば、50GBの圧縮オブジェクトから10MBの範囲を読み取る処理は非常に非効率的です。

圧縮オブジェクトから範囲を読み取ると、クライアント要求がタイムアウトになる場合があります。

注:オブジェクトを圧縮する必要があり、クライアント アプリケーションが範囲読み取りを使用する必要がある場合は、そのアプリケーションの読み取りタイムアウトを増やしてください。