【问题标题】:Delete S3 bucket object using Airflow使用 Airflow 删除 S3 存储桶对象
【发布时间】:2021-01-07 21:44:57
【问题描述】:

在 Airflow 中使用 S3DeleteObjectsOperator 不会删除指定 S3 存储桶中的对象,即使任务显示删除成功

delete_s3bucket_files = S3DeleteObjectsOperator(
  task_id='delete_s3bucket_files',
  start_date=start_date,
  bucket='*********************',
  keys='*********************',
  aws_conn_id='aws_default',
)

所以任务运行显示密钥已被删除,但它仍然存在于我的 S3 存储桶中。

[2019-09-16 11:39:25,775] {base_task_runner.py:101} INFO - Job 1346: Subtask delete_s3bucket_files [2019-09-16 11:39:25,775] {cli.py:517} INFO - Running <TaskInstance: daily_database_transfer.delete_s3bucket_files 2019-09-16T09:39:16.873030+00:00 [running]> on host Saurav-macbook.local
[2019-09-16 11:39:25,971] {s3_delete_objects_operator.py:83} INFO - Deleted: ['*********************']

我在这里遗漏了什么,或者有没有办法找出为什么它不删除对象?

【问题讨论】:

  • 这里很少快速检查 [1] 你确定boto3 客户端选择了正确的region_name;除非明确指定/覆盖,它通常默认为us-east-1? [2] 您确定触发此任务的 EC2 机器对所述存储桶和前缀(路径)具有 delete_object 权限吗?
  • 区域名称应该没有问题,因为卸载和复制等其他功能和工作完美。我不确定我是否理解delete_object 特权。你能解释一下如何改变吗?

标签: amazon-s3 airflow


【解决方案1】:

您可以只使用S3DeleteBucketOperatorforce_delete=True,在删除存储桶之前强制删除存储桶中的所有对象。

所以你可以这样做:

from airflow.providers.amazon.aws.operators.s3_bucket import S3DeleteBucketOperator

delete_s3bucket = S3DeleteBucketOperator(
  task_id='delete_s3bucket_task',
  force_delete=True,
  start_date=start_date,
  bucket_name='*********************',
  aws_conn_id='aws_default',
)

如果您希望单独删除文件和删除存储桶,您可以这样做:

from airflow.providers.amazon.aws.operators.s3_bucket import S3DeleteBucketOperator
from airflow.providers.amazon.aws.operators.s3_delete_objects import S3DeleteObjectsOperator

delete_s3bucket_files = S3DeleteObjectsOperator(
  task_id='delete_s3bucket_files',
  start_date=start_date,
  bucket='*********************',
  keys='*********************',
  aws_conn_id='aws_default',
)

delete_s3bucket = S3DeleteBucketOperator(
  task_id='delete_s3bucket_task',
  force_delete=False, #bucket will be deleted only if it's empty.
  start_date=start_date,
  bucket_name='*********************',
  aws_conn_id='aws_default',
)

delete_s3bucket_files >> delete_s3bucket

【讨论】:

    猜你喜欢
    • 2023-03-21
    • 2017-03-20
    • 2013-08-23
    • 2012-05-16
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 2017-03-06
    • 1970-01-01
    相关资源
    最近更新 更多