Fivetran のデータソースへの接続オプションとして Proxy Agent を試してみた

Fivetran のデータソースへの接続オプションとして Proxy Agent を試してみた

Clock Icon2025.06.15

はじめに

Fivetran では一部のデータソース向けの接続オプションとして Proxy Agent を使用できます。こちらを試してみましたので、本記事で内容をまとめてみます。

Proxy Agent

Fivetran のデータソースへの接続オプションは以下に一覧の記載があります。

https://fivetran.com/docs/connectors/databases/connection-options#databaseconnectionoptions

特にデータソースがデータベース製品など外部から直接アクセスが難しい顧客ネットワーク内にある場合に使用できるオプションとして SSHトンネルや各クラウドサービスのプライベート接続機能を使用できます。

Proxy Agent も同様のオプションで、その他の接続オプションとの主な違いを含めた特徴は以下になります。

  • 顧客管理ネットワークにエージェントサーバを構成する
  • エージェントサーバは Fivetran 管理のネットワークに対して送信ネットワーク接続を作成するため、顧客管理のネットワーク側で受信ポートを開く必要がない
  • データソースとして RDBMS を中心に対応
  • HVA と組み込合わせた構成も可能
  • 単一のクラウドリージョンからの接続のみをサポート
  • 一つの Proxy Agent は最大10個のコネクションをサポート

顧客管理のネットワーク側でインバウンドアクセス用にポートを開く必要がないため、こういったセキュリティ要件がある組織ではこのオプションが選択肢に入ると思います。

下図は公式ドキュメント記載の図からの引用ですが、このような構成です。

image

注意点として「単一のクラウドリージョンからの接続のみをサポート」しています。

Fivetran では宛先作成時にデータ処理を行うクラウドリージョンを指定します。そのため、このクラウドリージョンとデータソースのクラウドリージョンが一致する場合に Proxy Agent は構成可能です。
また、執筆時点ですべてのクラウドリージョンでサポートされていません。ドキュメント上で一覧の記載は見つけられなかったので、構成可能なクラウドリージョンは宛先を指定しコネクション作成画面から確認する必要があります。

https://fivetran.com/docs/connectors/databases/connection-options#proxyagent

また、似たような接続オプションとして Fivetran では Hybrid Deployment というモデルを選択できます。こちらも顧客管理のネットワークに Fivetran とアウトバウンド通信を行うエージェントを構成します。Proxy Agent との違いとしては、 Hybrid Deployment ではデータ処理も顧客管理のネットワークで行われます。

Fivetran は SaaS ですので、データ処理時は一時的にデータが Fivetran 管理のネットワーク内で処理されます。セキュリティ要件上、この点が気になる際は Hybrid Deployment モデルを使用できます。

https://dev.classmethod.jp/articles/fivetran-hybrid-deployment-model-beta/

前提条件

以下の環境で検証しました。

  • Destination
    • Snowflake
    • Fivetran のデータ処理リージョン
      • AWS us-east-1
  • データソース
    • Amazon RDS for SQL Server
      • エディション: SQL Server Express Edition
      • インスタンスタイプ:db.t3.micro
      • バージョン:SQL Server 2019 (15.00.4430.1.v1)
      • リージョン: us-east-1
      • セキュリティグループで Proxy Agent サーバからのアクセスを許可
  • Proxy Agent サーバ
    • OS:Amazon Linux 2023
    • アーキテクチャ:x86_64
    • インスタンスタイプ:t2.xlarge (4 vCPU, 16GB メモリ)
    • ストレージ:8 GB
    • Session Manager を使用して EC2 インスタンスに接続

構成は下図の通りです。

image 1

事前準備

SQL Server:サンプルデータの作成

ここでは Proxy Agent サーバにクライアントをインストールし、Fivetran に連携するデータを用意します。
クライアントのインストールについては、以下が参考になります。

https://learn.microsoft.com/ja-jp/sql/linux/sql-server-linux-setup-tools?view=sql-server-ver17&tabs=redhat-install

EC2 に接続後、以下を実行します。

curl https://packages.microsoft.com/config/rhel/9/prod.repo | sudo tee /etc/yum.repos.d/mssql-release.repo

# パッケージリストを更新
sudo dnf update -y

# mssql-tools18とODBCドライバーをインストール
sudo dnf install -y mssql-tools18 unixODBC-devel

サンプルデータは以下の手順で作成しました。

-- データベースの作成
CREATE DATABASE testdb;
GO

USE testdb;
GO

-- テーブル作成
CREATE TABLE Employees (
    EmployeeID INT PRIMARY KEY IDENTITY(1,1),
    FirstName NVARCHAR(50),
    LastName NVARCHAR(50),
    Position NVARCHAR(50)
);
GO

