J'utilise docker-compose pour mettre en place un cluster airflow évolutif. J'ai basé mon approche sur le Dockerfile suivant https://hub.docker.com/r/puckel/docker-airflow/
Mon problème est de faire en sorte que les journaux soient configurés pour écrire/lire à partir de s3. Lorsqu'une dag est terminée, je reçois une erreur comme celle-ci
*** Log file isn't local.
*** Fetching here: http://ea43d4d49f35:8793/log/xxxxxxx/2017-06-26T11:00:00
*** Failed to fetch log file from worker.
*** Reading remote logs...
Could not read logs from s3://buckets/xxxxxxx/airflow/logs/xxxxxxx/2017-06-
26T11:00:00
J'ai créé une nouvelle section dans le airflow.cfg
comme ceci
[MyS3Conn]
aws_access_key_id = xxxxxxx
aws_secret_access_key = xxxxxxx
aws_default_region = xxxxxxx
Et puis j'ai spécifié le chemin s3 dans la section des journaux distants dans airflow.cfg
remote_base_log_folder = s3://buckets/xxxx/airflow/logs
remote_log_conn_id = MyS3Conn
Ai-je correctement configuré ce système et y a-t-il un bug ? Y a-t-il une recette du succès qui m'échappe ?
-- Mise à jour
J'ai essayé d'exporter aux formats URI et JSON, mais aucun ne semble fonctionner. J'ai ensuite exporté le aws_access_key_id et le aws_secret_access_key, puis airflow a commencé à le capter. Maintenant, je reçois cette erreur dans les journaux du travailleur
6/30/2017 6:05:59 PMINFO:root:Using connection to: s3
6/30/2017 6:06:00 PMERROR:root:Could not read logs from s3://buckets/xxxxxx/airflow/logs/xxxxx/2017-06-30T23:45:00
6/30/2017 6:06:00 PMERROR:root:Could not write logs to s3://buckets/xxxxxx/airflow/logs/xxxxx/2017-06-30T23:45:00
6/30/2017 6:06:00 PMLogging into: /usr/local/airflow/logs/xxxxx/2017-06-30T23:45:00
-- Mise à jour
J'ai également trouvé ce lien https://www.mail-archive.com/dev@airflow.incubator.apache.org/msg00462.html
Je me suis ensuite connecté à l'une de mes machines de travail (séparée du serveur web et du planificateur) et j'ai exécuté ce bout de code en python.
import airflow
s3 = airflow.hooks.S3Hook('s3_conn')
s3.load_string('test', airflow.conf.get('core', 'remote_base_log_folder'))
Je reçois cette erreur.
boto.exception.S3ResponseError: S3ResponseError: 403 Forbidden
J'ai essayé d'exporter plusieurs types différents de AIRFLOW_CONN_
envs comme expliqué ici dans la section sur les connexions https://airflow.incubator.apache.org/concepts.html et par d'autres réponses à cette question.
s3://<AWS_ACCESS_KEY_ID>:<AWS_SECRET_ACCESS_KEY>@S3
{"aws_account_id":"<xxxxx>","role_arn":"arn:aws:iam::<xxxx>:role/<xxxxx>"}
{"aws_access_key_id":"<xxxxx>","aws_secret_access_key":"<xxxxx>"}
J'ai également exporté AWS_ACCESS_KEY_ID et AWS_SECRET_ACCESS_KEY sans succès.
Ces informations d'identification sont stockées dans une base de données. Une fois que je les ai ajoutées dans l'interface utilisateur, elles devraient être récupérées par les travailleurs, mais ceux-ci ne sont pas en mesure d'écrire/de lire les journaux pour une raison quelconque.
0 votes
A ce stade, je suis prêt à toutes les stratégies pour que l'exploitation forestière fonctionne. Je ne peux pas les avoir localement, sur s3, ou en utilisant rfs
0 votes
Le dossier 'logs' existe-t-il dans le chemin ? Au moins les journaux locaux devraient fonctionner sans problème si le dossier existe. S'ils ne fonctionnent pas, même localement, la seule autre raison à laquelle je pense est que les permissions sur le dossier airflow sont incorrectes.
0 votes
On a peut-être quelque chose ici. github.com/puckel/docker-airflow/pull/100