S3_delete_objects_operator不会删除存储桶中的文件

时间:2019-09-26 12:28:19

标签: amazon-s3 airflow

我已经实现了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: ['******************']

我如何了解任务的执行情况以及为什么不删除该对象?

2 个答案:

答案 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)