Broken DAG: [/airflow/dags/a.py] Невозможно расшифровать `дополнительные` параметры для входа = Нет, конфигурация FERNET_KEY отсутствует - PullRequest
0 голосов
/ 13 июня 2018

Я запустил Airflow без FERNET_KEY.Как только я понял это, я сделал следующее: https://airflow.apache.org/configuration.html#connections

pip install apache-airflow[crypto]

from cryptography.fernet import Fernet
fernet_key= Fernet.generate_key()
print(fernet_key)

взял ключ и поместил его в airflow.cfg, а затем вызвал airflow initdb, но ошибка все еще появляется.

Что я делаю не так?

Когда я делаю:

airflow webserver -D

Я получаю:

  File "/usr/local/lib/python2.7/dist-packages/airflow/models.py", line 713, in extra_dejson
    if self.extra:
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/attributes.py", line 293, in __get__
    return self.descriptor.__get__(instance, owner)
  File "/usr/local/lib/python2.7/dist-packages/airflow/models.py", line 632, in get_extra
    return fernet.decrypt(bytes(self._extra, 'utf-8')).decode()
  File "/usr/lib/python2.7/dist-packages/cryptography/fernet.py", line 101, in decrypt
    raise InvalidToken

В журнале указывается, что существует проблема с этим кодом:

def get_conn(conn_id, session=None):
    conn = (session.query(Connection)
                   .filter(Connection.conn_id == conn_id)
                   .first())
    return conn


def my_python_function():
   conn = get_conn('s3connection')
   key_id = conn.extra_dejson.get('aws_access_key_id')
   secret_key = conn.extra_dejson.get('aws_secret_access_key')
   default_region = conn.extra_dejson.get('region_name')
   return key_id,secret_key,default_region

Ответы [ 4 ]

0 голосов
/ 05 июля 2019

Обязательно сначала поместите ключ фернета, а затем выполните следующую команду:

airflow initdb

Если проблема не устранена, удалите все таблицы из базы данных и повторите команду:

airflow initdb
0 голосов
/ 14 июня 2018

Воздушный поток обычно генерирует один для вас.

Вот пример:

$ python
>>> from cryptography.fernet import Fernet
>>> k=Fernet.generate_key()
>>> print(k)
Z6BkzaWcF7r5cC-VMAumjpBpudSyjGskQ0ObquGJhG0=
>>> ^D
$ $EDITOR $AIRFLOW_HOME/airflow.cfg

Там изменения:

# Secret key to save connection passwords in the db
fernet_key = cryptography_not_found_storing_passwords_in_plain_text

на:

# Secret key to save connection passwords in the db
fernet_key = Z6BkzaWcF7r5cC-VMAumjpBpudSyjGskQ0ObquGJhG0=

Проверьте, установлен ли он как ожидалось (или он будет генерировать случайное значение каждый раз)

$ python
Python 2.7.13 (default, Jul 18 2017, 09:17:00)
[GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.42)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from airflow import configuration as conf
[2018-06-14 17:53:36,200] {__init__.py:57} INFO - Using executor SequentialExecutor
>>> conf.get('core','fernet_key')
'Z6BkzaWcF7r5cC-VMAumjpBpudSyjGskQ0ObquGJhG0='
>>>

Выше должен быть синтаксис v1.9.0 и v1.8.2 [исправлено], я дважды проверилэто с последним.

Всякий раз, когда вы меняете свой ключ фернета, вам нужно удалить все соединения и переменные, которые используют шифрование, так как они больше не будут расшифровываться.

Вы можете сбросить свойдБ, но это, вероятно, переусердствовало.

0 голосов
/ 11 сентября 2018

Используя Fernet, Airflow зашифровывает все пароли для своих соединений в базе данных бэкэнда.

В вашем случае, бэкэнд Airflow использует предыдущий ключ фернета, и вы сгенерировали ключ, с помощью которого создали новое соединение.

Я рекомендую сделать следующее. Сначала

airflow resetdb

это поможет удалить все существующие записи в вашей базе данных.

Затем

airflow initdb

это инициализирует сервер как свежий.

Затем запустите веб-сервер и планировщик воздушного потока

airflow web server -p {port}
airflow scheduler

Затем создайте новое соединение s3 в пользовательском интерфейсе (дополнительно - {"aws_access_key_id": "_ your_aws_access_key_id_", "aws_secret_access_key": "_your_aws_secret_access_key _"})

Теперь вы сможете проверить средство просмотра файлов s3, выполнив следующее решение из - Airflow s3 с использованием интерфейса пользователя

0 голосов
/ 13 июня 2018

Если вы запустили поток данных без ключа фернет, это не позволило бы зашифровать любое соединение.

Если у вас был ключ фернет, добавлены / отредактированы все соединения, они будут зашифрованы этим ключом.Если вы измените ключ каким-либо образом, эти соединения не будут расшифрованы.Если в настоящее время у вас есть соединения, зашифрованные с помощью различных ключей фернет-системы, единственным решением является перенос ключей, созданных с одного, на другой.Или просто удалите их и создайте заново, если у вас все еще есть нужные значения.

...