Как программно настроить ведение журнала Airflow 1.10 с помощью конечной точки localstack s3? - PullRequest
0 голосов
/ 16 февраля 2020

В попытке настроить регистрацию потока воздуха в локальные стеки s3, для локальных сред и сред разработки kubernetes, я следую документации по потоку воздуха для регистрации в s3 . Чтобы дать небольшой контекст, localstack - это локальный облачный стек AWS с AWS службами, включая s3, работающий локально.

Я добавил следующие переменные среды в свои контейнеры воздушного потока аналогично этому другому сообщению переполнения стека при попытке войти в мои локальные сегменты s3. Это то, что я добавил к docker-compose.yaml для всех контейнеров воздушного потока:

       - AIRFLOW__CORE__REMOTE_LOGGING=True
       - AIRFLOW__CORE__REMOTE_BASE_LOG_FOLDER=s3://local-airflow-logs
       - AIRFLOW__CORE__REMOTE_LOG_CONN_ID=MyS3Conn
       - AIRFLOW__CORE__ENCRYPT_S3_LOGS=False

Я также добавил свои кредиты localstack s3 к airflow.cfg

[MyS3Conn]
aws_access_key_id = foo
aws_secret_access_key = bar
aws_default_region = us-east-1
host = http://localstack:4572    # s3 port. not sure if this is right place for it 

Кроме того, я установлен apache -airflow [hooks] и apache -airflow [s3], хотя неясно, какой из них действительно нужен, на основании документации .

, за которой я следовал шаги в предыдущем сообщении о переполнении стека при попытке проверить, может ли S3Hook записать в мой экземпляр s3 localstack:

from airflow.hooks import S3Hook
s3 = S3Hook(aws_conn_id='MyS3Conn')
s3.load_string('test','test',bucket_name='local-airflow-logs')

Но я получаю botocore.exceptions.NoCredentialsError: Unable to locate credentials.

После добавления учетных данных на консоли воздушного потока под /admin/connection/edit, как показано: enter image description here это новое исключение, botocore.exceptions.ClientError: An error occurred (InvalidAccessKeyId) when calling the PutObject operation: The AWS Access Key Id you provided does not exist in our records. возвращается. Другие люди сталкивались с такой же проблемой , и это, возможно, было связано с сетью.

В любом случае, необходима программная c настройка, а не ручная.

Я смог получить доступ к корзине, используя автономный скрипт Python (явно вводя AWS учетные данные с помощью boto), но он должен работать как часть воздушного потока.

Есть ли правильный способ настроить хост / порт / учетные данные для S3Hook путем добавления MyS3Conn к airflow.cfg?

Исходя из исходного кода перехватчика потока s3 , кажется, что пользовательский URL-адрес s3 может еще не поддерживаться потоком воздуха. Тем не менее, основываясь на исходном коде aws_hook воздушного потока (родительский), представляется возможным установить endpoint_url, включая порт, и он должен быть прочитан из airflow.cfg.

Я могу для проверки и записи в мое ведро s3 в localalsck, используя только boto. Кроме того, curl http://localstack:4572/local-mochi-airflow-logs возвращает содержимое контейнера из контейнера с воздушным потоком. И aws --endpoint-url=http://localhost:4572 s3 ls возвращает Could not connect to the endpoint URL: "http://localhost:4572/".

Какие другие шаги могут потребоваться для регистрации в локальные стеки s3 из потока воздуха, работающего в docker, с автоматической настройкой, и поддерживается ли это еще?

1 Ответ

0 голосов
/ 31 марта 2020

Я думаю, вы должны использовать localhost, а не localstack для конечной точки, например, host = http://localhost:4572.

В Airflow 1.10 вы можете переопределить конечную точку для каждого соединения, но, к сожалению, это поддерживает только одну конечную точку за раз, поэтому вы должны изменить ее для всех AWS хуков, используя соединение. Чтобы переопределить это, отредактируйте соответствующее соединение и в поле «Extra» поставьте:

{"host": "http://localhost:4572"}

Я полагаю, это исправит это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...