You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Docker部署的Airflow中通过.env变量配置S3连接?

解决方案

方案1:直接在S3Hook实例化时传入环境变量中的凭证

  • 操作逻辑:S3Hook原生支持初始化时传入aws_access_key_id和aws_secret_access_key参数,直接读取操作系统环境变量传入即可,无需提前在UI配置连接
  • 修改后的代码示例:
import os
import traceback
import airflow
from airflow import DAG
from airflow.exceptions import AirflowFailException
from airflow.operators.python import PythonOperator
from airflow.providers.amazon.aws.hooks.s3 import S3Hook

def _download_s3_data(templates_dict, **context):
    # 包含返回值列表
    data = templates_dict.get("sagemaker_autopilot_data")
    if any([not paths for paths in data]):
        raise AirflowFailException("部分路径未传入!")
    else:
        (
            sagemaker_training,
            sagemaker_testing,
        ) = data
        # 直接从环境变量读取凭证初始化S3Hook
        s3hook = S3Hook(
            aws_access_key_id=os.environ.get("AWS_ACCESS_KEY_ID"),
            aws_secret_access_key=os.environ.get("AWS_SECRET_ACCESS_KEY")
        )
        # 解析s3 url
        bucket_name, key = s3hook.parse_s3_url(s3url=sagemaker_training)
        try:
            file_name = s3hook.download_file(key=key, bucket_name=bucket_name)
        except:
            traceback.print_exc()
            raise AirflowFailException("下载s3文件出错")

方案2:通过Airflow连接环境变量自动配置(无需修改DAG代码)

  • 操作逻辑:Airflow支持通过格式为AIRFLOW_CONN_<连接ID>的环境变量自动注册连接,无需在UI手动添加。你可以直接定义AWS默认连接的环境变量,S3Hook默认会读取aws_default连接的凭证
  • 配置方法:
    1. 在你的.env文件中添加如下变量(会自动读取你已经配置的AWS密钥):
    AIRFLOW_CONN_AWS_DEFAULT=aws://${AWS_ACCESS_KEY_ID}:${AWS_SECRET_ACCESS_KEY}@
    
    1. 在docker-compose.yml中确认该环境变量已经传递给Airflow的scheduler、worker服务,重启服务后生效
    2. 原有DAG代码无需修改,S3Hook()默认会自动读取该连接的凭证

注意事项

  • 两种方案都需要确保你在.env中配置的AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY已经正确传递到Airflow运行的容器中,可通过在DAG中打印os.environ验证环境变量是否生效
  • 如果需要对接非AWS的S3兼容服务(比如MinIO、LocalStack),还可以在S3Hook初始化时额外传入endpoint_url参数指定服务地址

内容的提问来源于stack exchange,提问作者yudhiesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 08:45:03