ものづくりのブログ

うちのネコを題材にしたものづくりができたらいいなと思っていろいろ奮闘してます。

【AWS】S3 からダウンロードしたファイルのチェックサムを取得する方法について調査

S3 から落として来たファイルのチェックサムを知りたい場合は、etag を利用するといいみたいです。

etag とは

etag はオブジェクトのハッシュタグと同等で、ファイルの内容を反映しています。 32桁の hex で表すことができます。

コード

python の boto3 でヘッダー情報を取得するスクリプトです。

import boto3
import traceback

s3_bucket = "..."
s3_key = "..."

session = boto3.session.Session()
s3_client = session.client("s3")

try:
    header = s3_client.head_object(
        Bucket = s3_bucket,
        Key = s3_key,
    )
    etag = header["ResponseMetadata"]["HTTPHeaders"]["etag"].strip('""')

except Exception as e:
            logger.error(f"exception.: {traceback.format_exc()}")

問題点

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

ファイルをマルチパートアップロードすると、ローカルの MD5 値とS3の etag 値を比較すると一致しませんでした。
マルチパートアップロードされたオブジェクトの etag には「各パートのMD5のハッシュ値の合計-パート数」という値が設定されるようです。
docs.aws.amazon.com
stackoverflow.com