INSERT INTO Employees (FirstName, LastName, Position) VALUES
('John', 'Doe', 'Software Developer'),
('Jane', 'Doe', 'Project Manager'),
('Jim', 'Beam', 'Analyst');
GO

>SELECT * FROM Employees;
>GO
EmployeeID  FirstName                                          LastName                                           Position
----------- -------------------------------------------------- -------------------------------------------------- --------------------------------------------------
          1 John                                               Doe                                                Software Developer
          2 Jane                                               Doe                                                Project Manager
          3 Jim                                                Beam                                               Analyst

SQL Server:Fivetran からの接続用ユーザーの作成

続けて、Fivetran との接続設定用に同期対象のテーブルへの参照権限を持つユーザーを以下の手順で作成しました。

USE testdb;
-- ユーザー作成
CREATE LOGIN fivetran_user WITH PASSWORD = '<パスワード>';
CREATE USER fivetran_user FOR LOGIN fivetran_user;
GO

-- 権限付与
GRANT SELECT on DATABASE::testdb to fivetran_user;
GO

ここまでの手順の詳細は以下をご参照ください。

https://dev.classmethod.jp/articles/fivetran-rds-for-sql-server-snowflake-teleport-sync/

Proxy Agent の構成

接続方法として Proxy Agent を使用するコネクションを作成します。

要件

Proxy Agent 用サーバの要件は以下に記載があります。

https://fivetran.com/docs/connectors/databases/connection-options#proxyagent

ドキュメントからの引用ですが、主な要件は以下の通りです。

  • CPU:x86-64プロセッサを搭載した最低4 vCPU
  • メモリ:最低5 GBのRAM
  • ストレージ: 実行ファイルとログ用に最低2 GBの割り当てディスク容量
  • Java:プロキシエージェントには、オープンソースのAzul Zulu JDKをベースとしたJava実行環境(JRE)がバンドルされている(追加のJavaライセンスのインストールや購入は不要)

コネクションの作成

はじめに Fivetran ダッシュボードで作業します。通常のようにコネクションを作成します。

image 2

宛先スキーマや命名規則を指定します。

image 3

ネットワークに関する接続設定では、接続方法として「Connect via Proxy Agent」を指定します。

image 4

すると下図の表示になります。エージェントは複数(最大10)のコネクションで使用できるので、すでに別のコネクションでエージェントを構成している場合は、そちらを指定することも可能です。
今回はエージェントの構成から行うので「+ Configure a new proxy agent」をクリックします。

image 5

下図のように、エージェントを構成可能なデータ処理リージョンである場合、追加の手順が表示されます。
はじめの手順として、エージェントをダウンロードします。

image 6

ダウンロードメニューは上記のリンクから遷移するか Fivetran ダッシュボードの「Account Settings > Downloads」からも表示できます。ここで対応する OS のソフトウェアパッケージをダウンロードします。 こちらはエージェントを構成するインスタンスに配置します。

image 7

次の手順として、エージェントの名称を指定し「Generate proxy agent config」をクリックします。

image 8

すると設定が記載された Json ファイル(config.json)をダウンロードできます。

image 9

Json ファイルに記載の内容は後程エージェントを構成する際に使用します。中身は以下のようになっており Fivetran 側のサーバとの認証時に使用するトークンなどが含まれます。

{
	"agent_id":"muttered_assurance",
	"auth_token":"xxxxx",
	"proxy_server_uri":"xxxxx"
}

ダウンロードしたソフトウェアパッケージ(fivetran-6.1.0_79-hub_and_agent-linux_glibc2.12-x64-64bit_ga_patch.tar.gz)はエージェントサーバ(EC2)で使用します。
ここでは EC2 に Session Manager を使用してログインしているので、S3 に配置し取得することしました。

$ aws s3 ls s3://<バケット名>
2025-06-14 07:51:33  376757665 fivetran-6.1.0_79-hub_and_agent-linux_glibc2.12-x64-64bit_ga_patch.tar.gz

Proxy Agent のインストール

構成に必要なファイルを取得したら、実際にエージェント サーバを構成します。手順は以下に記載があります。

https://fivetran.com/docs/connectors/databases/connection-options#installproxyagent

ネットワーク周りの前提として、エージェント サーバから Fivetran 側のプロキシサーバーへ接続できること確認しておきます。

# 443ポートへの接続をテスト
nc -zv <proxy_server_uri> 443 

EC2 側で以下の環境変数を設定します。

  • HVR_HOME
  • HVR_CONFIG
  • HVR_TMP

これらの環境変数はそれぞれ、対応するインストールディレクトリhvr_homehvr_confighvr_tmp指定します。ここでは ec2-user で作業しており、以下の通り設定しました(公式ドキュメントのサンプルコマンドと内容が異なります)。

