Airflow HttpSensor с использованием хоста по умолчанию - PullRequest
0 голосов
/ 12 июля 2020

Я пытаюсь опросить какую-то конечную точку, чтобы дождаться, пока заголовок Last-Modified не покажет, что конечная точка была обновлена ​​за последние пять минут (интервал проверки по умолчанию для HttpSensor). В журналах Airflow я вижу следующее:

[2020-07-11 22:40:53,794] {http_sensor.py:77} INFO - Poking: https://<the URL I want>
[2020-07-11 22:40:53,802] {logging_mixin.py:112} INFO - [2020-07-11 22:40:53,802] {base_hook.py:87} INFO - Using connection to: id: http_default. Host: https://www.httpbin.org/, Port: None, Schema: None, Login: None, Password: None, extra: None
[2020-07-11 22:40:53,803] {logging_mixin.py:112} INFO - [2020-07-11 22:40:53,803] {http_hook.py:136} INFO - Sending 'GET' to url: https://www.httpbin.org/https://<the URL I want>
[2020-07-11 22:40:53,837] {logging_mixin.py:112} WARNING - /usr/local/lib/python3.7/site-packages/urllib3/connectionpool.py:986: InsecureRequestWarning: Unverified HTTPS request is being made to host 'www.httpbin.org'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
[2020-07-11 22:40:53,841] {logging_mixin.py:112} INFO - [2020-07-11 22:40:53,841] {http_hook.py:150} ERROR - HTTP error: NOT FOUND
[2020-07-11 22:40:53,841] {logging_mixin.py:112} INFO - [2020-07-11 22:40:53,841] {http_hook.py:151} ERROR - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>404 Not Found</title>
<h1>Not Found</h1>
<p>The requested URL was not found on the server.  If you entered the URL manually please check your spelling and try again.</p>

Как показывают журналы, имя хоста, которое он использует: Using connection to: id: http_default. Host: https://www.httpbin.org/, поэтому, когда он отправляется для формирования запроса, он добавляет URL-адрес I ' m действительно интересует https://www.httpbin.org/, в результате получается 404. Это мое определение датчика (довольно простое):

    data_is_updated = HttpSensor(
        task_id="data-is-updated",
        endpoint=DAILY_URL,
        response_check=endpoint_is_updated_recently
    )

, где DAILY_URL - это нужный мне URL, а endpoint_is_updated_recently - это функция для синтаксического анализа заголовка Last-Modified, чтобы определить, обновлялся ли он с момента последнего тыка.

Есть ли у кого-нибудь идеи, почему он использует httpbin.org в качестве хоста? Это нигде не упоминается в моем коде, коде воздушного потока и т. Д. c. и curl <the URL I want> работает.

1 Ответ

1 голос
/ 12 июля 2020

Рекомендуется не включать в код учетные данные и информацию о подключении. Airflow использует Connections в качестве центральной базы данных для хранения и управления учетными данными и информацией о подключении.

В вашем случае HttpSensor использует подключение http_default. И кто-то указал https://www.httpbin.org/ в качестве хоста для соединения http_default. Вот почему этот URL-адрес добавляется к вашему DAILY_URL.

Аргумент endpoint из HttpSensor предназначен для хранения пути относительного к URL-адрес, хранящийся в соответствующем соединении.

...