python - 无法找到通过环境变量设置 Airflow 连接的凭据

标签 python amazon-s3 airflow hook credentials

所以我尝试在我的 Airflow dag 中设置 S3Hook,通过在我的脚本中以编程方式设置连接,如下所示

from airflow.hooks.S3_hook import S3Hook
from airflow.models import Connection
from airflow import settings

def s3_test_hook():

    conn = Connection(
        conn_id='aws-s3',
        conn_type='s3',
        extra={"aws_access_key_id":aws_key, 
                "aws_secret_access_key": aws_secret},
        )

我可以毫无问题地运行 conn 行,这告诉我可以建立连接。 aws_keyaws_secret 通过 dotenv 使用我本地目录中的 .env 文件加载。

但是,当我运行函数中的接下来两行时:

    s3_hook = S3Hook(aws_conn_id='aws-s3')
    find_bucket = s3_hook.check_for_bucket('nba-data')

检查我知道存在的存储桶。我收到此错误

NoCredentialsError: Unable to locate credentials

关于如何解决这个问题有什么想法吗?

谢谢!

最佳答案

在您的代码中,您创建了一个 Airflow Connection 对象,但这本身并不执行任何操作。当一个钩子(Hook)被赋予一个连接ID时,它将在不同的位置查找给定的ID(按此顺序):

  • secret 后端(如果已配置)
  • 环境变量AIRFLOW_CONN_*
  • Airflow 元存储

您的连接目前仅在代码中定义,但 Airflow 无法在上述三个位置中的任何一个位置找到它。

Airflow 文档提供了一些配置 AWS 连接的指导:https://airflow.apache.org/docs/apache-airflow-providers-amazon/stable/connections/aws.html

关于python - 无法找到通过环境变量设置 Airflow 连接的凭据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70406951/

相关文章:

python - 如何将 onfocus 添加到 z3c.form 输入

python - 从 JPG 到 b64encode 再到 cv2.imread()

ruby-on-rails - 将 ACL 设置为 public_read 的文件上传到 AWS S3

airflow - Apache Airflow 任务卡在 'up_for_retry' 状态

google-cloud-platform - 使用客户端从 java 代码手动触发 Cloud Composer dag 运行

python - Airflow - 得到一个意外的关键字参数 'conf'

python - opencv/ python : mask in module cv2 while streaming webcam video

python - 使用 strftime 时 Jinja2 模板中的 "TypeError: must be string, not datetime.datetime"

python - 如何在以本地模式运行的 pyspark 中从 S3 读取数据?

javascript - 使用 $http.get() 通过 Angular 下载远程文件 - OAuth 身份验证