Déploiement des bundles Go SDK
Un déploiement Go SDK produit un artifact : un bundle, un unique exécutable natif autonome qui embarque aussi sa source intégrée et un manifest (le format AFBNDL01, « l'exécutable est le bundle »). Vous le construisez et l'empaquetez avec go, le placez où l'ExecutableCoordinator d'Airflow scanne, et le task runner Python le forke une fois par task instance. Cette skill est agnostique de la plateforme : elle montre la construction, le câblage du coordinator, puis comment placer le bundle sur un worker.
Expérimental. Le Go SDK est en développement actif et n'est pas prêt pour la production. Tout se résout contre le module unique
github.com/apache/airflow/go-sdk(Go 1.24+).
Ordre des opérations : écrire les tasks (authoring-go-sdk-tasks) -> construire et empaqueter le bundle (cette skill) -> le placer sous
executables_rootet configurer le coordinator -> déployer le matching Python stub DAG.
Construire et empaqueter le bundle
Le coordinator ne reconnaît qu'un bundle empaqueté : il scanne la trailer AFBNDL01 et ignore silencieusement tout fichier qui ne la possède pas, donc un binaire go build simple n'est pas déployable seul. Utilisez le packer, fourni comme directive tool Go 1.24 dans go.mod (pas d'installation globale, version épinglée par projet) :
go tool airflow-go-pack ./example/bundle # build + pack en une étape
go tool airflow-go-pack --goos linux --goarch amd64 ./example/bundle -- -trimpath # cross-compile; les flags après -- passent à `go build`
go tool airflow-go-pack --executable ./bin/sample-dag-bundle --source main.go --airflow-metadata <airflow-metadata.yaml> # empaqueter un binaire existant
go tool airflow-go-pack inspect ./bin/sample-dag-bundle # inspecter un bundle empaqueté
Le packer construit le binaire, l'exécute avec --airflow-metadata pour capturer le manifest depuis RegisterDags, puis ajoute la source + le manifest + une trailer de 64 octets. Le résultat est un unique fichier exécutable.
- Construire pour l'OS/arch du worker. Le bundle est un exécutable natif et n'est pas portable ; cross-compilez avec
--goos/--goarch. Un binaire désassorti échoue sur le worker avecexec format error. - Ré-empaqueter après tout changement du binaire. Re-stripper, re-signer, ou échanger un debug build invalide le
binary_sha256de la trailer, et le bundle est alors rejeté.
Câbler le coordinator
L'ExecutableCoordinator de Python scanne executables_root, associe le dag_id entrant au manifest intégré de chaque bundle, vérifie son hash d'intégrité, puis forke le bundle. Aucun processus Go ne tourne sur l'hôte.
-
Placez l'exécutable empaqueté sous un répertoire scanné :
cp ./bundle /opt/airflow/executable-bundles/ # identifié par la trailer AFBNDL01, pas par le nom de fichier -
Enregistrez
ExecutableCoordinatoret routez la queue vers lui (voir configuring-airflow-language-sdks) :[sdk] coordinators = {"go": {"classpath": "airflow.sdk.coordinators.executable.ExecutableCoordinator", "kwargs": {"executables_root": ["/opt/airflow/executable-bundles"]}}} queue_to_coordinator = {"golang": "go"} -
Déployez le matching Python stub DAG ; son
queue=doit égaler la cléqueue_to_coordinator(golangici), et sesdag_id/task_ids doivent correspondre à ce que le bundle a enregistré.
Chemins de déploiement
Le SDK s'exécute sur tout Airflow avec le Task SDK ; les outils Astronomer ne sont pas requis.
Docker / Kubernetes
Cross-compilez le bundle pour la plateforme de l'image et intégrez-le. Aucun runtime Go ou worker process n'est nécessaire dans l'image ; le task runner Python forke le bundle.
FROM apache/airflow:3.3.0 # les language SDKs ciblent Airflow 3.3+
COPY ./executable-bundles/ /opt/airflow/executable-bundles/
# définir AIRFLOW__SDK__COORDINATORS et AIRFLOW__SDK__QUEUE_TO_COORDINATOR comme variables d'env
Sur la Helm chart, intégrez le bundle dans une image personnalisée comme ci-dessus ou montez-le via un volume partagé, et définissez la config [sdk] via des variables d'environnement sur le worker/scheduler. Consultez deploying-airflow pour le workflow Docker Compose et Helm plus large.
Le tag
apache/airflow:3.3.0ci-dessus est illustratif : les language SDKs nécessitent Airflow 3.3 ou plus récent. Épinglez la version 3.x actuelle que vous utilisez réellement plutôt que de copier ce tag de mémoire ; lisez les tags ou docs actuels de l'image de base.
Astro (une option, pas obligatoire)
- Construisez/empaquetez le bundle, puis stagez-le dans le projet :
mkdir -p include/executable-bundles && cp ../go-bundle/<packed-bundle> include/executable-bundles/. - Dans le projet
Dockerfile, copiez le bundle dans le répertoire du coordinator :COPY include/executable-bundles/ /opt/airflow/executable-bundles/. - Mettez la config du coordinator dans le projet
.env(chargé automatiquement) : les valeurs JSONAIRFLOW__SDK__*(voir configuring-airflow-language-sdks). astro dev start(ouastro dev restartaprès modifications) ; déployez avecastro deploy.
N'épinglez pas les versions d'Astro Runtime / Airflow de mémoire ; lisez le
Dockerfilegénéré ou les docs actuels. Pendant que le Go SDK est en preview, une image beta/dev peut être requise.
Versioning et installations preview
go-sdk/ est un unique module Go, donc son release tag prend la forme de sous-dossier monorepo, go-sdk/vX.Y.Z (ne créez pas de tags par cmd). Votre module de bundle dépend de github.com/apache/airflow/go-sdk ; épingler cette version épingle aussi airflow-go-pack, qui est un package dans le même module référencé via la directive tool. Épinglez contre le release tag :
go get github.com/apache/airflow/go-sdk@v1.0.0
Pour construire contre un commit ou une branche non-releasée (par exemple, pour essayer un fix avant le prochain tag), dépendez-en directement et Go fabrique une pseudo-version :
go get github.com/apache/airflow/go-sdk@<commit-or-branch>
Checklist de déploiement
- Bundle construit et empaqueté (
go tool airflow-go-pack) ; lesdag_id/task_idenregistrés correspondent aux Python stubs. - Construit pour l'OS/arch du worker (par exemple
--goos linux --goarch amd64). - Bundle AFBNDL01 empaqueté placé sous un répertoire dans
executables_root. ExecutableCoordinator+queue_to_coordinatorconfigurés (configuring-airflow-language-sdks).- Python stub DAG déployé, son
queue=routé vers le Go coordinator. - Ré-empaqueté après tout rebuild/strip/sign (préserve le
binary_sha256).
Skills connexes
- authoring-go-sdk-tasks : Écrire le code Go des tasks et les Python stubs correspondants.
- configuring-airflow-language-sdks : Enregistrer
ExecutableCoordinatoret router la queue. - deploying-airflow : Déploiement général d'Airflow (Astro, Docker Compose, Kubernetes).
- setting-up-astro-project : Initialiser et configurer un projet Astro.