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