Airflow 如何将代理配置传递到连接中

Airflow 如何将代理配置传递到连接中,airflow,Airflow,我有一个运行airflow的ec2服务器,我必须为所有外部https请求使用代理。以下函数适用于dag中的 import boto3 from botocore.config import Config def get_files(**context): s3 = boto3.client('s3',config=Config(proxies={'https': 'mycorpsproxy.com:3128'})) s3_bucket = "some_bucket"

我有一个运行airflow的ec2服务器,我必须为所有外部https请求使用代理。以下函数适用于dag中的

import boto3
from botocore.config import Config

def get_files(**context):

    s3 = boto3.client('s3',config=Config(proxies={'https': 'mycorpsproxy.com:3128'}))
    s3_bucket = "some_bucket"
    paginator = s3.get_paginator("list_objects")
    page_iterator = paginator.paginate(
        Bucket=s3_bucket, Prefix="folder_like_prefix/"
    current_files = []
    for page in page_iterator:
        if 'Contents' not in page:
            continue
        for object in page['Contents']:
            current_files.append(object['Key'])
    return current_files

但我不想在每个dag中都硬编码那个代理。我想使用s3挂钩,但找不到在气流连接的额外字段中放置什么使其工作

我尝试了一些变化,例如

但是当我运行dag时会出现json错误

[2019-11-04 14:08:01,266] {logging_mixin.py:112} INFO - [2019-11-04 14:08:01,266] {connection.py:296} ERROR - Expecting value: line 1 column 1 (char 0)
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/airflow/models/connection.py", line 294, in extra_dejson
    obj = json.loads(self.extra)
  File "/usr/lib/python3.6/json/__init__.py", line 354, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python3.6/json/decoder.py", line 339, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python3.6/json/decoder.py", line 357, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
[2019-11-04 14:08:01,267] {logging_mixin.py:112} INFO - [2019-11-04 14:08:01,266] {connection.py:297} ERROR - Failed parsing the json for conn_id s3_airflow

文件中写道: config_kwargs:用于构造传递给boto3.client和boto3.resource的botocore.config.config的附加kwargs

见:

因此,您可以像这样在UI中添加额外的参数:
{“主机”:https://target:port“,”aws_access_key_id“:”my_key_id“,”aws_secret_access_key“:”my_access_key“,”config_kwargs“:{”代理“:{”http:“'my.Inase.proxy:8080',”https:'my.Inase.proxy:8080'}

在文档中写道: config_kwargs:用于构造传递给boto3.client和boto3.resource的botocore.config.config的附加kwargs

见:

因此,您可以像这样在UI中添加额外的参数:
{“主机”:https://target:port“,”aws_access_key_id“:”my_key_id“,”aws_secret_access_key“:”my_access_key“,”config_kwargs“:{”代理“:{”http:“'my.Inase.proxy:8080',”https:'my.Inase.proxy:8080'}

非常好奇/也在研究这个问题。我还没有解决方案,但是如果有帮助的话,我会提醒你/我的回答是,我甚至没有在S3连接中设置代理,并且遇到了完全相同的错误消息。非常好奇/也在处理这个问题。我还没有解决方案,但如果有帮助,我会向您表示,我甚至没有在S3连接中设置代理,并且遇到了完全相同的错误消息。