S3マルチパートアップロードのETagの値

AWS, AWSCLI, S3

AWSCli で音源をS3に格納しました。
その際、ローカルのMD5値とS3のETag値を比較し確認をしましたが、一致しないケースが多数ありました。
どうにか確認できないかと調べてみました。

例)
音源ファイル :xxxxxx.3gp
ETag値 :396321df76a1493be6856ef7180541de-2
MD5値 :7cdfe2bcd8652d4686dbc0e294997186

そもそもETag(エンティティタグ)とは…

HTTPのレスポンスヘッダの一つ。キャッシュの有効性確認に使われる値。
URLにあるリソースに何かしらの変化があればETagも新しい値となる。生成方法は特に規定がない。
参考URL:RFC2616wiki

AmazonドキュメントのETag値の説明

S3の共通レスポンスヘッダーに説明ありました。
Common Response Headers

  • シングルパートアップロードはMD5値が入る。
  • マルチパートアップロードはMD5値が入らない。何が入るかの説明なし。。。

マルチパートアップロード時のETag値

AWS Discussion Forumsに記載がありました。計算式があります。
Again on ETAG and MD5 checksum for multipart

  • 分割したファイルのMD5値を合算している
  • 合算した値の末尾に – 分割数 を追記している。

例)
396321df76a1493be6856ef7180541de-2
2ファイルでマルチパートアップロードされ、合算MD5値は 396321df76a1493be6856ef7180541de

S3の情報とETag計算値の確認

【S3の情報】

【ETag計算値】
検索すると上記式でETag値を計算するツールなどありましたので、音源 xxxxxx.3gp のETag計算値を出しました。
必要な情報はS3のアップロード時のmultipartのパラメタで、今回はAWSCliのデフォルト値のためどちらも8MBになります。
– multipart_threshold (マルチパート閾値)
– multipart_chunksize (分割単位)

S3情報と一致。計算が正しいことがわかりました。

わかったこと

  • マルチパートアップロードのETagの値計算は可能。
  • しかし計算にアップロード時の情報(分割ブロックサイズ)が必要。。。

そもそものETagの使い方とは異なるので推奨できないですが、条件がそろえばローカルファイルとS3ファイルの一致チェックに使えます。

この記事を書いた人

小田英了
小田英了

楽曲管理システムのサポートを担当しています。
趣味:ランニング めざせサブ3.5!

AWS, AWSCLI, S3