Google Cloud Composer におけるタスク内 Requests プロキシ
共有 worker プロセスのプロキシ環境を変更するのではなく、明示的な経路を持つタスク内の Requests セッションを作成します。
プロキシ経由の外向き HTTP リクエストが 1 件だけ必要な Cloud Composer タスクでは、タスクの callable の内部で 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
この callable は DAG の既存のタスク構成から呼び出します。プロキシは、これを実行する worker から到達できる必要があります。プロキシ認証を使わない許可済みの公開 API 呼び出しには、HTTP プロキシ一覧がセッションの HTTP プロキシ URL の候補を提供します。認証付き URL やその他のアカウント設定は、デプロイ用に定めたシークレットの保管先に置いてください。
セッションとレスポンスは関数の終了時に閉じられます。trust_env=False はRequests の環境連携を無効にし、継承されたプロキシ設定がこのクライアントの意図した動作を置き換えるのを防ぎます。また、環境に基づく Requests の CA バンドル選択も無効になります。必要に応じて、このクライアントの verify オプションで意図した CA バンドルを指定してください。
マネージド Airflow 環境に設定された環境変数は適用範囲が広く、プラットフォーム固有の制約があります。経路をこのセッションに渡すことで、worker プロセスの他のコードのために os.environ を変更せずに、判断をこのタスクの HTTP 操作に結び付けられます。