Amazon S3: バケットのサイズを取得する
概要
S3 バケットに現在保存されているサイズを取得するには、BucketSizeBytes メトリクスを参照します。
参考) Metrics and dimensions - Amazon Simple Storage Service (S3)
コード
def get_s3_bucket_size_bytes(bucket_name: str, region_name: str) -> Optional[int]:
    end_datetime = datetime.now()
    start_datetime = end_datetime - timedelta(days=2)
    cw_client = boto3.client("cloudwatch", region_name=region_name, config=Config(retries={"mode": "standard"}))
    response = cw_client.get_metric_statistics(
        Namespace="AWS/S3",
        MetricName="BucketSizeBytes",
        Dimensions=[
            {"Name": "BucketName", "Value": bucket_name},
            {"Name": "StorageType", "Value": "StandardStorage"},
        ],
        Statistics=["Maximum"],
        StartTime=start_datetime,
        EndTime=end_datetime,
        Period=86400,  # daily
    )
    datapoints = sorted(response["Datapoints"], key=lambda x: x["Timestamp"])
    if len(datapoints) == 0:
        return None
    return int(datapoints[-1]["Maximum"])  # latest value