首页 > 解决方案 > 我无法使用一种方法删除 s3 对象,但我可以使用另一种方法删除。(obj.delete 与 delete_object)

问题描述

使用客户端会话 delete_object 方法和 obj.delete 方法删除 s3 对象有什么区别?

打电话时

import boto3

session = boto3.Session(aws_access_key_id=aws_access_key_id,
                        aws_secret_access_key=aws_secret_access_key_emr,
                        region_name=region_name)
s3_client = session.client('s3')
s3_client.delete_object(Bucket=bucket_name, Key='input/df.parquet')

代码运行没有任何错误。

但是下面的代码

s3 = boto3.resource('s3')
obj = s3.Object(bucket_name, "input/df.parquet")
obj.delete()

导致ClientError;调用 DeleteObject 操作时发生错误 (AccessDenied):访问被拒绝

使用 aws data wrangler 库时也会发生类似的事情。以下代码的运行

import awswrangler as wr
wr.s3.delete_objects(f"s3://{bucket_name}/input/df.parquet") 

不会删除任何内容,也不会显示任何错误。

标签: pythonamazon-s3boto3

解决方案


好的,解决了,我已将 s3 定义为 aboto3.resource('s3')而不是session.resource('s3')


推荐阅读