【问题标题】:Unable to locate credentials setting up airflow connection through env variables无法找到通过环境变量设置气流连接的凭据
【发布时间】:2022-01-21 04:37:38
【问题描述】:

所以我试图在我的气流 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 加载 int,其中包含我在本地目录中的 .env 文件。

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

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

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

NoCredentialsError: Unable to locate credentials

关于如何解决这个问题的任何想法?

谢谢!

【问题讨论】:

    标签: python amazon-s3 airflow hook credentials


    【解决方案1】:

    在您的代码中,您创建了一个 Airflow Connection 对象,但这本身并没有做任何事情。当一个钩子被赋予一个连接 id 时,它会在不同的位置(按这个顺序)查找给定的 id:

    • Secrets 后端(如果已配置)
    • 环境变量AIRFLOW_CONN_*
    • 气流元存储

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

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

    【讨论】:

    • Airflow 从哪里读取环境变量AIRFLOW_CONN_AWS_S3?它在我的 dockerfile.dev 中,所以在我的本地气流服务器上运行我的 dag 将执行。但是如果我在 spyder 中逐行运行代码,则脚本不在那个 docker 环境中,所以我不确定在哪里设置 conn id
    猜你喜欢
    • 1970-01-01
    • 2020-10-10
    • 2020-04-08
    • 1970-01-01
    • 1970-01-01
    • 2020-04-27
    • 1970-01-01
    • 2015-10-28
    • 1970-01-01
    相关资源
    最近更新 更多