public note

Airbyte で最新の connector registry seed を参照する

目的

Airbyte OSS 版をデフォルトの設定で運用すると connector registry seed が固定されるので、本体をバージョンアップしない限り利用可能な connector バージョンは変わりません。この seed について、Airbyte 環境から最新のものを参照する方法を書きます。

airbyte.com

参照した Release は v0.50.33 です。ソースコードへのリンクは脚注にまとめています。

用語の定義

Airbyte では、データの取得元(source)や転送先(destination)との通信を担うコンポーネントを総称して connector と呼んでいます。 connector の実態はコンテナイメージです。

connector とそのバージョンの一覧は connector catalog と呼ばれ、それを管理する場所を connector registry、connector registry に配置されたファイルを seed と表現しています。

OSS 版の seed は oss_registry.json という JSON ファイルです。最新の seed はこちらで公開されています。

https://connectors.airbyte.com/files/registries/v0/oss_registry.json

Connector registry seed provider

Airbyte には seed-provider という概念があり、seed の参照先を選ぶことができます*1。seed-provider は、localremote のいずれかを設定できます。

seed-provider のデフォルトは local です。名前のとおり、ローカルにある seed を参照します。

ローカルの seed は、Airbyte CDK をビルドするタイミングで抱えます*2。 冒頭で、デフォルトの設定では利用可能な connector バージョンが変わらないと書いたのはこれが理由です。

一方で seed-provider を remote に設定すると、最新の seed を参照したり、自前で用意した seed を使って利用可能なバージョンに制限をかけることができます。

Connector registry の設定

connector registry の更新を行うコンポーネントのひとつに、airbyte-bootloader (以下、bootloader) があります。 bootloader の目的は Airbyte 環境を初期化することです。基本的には環境を新規作成したり、バージョンアップするときに動きますが、Argo CD を用いた Kubernetes 環境では、デプロイが行われるたびに bootloader が動きます。

bootloader の Connector registry に対する設定は、application.yml で行います。以下はその抜粋です。

airbyte:
(中略)
  connector-registry:
    seed-provider: ${CONNECTOR_REGISTRY_SEED_PROVIDER:local}
    remote:
      base-url: ${CONNECTOR_REGISTRY_BASE_URL:}
      timeout-ms: ${CONNECTOR_REGISTRY_TIMEOUT_MS:30000}

いずれも環境変数を経由して設定します。Airbyte の Helm Chart を使う場合、環境変数の設定は charts/airbyte-bootloader/values.yaml の extraEnv でできます。

seed-provider のデフォルト値が local であることが確認できます。CONNECTOR_REGISTRY_SEED_PROVIDER に remote を設定すると、任意の seed を見るモードに切り替わります。 その他の設定値である base-url と timeout-ms は remote のときに有効となります。

Connector registry base url

base-url を設定することで、自前で用意した seed を参照することができます。 なお、base-url の値を設定していない場合は、先に紹介した最新の seed を参照します。

HTTP を前提に参照する実装になっていますので、base-url の設定値はそれに準じた URL であることが求められます*3。場所は疎通可能であればどこでも大丈夫です。

ただ、seed の公開パスは決められた場所が指定されているので注意が必要です。

例えば base-url を http://your-hostname/your-dir としたい場合、seed は http://your-hostname/your-dir/registries/v0/oss_registry.json という URL で公開されていなければなりません*4

更新対象となる connector のバージョン

connector ごとに下記のバージョン情報が更新されます。

  • 利用可能な最新のバージョン
  • デフォルトバージョン

利用可能な最新のバージョン

これはすべての connector が対象です。connector の新規追加も行われます。

デフォルトバージョン

デフォルトバージョンとは、新規 connection を作成するときに使われるバージョンのことです。デフォルトバージョンの更新対象は、既存の connection で使われていない connector に限定されます。よって使っている connector のバージョンはそのまま維持されます*5

airbyte-cron による定期更新

こちらはまだ試していませんが、airbyte-cron による定期更新ができるようです。デフォルトは無効になっています*6

UPDATE_DEFINITIONS_CRON_ENABLED 環境変数に true を設定することで有効になります*7。 Connector registry に対する設定は bootloader と同じ方法です。環境変数経由で seed の参照先を設定してください*8

関連 Issue

この記事を書いた時点では、上記の内容はまだ Airbyte のドキュメントに反映されておらず*9、Issue が上がっているのみでした。仕様はだいたいわかった(?)のでコントリビュートチャンス...

github.com


*1:https://github.com/airbytehq/airbyte-platform/blob/9c2b5160ceda19b632780508b340851c2f7d2adf/airbyte-config/init/src/main/java/io/airbyte/config/init/config/SeedBeanFactory.java#L34

*2:https://github.com/airbytehq/airbyte/blob/dc85112fdecb6bfe7546687bd0d5b31b7c386409/airbyte-cdk/java/airbyte-cdk/init-oss/build.gradle#L23

*3:https://github.com/airbytehq/airbyte-platform/blob/9c2b5160ceda19b632780508b340851c2f7d2adf/airbyte-config/specs/src/main/java/io/airbyte/config/specs/RemoteDefinitionsProvider.java#L70-L81

*4:https://github.com/airbytehq/airbyte-platform/blob/9c2b5160ceda19b632780508b340851c2f7d2adf/airbyte-config/specs/src/main/java/io/airbyte/config/specs/RemoteDefinitionsProvider.java#L155C61-L155C91

*5:https://github.com/airbytehq/airbyte-platform/blob/9c2b5160ceda19b632780508b340851c2f7d2adf/airbyte-config/init/src/main/java/io/airbyte/config/init/ApplyDefinitionsHelper.java#L196-L205

*6:https://github.com/airbytehq/airbyte-platform/blob/9c2b5160ceda19b632780508b340851c2f7d2adf/airbyte-cron/src/main/java/io/airbyte/cron/jobs/DefinitionsUpdater.java#L56

*7:https://github.com/airbytehq/airbyte-platform/blob/9c2b5160ceda19b632780508b340851c2f7d2adf/airbyte-cron/src/main/resources/application.yml#L16-L18

*8:https://github.com/airbytehq/airbyte-platform/blob/9c2b5160ceda19b632780508b340851c2f7d2adf/airbyte-cron/src/main/resources/application.yml#L11-L15

*9:connector registry 更新の仕様を調べることになったのは、ドキュメントどおりにやったが動かなかったことがきっかけ