使用 s3 连接和 s3 hook 在 Airflow 上创建 boto3 s3 客户端

Sel*_*rom 5 amazon-s3 airflow

我正在尝试将我的 python 代码移至 Airflow。我有以下代码片段:

    s3_client = boto3.client('s3', 
                        region_name="us-west-2", 
                        aws_access_key_id=aws_access_key_id,
                        aws_secret_access_key=aws_secret_access_key)
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用 Aiflow 的 s3 挂钩和 s3 连接重新创建此 s3_client,但无法在任何文档中找到一种方法来执行此操作,而无需直接在代码中指定 aws_access_key_id 和 aws_secret_access_key 。

任何帮助,将不胜感激

Ela*_*lad 3

您需要在管理 -> 连接中或使用 cli 定义 aws 连接(请参阅文档)。定义连接后,您可以在S3Hook. 您的连接对象可以设置为:

Conn Id: <your_choice_of_conn_id_name>
Conn Type: Amazon Web Services
Login: <aws_access_key>
Password: <aws_secret_key>
Extra: {"region_name": "us-west-2"}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

在 Airflow 中,钩子包装了一个 python 包。因此,如果您的代码使用 hook,则没有理由直接导入 boto3。

  • @SelectStarFrom boto3 从 S3Hook 获取信用,而 S3Hook 从 AwsBaseHook 获取信用,AwsBaseHook 从您定义的连接获取信用。当您与 S3Hook 交互时,您只需为其提供您定义的 conn_id 即可。我建议您创建一个连接并编写一个简单的代码,使用 S3Hook 从 S3 下载文件。你会发现你的代码没有提到 boto3。您不需要直接与 boto 交互。您与钩子交互。如果您需要 boto 的功能而钩子没有,您只需将其添加到钩子中即可。 (2认同)