Ein aufgabenlokaler Requests-Proxy in Google Cloud Composer
Erstellen Sie eine aufgabenlokale Requests-Session mit expliziter Route, statt die Proxy-Umgebung eines gemeinsam genutzten Worker-Prozesses zu ändern.
Für eine Cloud-Composer-Aufgabe, die genau eine ausgehende HTTP-Anfrage über einen Proxy benötigt, konfigurieren Sie den HTTP-Client innerhalb des Callables der Aufgabe:
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
Rufen Sie dieses Callable über die bestehende Aufgabenanordnung des DAG auf. Der Proxy muss von dem Worker aus erreichbar sein, der die Aufgabe ausführt. Für zulässige Aufrufe öffentlicher APIs ohne Proxy-Authentifizierung liefert die HTTP-Proxy-Liste Kandidaten für die HTTP-Proxy-URL der Session. Eine authentifizierte URL oder andere Kontokonfiguration gehört in die im Deployment vorgesehene Secret-Quelle.
Session und Antwort werden geschlossen, sobald die Funktion endet. trust_env=False deaktiviert die Umgebungsintegration von Requests, sodass geerbte Proxy-Einstellungen das gewünschte Verhalten dieses Clients nicht ersetzen, und schaltet zugleich die umgebungsbasierte Auswahl des CA-Bundles durch Requests ab. Übergeben Sie das gewünschte CA-Bundle bei Bedarf über die verify-Option dieses Clients.
Umgebungsvariablen, die für eine verwaltete Airflow-Umgebung konfiguriert sind, haben eine größere Reichweite und plattformdefinierte Einschränkungen. Wenn Sie die Route an diese Session übergeben, bleibt die Entscheidung an den HTTP-Vorgang dieser Aufgabe gebunden, ohne os.environ für anderen Code im Worker-Prozess zu verändern.