我已经实现了S3DeleteObjectsOperator,但是即使任务显示成功删除了密钥,实际上该对象也不会从S3存储桶中删除。
delete_s3bucket_files = S3DeleteObjectsOperator(
task_id='delete_s3bucket_files',
start_date=start_date,
bucket='****',
keys='******************',
aws_conn_id='aws_default',
)
即使任务通过时已完成,它也不会删除存储桶中指定键内的对象。我可以看到以下日志:
[2019-09-26 14:19:15,554] {base_task_runner.py:101}INFO - Job 1435: Subtask delete_s3bucket_files [2019-09-26 14:19:15,553] {cli.py:517} INFO - Running <TaskInstance: test_s3_delete.delete_s3bucket_files 2019-09-26T12:18:59.362470+00:00 [running]> on host Saurav-macbook.local
[2019-09-26 14:19:15,883] {s3_delete_objects_operator.py:83} INFO - Deleted: ['******************']
我如何了解任务的执行情况以及为什么不删除该对象?
答案 0 :(得分:0)
我无法使用S3DeleteObjectOperator
以及delete_objects()
中的S3Hook
方法删除对象。因此,我改为使用boto3
delete()
方法删除对象。
def delete_files():
s3 = boto3.resource('s3', aws_access_key_id='****', aws_secret_access_key='******************')
s3_bucket = s3.Bucket('****')
s3_bucket.objects.all().delete()
delete_s3bucket_files = PythonOperator(
task_id='delete_s3bucket_files',
start_date=start_date,
python_callable=delete_files,
dag=dag
)
不确定这是否是正确的方法,但目前为止对我还是有效。
答案 1 :(得分:0)
我也面临同样的问题,就像 dag 获得成功,但该分区仍然存在。 最后,我发现我没有正确传递密钥 像 x 是您的存储桶名称,对象为 y/year/2021/07 所以, 桶 ='x' 键='y/年/2021/07' 您必须在键中传递对象的完整路径 不带 s3://x, 之后就好了
delete_s3bucket_files = S3DeleteObjectsOperator( task_id='delete_s3bucket_files',bucket='x',keys='y/year/2021/07',aws_conn_id='aws_default',dag=dag)