Google Cloud Composer 中任务级 Requests 代理
为任务创建带显式路由的 Requests Session,而不改动共享 worker 进程的代理环境。
对于需要在 Cloud Composer 中通过代理发出一个出站 HTTP 请求的任务,请在该任务的可调用对象内部配置 HTTP 客户端:
def fetch_status():
import requests
with requests.Session() as session:
session.trust_env = False
with session.get(
'https://api.example/health',
proxies={'https': 'http://proxy.example:8080'},
timeout=(5, 30),
) as response:
response.raise_for_status()
return response.status_code
在 DAG 现有任务编排中调用这个可调用对象。代理必须能被执行该任务的 worker 访问。对于允许调用且无需代理认证的公共 API,HTTP 代理列表可为该 session 的 HTTP 代理 URL 提供候选。带认证的 URL 或其他账号配置应放在部署所指定的密钥来源中。
函数退出时 session 与响应都会被关闭。trust_env=False 会停用 Requests 的环境集成,从而避免继承来的代理设置覆盖此客户端预期的行为,同时也会停用 Requests 基于环境变量选择 CA bundle 的行为。如有需要,请通过此客户端的 verify 选项提供预期的 CA bundle。
为托管 Airflow 环境配置的环境变量作用范围更广,并受平台定义的约束。把路由传给这个 session,可使该决定仅附着于此任务的 HTTP 操作,而不会改动 worker 进程内其他代码的 os.environ。