气流:每日刷新后如何在 s3 存储桶中公开对象
Posted
技术标签:
【中文标题】气流:每日刷新后如何在 s3 存储桶中公开对象【英文标题】:Airflow: How to make an object public in s3 bucket after daily refresh 【发布时间】:2019-08-27 10:18:25 【问题描述】:我每天都在删除和创建相同的文件(s3 对象),并且该文件需要由不同公司的供应商访问。每次运行后,该对象默认为私有。 有没有办法自动将此存储桶对象设置为公共或将某些 IP 列入白名单?我正在使用气流。
在气流中搜索文档但没有帮助
-
某些操作员将存储桶公开或
某些运营商将 ip 列入白名单
【问题讨论】:
【参考方案1】: 我认为这并不是真正的 Airflow 查询,而更像是 AWS SDK / boto3 查询 Airflow 本身没有Operator
或Hook
具有上述功能;你必须编写一些代码来实现这一点
你可以通过
boto3
的S3 Client(也就是used by Airflow's S3Hook
)来实现这个
尤其可以利用put_object_acl(..)
方法
这是一个示例代码-sn-p
import boto3
from botocore.client import BaseClient
s3_client: BaseClient = boto3.client("s3", region_name="ap-southeast-1")
s3_client.put_object_acl(ACL="public-read", Bucket="my-bucket", Key="key/of/my/object")
为了在 Airflow 任务中实现上述 code-sn-p,有几个选项
-
只需使用
PythonOperator
/您正在使用的任何其他运算符,并将上述代码-sn-p 嵌入到您的其余代码中(最简单)
写一个 CustomS3Hook
扩展 Airflow 的 S3Hook
并将这个功能放在那里(从可重用性的角度来看很好,但有点矫枉过正)
将此 sn-p 放入某个 aws_utils.py
文件中,并在需要时在您的工作流程中使用它(可重复使用,并且不太复杂)
【讨论】:
以上是关于气流:每日刷新后如何在 s3 存储桶中公开对象的主要内容,如果未能解决你的问题,请参考以下文章