{"id":885,"date":"2022-10-13T15:57:15","date_gmt":"2022-10-13T13:57:15","guid":{"rendered":"https:\/\/affluences.com\/blog\/?p=885"},"modified":"2022-10-13T15:58:30","modified_gmt":"2022-10-13T13:58:30","slug":"implementation-airflow-affluences","status":"publish","type":"post","link":"https:\/\/affluences.com\/blog\/implementation-airflow-affluences\/","title":{"rendered":"Affluences adopte Airflow pour son gestionnaire de t\u00e2ches planifi\u00e9es !"},"content":{"rendered":"\n<p>Nous avons cherch\u00e9 \u00e0 ajouter au sein de l\u2019infrastructure <strong>d\u2019Affluences <\/strong>une solution qui nous permettrait de g\u00e9rer plus facilement nos diff\u00e9rents processus, notamment de script, ou de t\u00e2che planifi\u00e9e. La solution qui a \u00e9t\u00e9 retenue est <strong>Airflow<\/strong>, et c\u2019est une vraie r\u00e9ussite pour le besoin que nous avions.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh3.googleusercontent.com\/kaynJj-Fm6sqzQSj2z7qsqFqq5wTeUV3PSapYoqZ-933huhdZMGHLNWv0gf9Y0Z5Jqz-O4V8evnQQfwkN38pTXb_24ZjdjN4H14CSPJymT6P_VS7VDKUDG3B1cnpCW6S0YF9OpnskTHcZFPOsbv_V5_SS-3f_MQR8-itzpVEkqf_oY_y99JhX_gzwA\" alt=\"\" width=\"437\" height=\"169\"\/><\/figure><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Airflow, c\u2019est quoi ?<\/h2>\n\n\n\n<p>Apache <strong>Airflow <\/strong>est une plateforme de planification de flux de travail open-source, utilis\u00e9e par un grand nombre d\u2019entreprises pour ce qui touche \u00e0 l&rsquo;ing\u00e9nierie des donn\u00e9es.<\/p>\n\n\n\n<p>La solution est tr\u00e8s complexe, mais aussi compl\u00e8te, et bien document\u00e9e. La mise en place de l\u2019outil est globalement complexe, mais l&rsquo;\u00e9criture de job depuis la 2.0 est faite avec des annotations et les tests sont assez simples \u00e0 mettre en place.<\/p>\n\n\n\n<p><strong>Airflow <\/strong>utilise des <strong>DAG<\/strong> (Directed Acyclic Graph) qui peuvent \u00eatre individuellement param\u00e9tr\u00e9s et que l\u2019on peut apparenter \u00e0 des CRON, pour celles et ceux qui sont plus familiers avec. Sans aller trop profond dans les d\u00e9tails, Airflow se compose d\u2019un minimum de 3 programmes :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Airflow Webserver: Page web qui permet la gestion des <strong>dag<\/strong><\/li><li>Airflow Scheduler: Message broker en charge de la distribution des <strong>dags<\/strong> \u00e0 des workers<\/li><li>Airflow Worker: Programme qui \u00e9coute le scheduler et ex\u00e9cute le <strong>dag<\/strong> d\u00e8s lors que l\u2019ordre lui est donn\u00e9. Il est pr\u00e9f\u00e9rable d\u2019avoir plus d\u2019un worker afin de pouvoir parall\u00e9liser les ex\u00e9cutions.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Les avantages d&rsquo;Airflow<\/h2>\n\n\n\n<p><strong>Airflow<\/strong> nous permet de centraliser les diff\u00e9rentes t\u00e2ches planifi\u00e9es, CRON, script, et autres petits programmes, en un seul endroit. \u00c9cris en <strong>Python<\/strong>, nos <strong>dag<\/strong> sont assez simples \u00e0 faire, et le maintien du code est, lui aussi, simplifi\u00e9.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh4.googleusercontent.com\/NJvkIHbYvlR0kg0nj2nGPUKoacP5N1vtpRhA56Xa9GqBemz9lv3UC5N3nC6shiX_eKv4b6VhLEyeqZn6p3xNks0cURunw2J42BJZsgCzlOup-NMaaixNDxMRkUNejEc_FaJIGM1--UcZJbCqgKafd0g6lzpRk7gOqRasA3U7M1_w5r7XJGkXg-DLcA\" alt=\"\"\/><\/figure>\n\n\n\n<p>L\u2019interface est facilement accessible autant pour les d\u00e9veloppeurs, que pour des personnes en dehors de la tech qui n\u2019aurait sans \u00e7a pas pu d\u00e9clencher eux-m\u00eame des ex\u00e9cutions au besoin. &nbsp; L\u2019audit est aussi important pour <strong>Affluences<\/strong>, il est d\u2019autant plus simple maintenant que nous avons une interface sur ces projets !&nbsp;<\/p>\n\n\n\n<p>D\u2019autres fonctionnalit\u00e9s tel que le OAuth Google, les gestions de droits, les ex\u00e9cutions avec configuration, etc\u2026 font de cet outil un membre \u00e0 part enti\u00e8re de la stack <strong>Affluences<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Les probl\u00e8mes d&rsquo;Airflow<\/h2>\n\n\n\n<p>\u00c9videmment une telle solution contient quelques contreparties qui dans notre cas ont \u00e9t\u00e9 soit accept\u00e9es, soit contourn\u00e9es, soit en train d\u2019\u00eatre r\u00e9solues.<\/p>\n\n\n\n<p>Par exemple, la mise en place initiale nous a pos\u00e9 des contraintes techniques au regard des librairies disponibles sur les <strong>dag <\/strong>(embarqu\u00e9s, ou <strong>venv<\/strong> si besoin), ainsi que l\u2019alimentation asynchrone des <strong>dag<\/strong> eux-m\u00eame (depuis <strong>Gitlab<\/strong>). Notre solution ? int\u00e9grer un CRON (<strong>git-sync<\/strong>) au sein de <strong>Scheduler <\/strong>et <strong>Worker<\/strong>, qui alimente les <strong>dag<\/strong> depuis le repository.<\/p>\n\n\n\n<p>Vous pourrez trouver sur la doc de <strong>Airflow<\/strong> un guide afin de monter la solution dans un environnement <strong>Kubernetes<\/strong>, mais nous utilisons <strong>Swarm<\/strong> \ud83e\udd37 donc nous avons d\u00fb cr\u00e9er notre propre stack.<\/p>\n\n\n\n<p>Un autre gros probl\u00e8me que nous avons rencontr\u00e9, li\u00e9 au point pr\u00e9c\u00e9dent, est l&rsquo;absence de paradigme fort sur l\u2019\u00e9criture des <strong>dag<\/strong>. Nous avons d\u00e9cid\u00e9 d\u2019une architecture plus rigide, d\u2019un format et de concepts afin de lin\u00e9ariser nos <strong>dag<\/strong>. Cette solution se verra \u00e9voluer vers un environnement o\u00f9 les <strong>dag<\/strong> seront uniquement des <strong>Pod<\/strong> (conteneur docker) et pourront \u00eatre \u00e9crits dans n\u2019importe quel langage, avec n\u2019importe quelle librairie embarqu\u00e9e !<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">L\u2019impl\u00e9mentation chez Affluences<\/h2>\n\n\n\n<p>Parmi de nombreux outils (<strong>Dkron, Activeeon, RunDeck\u2026<\/strong>) qui proposaient une solution similaire, <strong>Airflow<\/strong> a \u00e9t\u00e9 adopt\u00e9 courant 2022. Peu \u00e0 peu le premier choix lorsqu\u2019un nouveau projet qui s\u2019y pr\u00eate doit \u00eatre cr\u00e9\u00e9, ou qu\u2019un projet existant doit \u00eatre mis \u00e0 jour.<\/p>\n\n\n\n<p>Initialement, nous avons \u00e9tudier les diff\u00e9rentes possibilit\u00e9s qui s\u2019offraient \u00e0 nous sur plusieurs points:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Comment formater nos dag ?<\/h2>\n\n\n\n<p>Cette partie \u00e9tait difficile car il nous a fallu \u00e9tudier les diff\u00e9rentes fa\u00e7on existantes de cr\u00e9er et utiliser un <strong>dag<\/strong>, et d\u2019en s\u00e9lectionner une qui r\u00e9pond \u00e0 notre besoin!<\/p>\n\n\n\n<p>Nous avons opt\u00e9 pour l\u2019utilisation des d\u00e9corateurs, pr\u00e9sents depuis <strong>Airflow<\/strong> 2.0, afin d\u2019all\u00e9ger notre code, et d\u2019embarquer des librairies <strong>Affluences<\/strong> dans l\u2019image.<\/p>\n\n\n\n<p>Ce choix d\u2019embarquer des librairies dans l\u2019image nous a permis de diviser le temps de traitement d\u2019un <strong>dag<\/strong> par 10, car autrement, nous devions d\u00e9finir un <strong>venv<\/strong> pour chaque <strong>dag<\/strong> qui requiert une lib externe, et <strong>Airflow<\/strong> r\u00e9g\u00e9n\u00e8re ce <strong>venv<\/strong> \u00e0 chaque ex\u00e9cution.&nbsp;<\/p>\n\n\n\n<p>\u00c0 l&rsquo;avenir, nous comptons faire \u00e9voluer les <strong>dag<\/strong> afin que ceux-ci soient des conteneurs <strong>docker<\/strong>, ce qui nous permettrait une plus grande libert\u00e9 sur les langages, librairies, et impl\u00e9mentation d\u2019<strong>Airflow<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Quelle architecture pour Airflow ?<\/h2>\n\n\n\n<p>Nous avons commenc\u00e9 par tout regrouper derri\u00e8re <strong>supevisord<\/strong>, qui nous permettait de lancer plusieurs processus au sein d\u2019une m\u00eame image. Probl\u00e8me ? Impossible de scale les workers uniquement. Cette structure a \u00e9t\u00e9 gard\u00e9e pour pouvoir lancer la solution en local lors du d\u00e9veloppement,&nbsp; mais n\u2019est plus utilis\u00e9e dans le <strong>swarm<\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh6.googleusercontent.com\/S-jKIdeu6wZXfA40r0o9qhANnmsyFqxC5_d7OGfIUzpFjyAdtGOdjNenXJaQaM0Kv-jqx-pPmEPfzOen6eB1S3hie64qacDO4amyBxgaGmcH0yotRv_D041TrBFr5LMetnIWd8XP016Rj0t5yZriecDHrFvYkm9hU2jjp78W3jwMF4uZEcN6pv8jmQ\" alt=\"\"\/><\/figure>\n\n\n\n<p>Apr\u00e8s avoir repenser au besoin et aux contraintes, nous sommes arriv\u00e9s \u00e0 la solution suivante, qui comprend 3 <strong>services <\/strong>distincts et que l\u2019on a connect\u00e9 \u00e0 nos services de base de donn\u00e9es \/ message broker existant.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh6.googleusercontent.com\/AR0ghSOdKOpfiBqT6PNHyzOYKgS9heznkpouialqt0Lfly3USugrw131quBd-7nmJj1K9QVYdZ88fH2oiKlncop2W2_FXAiiV0A_oftdStoN6a6gLJ5-HjbbuX_-w2MOhHC2HDxRA1BnqWW3Tf4K4uFQmo4qi32LBnTIvOzhSXsjmDFSIYmpvfVlqQ\" alt=\"\"\/><\/figure>\n\n\n\n<p>Cette derni\u00e8re solution est toujours d\u2019actualit\u00e9 et r\u00e9pond \u00e0 nos besoins sans soucis. Des services comme <strong>Grafana<\/strong> sont aussi venus s\u2019int\u00e9grer autour de <strong>Airflow<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Pour r\u00e9sumer<\/h2>\n\n\n\n<p><strong>Airflow<\/strong> f\u00fbt un choix de solution tr\u00e8s convainquant et s\u2019int\u00e8gre parfaitement au sein de la stack d\u2019<strong>Affluences<\/strong>. Malgr\u00e9 les difficult\u00e9s de mise en place et de gestion, nous sommes parvenus \u00e0 avoir un outil stable, p\u00e9renne, et qui r\u00e9sout notre probl\u00e9matique initiale, <strong>comment regrouper et mieux g\u00e9rer nos t\u00e2ches planifi\u00e9es et scripts temporaires<\/strong>.<\/p>\n\n\n\n<p>Nous continuerons d\u2019\u00e9voluer avec <strong>Airflow<\/strong> et de migrer nos projets vers des <strong>dag<\/strong> jusqu&rsquo;\u00e0 ce qu\u2019aucun projet qui puisse \u00eatre un dag n\u2019en soit pas un.J\u2019esp\u00e8re que cet article vous a appris les bases de <strong>airflow<\/strong> et donn\u00e9 l\u2019envie d\u2019en savoir plus !<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nous avons cherch\u00e9 \u00e0 ajouter au sein de l\u2019infrastructure d\u2019Affluences une solution qui nous permettrait de g\u00e9rer plus facilement nos diff\u00e9rents processus, notamment de script, ou de t\u00e2che planifi\u00e9e. La solution qui a \u00e9t\u00e9 retenue est Airflow, et c\u2019est une vraie r\u00e9ussite pour le besoin que nous avions. Airflow, c\u2019est quoi ? Apache Airflow est [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":888,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"default","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"default","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[353],"tags":[],"class_list":["post-885","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-les-dessous-de-la-tech"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Airflow : son impl\u00e9mentation chez Affluences<\/title>\n<meta name=\"description\" content=\"On vous explique pourquoi et comment nous avons impl\u00e9ment\u00e9 Airflow au sein de l&#039;infrastructure d&#039;Affluences !\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/affluences.com\/blog\/implementation-airflow-affluences\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Airflow : son impl\u00e9mentation chez Affluences\" \/>\n<meta property=\"og:description\" content=\"On vous explique pourquoi et comment nous avons impl\u00e9ment\u00e9 Airflow au sein de l&#039;infrastructure d&#039;Affluences !\" \/>\n<meta property=\"og:url\" content=\"https:\/\/affluences.com\/blog\/implementation-airflow-affluences\/\" \/>\n<meta property=\"og:site_name\" content=\"Le blog Affluences\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Affluencesapp\" \/>\n<meta property=\"article:published_time\" content=\"2022-10-13T13:57:15+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-10-13T13:58:30+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/affluences.com\/blog\/wp-content\/uploads\/2022\/10\/airflow-affluences-scaled.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1495\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Communication\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@Affluences_App\" \/>\n<meta name=\"twitter:site\" content=\"@Affluences_App\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Communication\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/implementation-airflow-affluences\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/implementation-airflow-affluences\\\/\"},\"author\":{\"name\":\"Communication\",\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/#\\\/schema\\\/person\\\/4791a989685bb628373b2af9f99550f3\"},\"headline\":\"Affluences adopte Airflow pour son gestionnaire de t\u00e2ches planifi\u00e9es !\",\"datePublished\":\"2022-10-13T13:57:15+00:00\",\"dateModified\":\"2022-10-13T13:58:30+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/implementation-airflow-affluences\\\/\"},\"wordCount\":1046,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/implementation-airflow-affluences\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/affluences.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/10\\\/airflow-affluences-scaled.jpg\",\"articleSection\":[\"Dessous de la tech\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/affluences.com\\\/blog\\\/implementation-airflow-affluences\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/implementation-airflow-affluences\\\/\",\"url\":\"https:\\\/\\\/affluences.com\\\/blog\\\/implementation-airflow-affluences\\\/\",\"name\":\"Airflow : son impl\u00e9mentation chez Affluences\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/implementation-airflow-affluences\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/implementation-airflow-affluences\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/affluences.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/10\\\/airflow-affluences-scaled.jpg\",\"datePublished\":\"2022-10-13T13:57:15+00:00\",\"dateModified\":\"2022-10-13T13:58:30+00:00\",\"description\":\"On vous explique pourquoi et comment nous avons impl\u00e9ment\u00e9 Airflow au sein de l'infrastructure d'Affluences !\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/implementation-airflow-affluences\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/affluences.com\\\/blog\\\/implementation-airflow-affluences\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/implementation-airflow-affluences\\\/#primaryimage\",\"url\":\"https:\\\/\\\/affluences.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/10\\\/airflow-affluences-scaled.jpg\",\"contentUrl\":\"https:\\\/\\\/affluences.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/10\\\/airflow-affluences-scaled.jpg\",\"width\":2560,\"height\":1495},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/implementation-airflow-affluences\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/affluences.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Affluences adopte Airflow pour son gestionnaire de t\u00e2ches planifi\u00e9es !\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/affluences.com\\\/blog\\\/\",\"name\":\"Le blog d Affluences\",\"description\":\"Tous nos conseils et astuces\",\"publisher\":{\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/affluences.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/#organization\",\"name\":\"Affluences\",\"url\":\"https:\\\/\\\/affluences.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/blog.affluences.com\\\/wp-content\\\/uploads\\\/2017\\\/08\\\/logo_affluences-e1531737183907.png\",\"contentUrl\":\"https:\\\/\\\/blog.affluences.com\\\/wp-content\\\/uploads\\\/2017\\\/08\\\/logo_affluences-e1531737183907.png\",\"width\":512,\"height\":512,\"caption\":\"Affluences\"},\"image\":{\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/Affluencesapp\",\"https:\\\/\\\/x.com\\\/Affluences_App\",\"https:\\\/\\\/www.instagram.com\\\/affluences_app\\\/?hl=fr\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/affluences-app\\\/\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UCwPTgo4QaCais3IytxOjh0w\",\"https:\\\/\\\/fr.wikipedia.org\\\/wiki\\\/Affluences\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/#\\\/schema\\\/person\\\/4791a989685bb628373b2af9f99550f3\",\"name\":\"Communication\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4f0ca5379bda977b18043f3cdb63a882a87096c96317127eb6f83f033b2a5d2b?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4f0ca5379bda977b18043f3cdb63a882a87096c96317127eb6f83f033b2a5d2b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4f0ca5379bda977b18043f3cdb63a882a87096c96317127eb6f83f033b2a5d2b?s=96&d=mm&r=g\",\"caption\":\"Communication\"},\"url\":\"https:\\\/\\\/affluences.com\\\/blog\\\/author\\\/melisande-vialard\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Airflow : son impl\u00e9mentation chez Affluences","description":"On vous explique pourquoi et comment nous avons impl\u00e9ment\u00e9 Airflow au sein de l'infrastructure d'Affluences !","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/affluences.com\/blog\/implementation-airflow-affluences\/","og_locale":"fr_FR","og_type":"article","og_title":"Airflow : son impl\u00e9mentation chez Affluences","og_description":"On vous explique pourquoi et comment nous avons impl\u00e9ment\u00e9 Airflow au sein de l'infrastructure d'Affluences !","og_url":"https:\/\/affluences.com\/blog\/implementation-airflow-affluences\/","og_site_name":"Le blog Affluences","article_publisher":"https:\/\/www.facebook.com\/Affluencesapp","article_published_time":"2022-10-13T13:57:15+00:00","article_modified_time":"2022-10-13T13:58:30+00:00","og_image":[{"width":2560,"height":1495,"url":"https:\/\/affluences.com\/blog\/wp-content\/uploads\/2022\/10\/airflow-affluences-scaled.jpg","type":"image\/jpeg"}],"author":"Communication","twitter_card":"summary_large_image","twitter_creator":"@Affluences_App","twitter_site":"@Affluences_App","twitter_misc":{"\u00c9crit par":"Communication","Dur\u00e9e de lecture estim\u00e9e":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/affluences.com\/blog\/implementation-airflow-affluences\/#article","isPartOf":{"@id":"https:\/\/affluences.com\/blog\/implementation-airflow-affluences\/"},"author":{"name":"Communication","@id":"https:\/\/affluences.com\/blog\/#\/schema\/person\/4791a989685bb628373b2af9f99550f3"},"headline":"Affluences adopte Airflow pour son gestionnaire de t\u00e2ches planifi\u00e9es !","datePublished":"2022-10-13T13:57:15+00:00","dateModified":"2022-10-13T13:58:30+00:00","mainEntityOfPage":{"@id":"https:\/\/affluences.com\/blog\/implementation-airflow-affluences\/"},"wordCount":1046,"commentCount":1,"publisher":{"@id":"https:\/\/affluences.com\/blog\/#organization"},"image":{"@id":"https:\/\/affluences.com\/blog\/implementation-airflow-affluences\/#primaryimage"},"thumbnailUrl":"https:\/\/affluences.com\/blog\/wp-content\/uploads\/2022\/10\/airflow-affluences-scaled.jpg","articleSection":["Dessous de la tech"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/affluences.com\/blog\/implementation-airflow-affluences\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/affluences.com\/blog\/implementation-airflow-affluences\/","url":"https:\/\/affluences.com\/blog\/implementation-airflow-affluences\/","name":"Airflow : son impl\u00e9mentation chez Affluences","isPartOf":{"@id":"https:\/\/affluences.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/affluences.com\/blog\/implementation-airflow-affluences\/#primaryimage"},"image":{"@id":"https:\/\/affluences.com\/blog\/implementation-airflow-affluences\/#primaryimage"},"thumbnailUrl":"https:\/\/affluences.com\/blog\/wp-content\/uploads\/2022\/10\/airflow-affluences-scaled.jpg","datePublished":"2022-10-13T13:57:15+00:00","dateModified":"2022-10-13T13:58:30+00:00","description":"On vous explique pourquoi et comment nous avons impl\u00e9ment\u00e9 Airflow au sein de l'infrastructure d'Affluences !","breadcrumb":{"@id":"https:\/\/affluences.com\/blog\/implementation-airflow-affluences\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/affluences.com\/blog\/implementation-airflow-affluences\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/affluences.com\/blog\/implementation-airflow-affluences\/#primaryimage","url":"https:\/\/affluences.com\/blog\/wp-content\/uploads\/2022\/10\/airflow-affluences-scaled.jpg","contentUrl":"https:\/\/affluences.com\/blog\/wp-content\/uploads\/2022\/10\/airflow-affluences-scaled.jpg","width":2560,"height":1495},{"@type":"BreadcrumbList","@id":"https:\/\/affluences.com\/blog\/implementation-airflow-affluences\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/affluences.com\/"},{"@type":"ListItem","position":2,"name":"Affluences adopte Airflow pour son gestionnaire de t\u00e2ches planifi\u00e9es !"}]},{"@type":"WebSite","@id":"https:\/\/affluences.com\/blog\/#website","url":"https:\/\/affluences.com\/blog\/","name":"Le blog d Affluences","description":"Tous nos conseils et astuces","publisher":{"@id":"https:\/\/affluences.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/affluences.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/affluences.com\/blog\/#organization","name":"Affluences","url":"https:\/\/affluences.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/affluences.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/blog.affluences.com\/wp-content\/uploads\/2017\/08\/logo_affluences-e1531737183907.png","contentUrl":"https:\/\/blog.affluences.com\/wp-content\/uploads\/2017\/08\/logo_affluences-e1531737183907.png","width":512,"height":512,"caption":"Affluences"},"image":{"@id":"https:\/\/affluences.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Affluencesapp","https:\/\/x.com\/Affluences_App","https:\/\/www.instagram.com\/affluences_app\/?hl=fr","https:\/\/www.linkedin.com\/company\/affluences-app\/","https:\/\/www.youtube.com\/channel\/UCwPTgo4QaCais3IytxOjh0w","https:\/\/fr.wikipedia.org\/wiki\/Affluences"]},{"@type":"Person","@id":"https:\/\/affluences.com\/blog\/#\/schema\/person\/4791a989685bb628373b2af9f99550f3","name":"Communication","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/secure.gravatar.com\/avatar\/4f0ca5379bda977b18043f3cdb63a882a87096c96317127eb6f83f033b2a5d2b?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/4f0ca5379bda977b18043f3cdb63a882a87096c96317127eb6f83f033b2a5d2b?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4f0ca5379bda977b18043f3cdb63a882a87096c96317127eb6f83f033b2a5d2b?s=96&d=mm&r=g","caption":"Communication"},"url":"https:\/\/affluences.com\/blog\/author\/melisande-vialard\/"}]}},"_links":{"self":[{"href":"https:\/\/affluences.com\/blog\/wp-json\/wp\/v2\/posts\/885","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/affluences.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/affluences.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/affluences.com\/blog\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/affluences.com\/blog\/wp-json\/wp\/v2\/comments?post=885"}],"version-history":[{"count":1,"href":"https:\/\/affluences.com\/blog\/wp-json\/wp\/v2\/posts\/885\/revisions"}],"predecessor-version":[{"id":887,"href":"https:\/\/affluences.com\/blog\/wp-json\/wp\/v2\/posts\/885\/revisions\/887"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/affluences.com\/blog\/wp-json\/wp\/v2\/media\/888"}],"wp:attachment":[{"href":"https:\/\/affluences.com\/blog\/wp-json\/wp\/v2\/media?parent=885"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/affluences.com\/blog\/wp-json\/wp\/v2\/categories?post=885"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/affluences.com\/blog\/wp-json\/wp\/v2\/tags?post=885"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}