【问题标题】:unable to locate credentials aws hooks无法找到凭据 aws 挂钩
【发布时间】:2020-11-17 21:16:34
【问题描述】:

我正在尝试使用 airflow.hooks.S3Hook 创建一个简单的 DAG 编排 2 个任务,第一个在 bash 上打印一个简单的字符串,下一个是将 CSV 文件上传到 AWS s3 存储桶。 所以我得到这个错误:

                                   unable to locate credentials

这是与 aws_access_key_id 和 aws_secret_access_key 相关的凭据错误。 我知道我可以使用 boto3 解决它,但我需要使用 airflow.hooks 来解决它

from airflow import DAG
from airflow.hooks.S3_hook import S3Hook
from airflow.operators.bash_operator import BashOperator
from airflow.operators.python_operator import PythonOperator
from airflow.utils.dates import days_ago

default_arguments = {'owner': 'airflow', 'start_date': days_ago(1)}


def upload_file_to_s3_bucket(filename, key, bucket_name, region_name):
    hook = S3Hook(aws_conn_id='aws_default')
    hook.create_bucket(bucket_name, region_name)
    hook.load_file(filename, key, bucket_name)



    with DAG('upload_to_aws',
     schedule_interval='@daily',
     catchup=False,
     default_args=default_arguments
     ) as dag:
          bash_task = BashOperator(task_id='bash_task',
                         bash_command='echo $TODAY',
                         env={'TODAY': '2020-11-16'})
          python_task = PythonOperator(task_id='py_task',
                             python_callable=upload_file_to_s3_bucket,
                             op_kwargs={'filename': '*******.csv',
                                        'key': 'my_s3_reasult.csv',
                                        'bucket_name': 'tutobucket',
                                        'region_name': 'us-east-1'}
                             )

bash_task >> python_task

【问题讨论】:

    标签: python python-3.x boto3 airflow


    【解决方案1】:

    您在S3Hook 中指定了aws_conn_id。此连接需要配置,例如通过 UI,请参阅Managing Connections

    Airflow 需要知道如何连接到您的环境。其他系统和服务的主机名、端口、登录名和密码等信息在 UI 的 Admin->Connections 部分中处理。您将编写的管道代码将引用 Connection 对象的“conn_id”。

    AWS connection 也有专门的描述:

    配置连接

    • 登录(可选)- 指定 AWS 访问密钥 ID。
    • 密码(可选)- 指定 AWS 秘密访问密钥。

    【讨论】:

    • 旧版本的气流即使没有这个也能工作,我刚刚升级到 2.0.2,它似乎完全破坏了 s3 日志记录,我不想在 UI 中存储密钥,还有其他的吗方式
    【解决方案2】:

    我解决了,经过一番挖掘后,我能够使它工作。

    在我指定的这些字段下:

    Conn Id: aws_default
    
    Conn Type: Amazon Web Services
    
    Extra:
    
     {"aws_access_key_id":"aws_access_key_id",
      "secret_access_key": "aws_secret_access_key"}
    

    【讨论】:

      猜你喜欢
      • 2019-06-01
      • 2021-09-29
      • 2022-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多