# ec2-userのホームディレクトリにFivetran用のディレクトリを作成
mkdir -p ~/fivetran

# .bashrcに環境変数を追加
echo 'export HVR_HOME=/home/ec2-user/fivetran/hvr_home' >> ~/.bashrc
echo 'export HVR_CONFIG=/home/ec2-user/fivetran/hvr_config' >> ~/.bashrc
echo 'export HVR_TMP=/home/ec2-user/fivetran/hvr_tmp' >> ~/.bashrc
echo 'export PATH=$PATH:$HVR_HOME/bin' >> ~/.bashrc
source ~/.bashrc

インストールディレクトリ(HVR_HOME)を作成します。

# ファイルのパーミッションを設定
umask 022
mkdir $HVR_HOME

パッケージ ファイル(fivetran-6.1.0_79-hub_and_agent-linux_glibc2.12-x64-64bit_ga_patch.tar.gz)をHVR_HOMEディレクトリに解凍します。

# HVR_HOMEディレクトリに移動
cd $HVR_HOME
# ここではS3からファイルを取得
aws s3 cp s3://<バケット名>/fivetran-6.1.0_79-hub_and_agent-linux_glibc2.12-x64-64bit_ga_patch.tar.gz /tmp/
# HVR_HOMEディレクトリに解凍
tar xzf /tmp/fivetran-6.1.0_79-hub_and_agent-linux_glibc2.12-x64-64bit_ga_patch.tar.gz
# HVR_HOMEのディレクトリ構成
 tree -L 1
.
├── api
├── bin
├── dbms
├── etc
├── examples
├── hvr.3rdparty
├── hvr.rel
├── hvr.ver
├── jre
├── lib
├── plugin
├── plugin_examples
├── proxy
├── sbin
├── script
└── www

続けて指定のディレクトリに Proxy Agent の設定ファイル(proxyagent.conf)を作成します。設定ファイルには、先の手順で Fivetran ダッシュボードから取得した Json ファイル(config.json)の内容をコピーします。

# 設定ディレクトリを作成
mkdir -p $HVR_CONFIG/proxy

# 設定ファイルを作成
# Fivetranダッシュボードで生成された設定を貼り付け
vi $HVR_CONFIG/proxy/proxyagent.conf

システムの初期化プロセス(init system)の種類を確認します。

# init systemがsystemdであることを確認
ps -p 1 -o comm=
# 出力が「systemd」であることを確認

/etc/systemd/system に systemd サービスファイルを作成します。注意点として、以下の設定内容はドキュメント記載のままです。

