Airbyte OSS版とCloud版の比較（カスタムコネクタ）

# はじめに

原田と申します。普段はお客様のデータ分析基盤の構築や運用の支援をしています。初めてのQiita投稿になります。

さて、最近のデータ分析基盤の界隈では [Airbyte](https://airbyte.com/ "Airbyte") というELTツールが注目されており、弊社でも検証しています。

（Airbyteとは？というところは先行記事にお任せします）

先行記事の一例：

* [自前でデータパイプラインをサクッと構築できる「Airbyte」を試してみた](https://dev.classmethod.jp/articles/dive-deep-into-modern-data-saas-about-airbyte/ "自前でデータパイプラインをサクッと構築できる「Airbyte」を試してみた")
* [Airbyteについて調べてみた](https://qiita.com/zumax/items/9f59e94623f2956a219a "Airbyteについて調べてみた")

Airbyte は OSS（Open Source Software） として提供されており、カスタムコネクタを作れる、というところに注目して導入を検討している方もいると思いますが、SaaSサービスとして提供されている Cloud版（Teamプラン含む） とは異なる点がいくつかあります。
この記事では OSS版 と Cloud版 の比較について、公式の [比較表](https://airbyte.com/pricing) そのままではなく、私なりの理解を踏まえて説明します。
特に、Airbyte の特徴でもあるカスタムコネクタについて、 OSS版 と Cloud版 との違いを説明します。

Airbyte では標準で用意されているコネクタを使って外部サービスのデータを取得することができますが、所望の外部サービスのデータを取得するコネクタが存在していなかったとしても、自分でカスタムコネクタとしてコネクタを作り、所望の外部サービスが提供しているAPIからデータを取得することが出来ます。
ただ、これもなんでもできる魔法のツールではなく、注意点があります。
そのあたりに触れていきます。

## この記事で触れないこと

* Airbyteに限らないクラウドインフラの運用全般。
* Airbyteの詳細機能、詳細動作。
* カスタムコネクタの作り方3種類の詳細説明。

# 前提知識

### OSS版とCloud版について

* OSS版
  * EC2 なりに Airbyte のソフトをインストールしてサーバを立てて使うものです。インストールした環境の面倒は自分で見なければなりません。

* Cloud版
  * Airbyte社 がホストしている Airbyteサーバ を使わせてもらう SaaSサービス です。お金を払う代わりに Airbyte社 が環境の面倒を見てくれます。

### カスタムコネクタについて

3種類の方法が提供されています。

* [コネクタビルダー](https://docs.airbyte.com/connector-development/connector-builder-ui/overview "コネクタビルダー")
  * Airbyteのウェブアプリ上の操作で完結します。取りたいデータのAPI仕様に合わせて設定を入力していきます。
  最もお手軽で無難なAPI仕様のAPIにはそれなりに対応できそうですが、複雑だったり、変わった仕様のAPIには対応しきれない部分があります。
  **OSS版、Cloud版、両方で使えます。** 

* [ローコード CDK](https://docs.airbyte.com/connector-development/config-based/low-code-cdk-overview "ローコード CDK")
  * yaml や JSON ファイルを編集してコネクタを定義します。コネクタビルダーよりも融通がきき、コネクタビルダーでは対応できないAPI仕様のAPIのコネクタを作成できる可能性がありますが、応用力で比べると次の Python CDK には劣ります。コネクタビルダーと Python CDK の間に位置します。
  * 基本的に **OSS版でのみ使用可能** です。（Cloud版での利用については後述）
* [Python CDK](https://docs.airbyte.com/connector-development/cdk-python/basic-concepts "Python CDK")
  * yaml や JSON だけでなく、Pythonソースコードの pyファイル も編集してコネクタを定義します。プログラム言語のPythonを使うので、3種類の中では最も融通がきき、コネクタビルダーやローコード CDKでは対応できないAPIのコネクタを作成できる可能性があります。
  * こちらも基本的に **OSS版でのみ使用可能** です。

# カスタムコネクタの違いについて

ここからが本題です。

## コネクタビルダー

上記にも記載していますが、無難な仕様のAPIであればコネクタビルダーでカスタムコネクタを作ることができますが、対応できないAPIもあります。

![コネクタビルダー画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3695017/fcec4800-1f84-346c-4de5-906f9838771b.png)

このように、用意されているフォームに取りたいデータのAPI仕様に合わせた内容を入力していきます。
入力項目に Query Parameters、Request Headers などがありますが、REST APIの基本的な知識が必要です。また、取りたいデータのAPI仕様を理解し、設定内容に落とし込むスキルも必要ですので、非エンジニアの方がフォームにポチポチ設定してけばできあがる、というものではありません。

コネクタビルダーで対応できるかどうかは [このあたり](https://docs.airbyte.com/connector-development/connector-builder-ui/connector-builder-compatibility "Compatibility Guide")に説明があります。
これを以下のようにまとめてみました。

<!--
![コネクタ作成方法選択のフローチャート](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3695017/c62052a9-9025-4b83-0173-af15aecd17d2.png)
-->

```mermaid
flowchart LR
    A{"レコードのコレクションを<br>同期で返すREST API?"} -->|Yes| B{"認証タイプ"}
    A -->|No| C[Python CDK]

    B -->|OAuth| D{"リフレッシュトークンの<br>有効期限は長い?"}
    B -->|その他| E[ローコード CDK]

    D -->|Yes| F{"データはJSON or<br>XMLで返される?"}
    D -->|No| C

    F -->|Yes| G{"レコードの<br>ページ分けの<br>方法"}
    F -->|No| C

    G -->|・ページ数<br>・オフセット<br>・次のページへのリンク<br>のいずれか| H{"単純なkey-valueの<br>組み合わせではない<br>複雑な形式が必要か"}
    G -->|その他| E

    H -->|Yes| I[コネクタビルダー]
    H -->|No| C

    %% ノードスタイルの設定
    style A fill:#FFDD99,stroke:#333,stroke-width:2px
    style B fill:#FFDD99,stroke:#333,stroke-width:2px
    style D fill:#FFDD99,stroke:#333,stroke-width:2px
    style F fill:#FFDD99,stroke:#333,stroke-width:2px
    style G fill:#FFDD99,stroke:#333,stroke-width:2px
    style H fill:#FFDD99,stroke:#333,stroke-width:2px
    style C fill:#FFCCCC,stroke:#333,stroke-width:2px
    style E fill:#CCFFCC,stroke:#333,stroke-width:2px
    style I fill:#99CCFF,stroke:#333,stroke-width:2px
```

（[このページ](https://docs.airbyte.com/connector-development/connector-builder-ui/connector-builder-compatibility "Compatibility Guide") では XML のサポートは記載されていませんが、 [1.2.0のリリースノート](https://docs.airbyte.com/release_notes/v-1.2 "XML Support in the Connector Builder") で XML がサポートされたとの説明があります）

これらに該当しない場合は [ローコード CDK]、[Python CDK] でのカスタムコネクタ作成を検討する必要があります。

## [ローコード CDK] と [Python CDK]

上記の通り、コネクタビルダーでは対応できない場合はこのどちらかを選択することになります。
特に Python CDK は自分でロジックを組めますので、極端な話、（難易度の話を除くと）がんばればなんとかできる見込みが高いです。ただし、コネクタビルダーと根本的な違いとして、ローコード CDK、Python CDK で作ったカスタムコネクタは、基本的には **Cloud版では使えません**。
 「基本的に」 ということは例外がある訳で、これについて説明します。

### ローコード CDK、Python CDK で作ったカスタムコネクタの使用

この2種類でカスタムコネクタを作る場合、最終的に **Dockerイメージ** を作成し、作った Dockerイメージ を Airbyte に読み込ませる必要があります。この **自分で作った Dockeイメージ を読み込む** ことが Cloud版 ではできません。

![OSS版のコネクタ追加画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3695017/95cd56dc-78f0-3016-b437-32944040d5df.png)

これは OSS版 の画面で 「Add a new Docker connector」 という Dockerイメージ を指定するところがありますが、

![Cloud版のコネクタ追加画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3695017/eff572ec-1eba-a375-2dd3-244c6aef419c.png)

こちらの Cloud版 には 「Add a new Docker connector」 の選択肢がそもそもありません。

これはロジックを自分で組めるという特徴の裏返しになりますが、セキュリティリスクのあるロジックが Dockerイメージ 入り込んでいる恐れがあり、 Cloud版 をホストして提供する Airbyte社 で保証できないということで Dockerイメージ を読み込む 機能がOFFにされているのだと思われます。

厳密には **「Cloud版 で Dockerイメージ のカスタムコネクタを使う手段」 はありそう** です。
これについては、2025/1時点、公式ドキュメントに以下の記載があります。

[Building Custom Connectors](https://support.airbyte.com/hc/en-us/articles/16630519316123-Building-Custom-Connectors)
>Alternatively, if you require a Docker-based custom connector as a Cloud customer, you can reach out to our Support team to enable the functionality to upload custom connectors to your workspace. This is approved on a case-by-case basis.


ここに記載されている通り、Airbyte社 のサポートチームに連絡することで、 Dockerイメージ の読み込みが許されることがあるようです。 Airbyte社 に Dockerイメージ の読み込みを許可してもらうためには、セキュリティリストが無い、もしくは低いことをAirbyte社に理解してもらう必要がありそうで、それなりのハードルがあるものと思われます。

OSS版 であれば自己責任で Dockerイメージ を使ったカスタムコネクタを利用することができます。

[コネクタビルダー]: https://docs.airbyte.com/connector-development/connector-builder-ui/overview
[ローコード CDK]: https://docs.airbyte.com/connector-development/config-based/low-code-cdk-overview
[Python CDK]: https://docs.airbyte.com/connector-development/cdk-python/basic-concepts

### Python CDK で作ったカスタムコネクタを OSS にコミットする場合

これは 2025/1 時点の話ですが、 

[ここに](https://docs.airbyte.com/connector-development/cdk-python/ "Connector Development Kit") 

>Over the next few months, the project will only accept connector contributions that are made using the Low-Code CDK or the Connector Builder.

このような記載があり、 Python CDK で作られたカスタムコネクタの受付が一時停止されているようです。
前述しましたが、 Python CDK はその自由度から3つのカスタムコネクタの作成方法の中では最もセキュリティリスクが高いはずです。 Airbyte社 やコミュニティでコミット内容を検証するにも手間がかかるのではないでしょうか。

>New pull requests made with the Python CDK will be closed, but we will inquire to understand why it wasn't done with Low-Code/Connector Builder so we can address missing features. This decision is aimed at improving maintenance and providing a larger catalog with high-quality connectors.
>
>You can continue to use the Python CDK to build connectors to help your company or projects.

ローコード CDK、コネクタビルダーの方がセキュリティ面などコネクタの品質を担保しやすいという面もあり、 ローコード CDK、コネクタビルダー のできることを増やして Python CDK を使わなくても済むようにしたい、ということだと思われます。

# まとめ

今回は Airbyte のカスタムコネクタについて、 OSS版 と Cloud版 の違いを説明しました。
ローコードCDK 、 Python CDK を使ったカスタムコネクタは Cloud版 では制限されていることに注意です。

Airbyte を触ってみて分かったことは他にもありますので、今後も記事にしていきたいと思います。