各種パス(/home/fivetran/hvr_home/jre/bin/java/home/fivetran/hvr_config/proxy//home/fivetran/hvr_home/proxy/proxyagent.jar/home/fivetran/hvr_config/proxy/proxyagent.conf)は実際の構成に置き換えます。(本記事の設定では/home/ec2-user/fivetran/hvr_home/jre/bin/javaなど)

# rootユーザーに切り替え
exit
sudo su -

# サービスファイルを作成
cat > /etc/systemd/system/fivetran_proxy.service << 'EOF'
[Unit]
Description=Fivetran Proxy Agent

[Service]
Type=simple
ExecStart=/home/fivetran/hvr_home/jre/bin/java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/fivetran/hvr_config/proxy/ -jar /home/fivetran/hvr_home/proxy/proxyagent.jar /home/fivetran/hvr_config/proxy/proxyagent.conf
Restart=always
RestartSec=5s

[Install]
WantedBy=multi-user.target
EOF

パスの指定に誤りがあるとサービスのステータス確認時に以下のような表示となります。

[root@ip-10-0-130-2 ~]# systemctl status fivetran_proxy.service
● fivetran_proxy.service - Fivetran Proxy Agent
     Loaded: loaded (/etc/systemd/system/fivetran_proxy.service; enabled; preset: disabled)
     Active: activating (auto-restart) (Result: exit-code) since Sat 2025-06-14 08:28:23 UTC; 1s ago
    Process: 70777 ExecStart=/home/fivetran/hvr_home/jre/bin/java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/fivetran/hvr_config/proxy/ -jar /home/fivetran/hvr_home/proxy/p>
   Main PID: 70777 (code=exited, status=203/EXEC)
        CPU: 880us

上記の設定後、サービスを有効化し起動します。

# サービスを有効化
systemctl enable fivetran_proxy.service

# サービスを起動
systemctl start fivetran_proxy.service

# サービスのステータスを確認
systemctl status fivetran_proxy.service

問題なければステータスとして、サービスが正常に動作していることが確認できます。

$ systemctl status fivetran_proxy.service
● fivetran_proxy.service - Fivetran Proxy Agent
     Loaded: loaded (/etc/systemd/system/fivetran_proxy.service; enabled; preset: disabled)
     Active: active (running) since Sat 2025-06-14 08:34:01 UTC; 5s ago
   Main PID: 71268 (java)
      Tasks: 35 (limit: 19150)
     Memory: 180.2M
        CPU: 4.920s
     CGroup: /system.slice/fivetran_proxy.service
             └─71268 /home/ec2-user/fivetran/hvr_home/jre/bin/java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/ec2-user/fivetran/hvr_config/proxy/ -jar /home/ec2-user/fivetr>

Jun 14 08:34:03 ip-10-0-130-2.ec2.internal java[71268]: Jun 14, 2025 8:34:03 AM com.fivetran.proxy.agent.MigrationManager migrate
Jun 14 08:34:03 ip-10-0-130-2.ec2.internal java[71268]: INFO: Migration completed successfully
Jun 14 08:34:03 ip-10-0-130-2.ec2.internal java[71268]: Jun 14, 2025 8:34:03 AM com.fivetran.proxy.agent.MigrationManager tryMigration
Jun 14 08:34:03 ip-10-0-130-2.ec2.internal java[71268]: INFO: Migration completed successfully
Jun 14 08:34:03 ip-10-0-130-2.ec2.internal java[71268]: Jun 14, 2025 8:34:03 AM com.fivetran.proxy.agent.ProxyAgent getDelegate
Jun 14 08:34:03 ip-10-0-130-2.ec2.internal java[71268]: INFO: Config successfully migrated. Using a gRPC Proxy Agent.
Jun 14 08:34:03 ip-10-0-130-2.ec2.internal java[71268]: Config is valid: {"agent_id":"muttered_assurance","auth_token":"***","client_cert":"xxxxx>
Jun 14 08:34:03 ip-10-0-130-2.ec2.internal java[71268]: SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
Jun 14 08:34:03 ip-10-0-130-2.ec2.internal java[71268]: SLF4J: Defaulting to no-operation (NOP) logger implementation
Jun 14 08:34:03 ip-10-0-130-2.ec2.internal java[71268]: SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

Fivetran ダッシュボードのコネクション設定に戻ります。エージェント構成後「Test network」をクリックすると下図の表示となりました。サービスを起動しエージェントからの送信接続が確立されていれば問題ないものと思います。

image 10

次の項目ではデータベースへの認証情報、接続先のデータベースを指定します。エージェントからデータベースへアクセスできることを確認します。

image 11

最後に同期方法を指定します。ここでは特に設定が不要な「Fivetran Teleport Sync」を指定しました。

image 12

最後に、各項目のテストが行われ、問題なければ下図の表示となります。

image 13

必要に応じて同期対象のスキーマを指定します。

image 14

以上で設定完了です。これで初期同期を開始できます。

image 15

データを確認

初期同期後、Snowflake 側で確認すると下図のように宛先にテーブルが追加されていました。

image 16

レコードの追加

基本的な更新を試してみます。はじめにソース側でテーブルにレコードを追加します。

INSERT INTO Employees (FirstName, LastName, Position) VALUES ('Alice', 'Johnson', 'Software Engineer');
GO

> SELECT * FROM Employees;
2> GO
EmployeeID  FirstName                                          LastName                                           Position
----------- -------------------------------------------------- -------------------------------------------------- --------------------------------------------------
          1 John                                               Doe                                                Software Developer
          2 Jane                                               Doe                                                Project Manager
          3 Jim                                                Beam                                               Analyst
          4 Alice                                              Johnson                                            Software Engineer

(4 rows affected)

同期後、Snowflake 側で確認するとレコードの追加を確認できます。

image 17

レコードの削除

ソース側でレコードを削除してみます。

DELETE FROM Employees WHERE EmployeeID = 2;
GO

1> SELECT * FROM Employees;
2> GO
EmployeeID  FirstName                                          LastName                                           Position
----------- -------------------------------------------------- -------------------------------------------------- --------------------------------------------------
          1 John                                               Doe                                                Software Developer
          3 Jim                                                Beam                                               Analyst
          4 Alice                                              Johnson                                            Software Engineer

(3 rows affected)

同期後、Snowflake 側で確認すると論理削除として反映されます。

image 18

ダッシュボードでのエージェント表示

エージェント構成後はダッシュボードの「Account Settings > General > Connection Methods」で構成したエージェントを確認できます。

image 19

さいごに

Fivetran 接続オプションとして Proxy Agent を試してみました。
そこまで構成も複雑でなく、セキュリティ要件上インバウンド通信を許可できない際に使用できるので、特にクラウドサービス上のデータベースをソースとする際は選択肢に入るオプションと思います。
こちらの内容が何かの参考になれば幸いです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.