
Fivetran のデータソースへの接続オプションとして Proxy Agent を試してみた
はじめに
Fivetran では一部のデータソース向けの接続オプションとして Proxy Agent を使用できます。こちらを試してみましたので、本記事で内容をまとめてみます。
Proxy Agent
Fivetran のデータソースへの接続オプションは以下に一覧の記載があります。
特にデータソースがデータベース製品など外部から直接アクセスが難しい顧客ネットワーク内にある場合に使用できるオプションとして SSHトンネルや各クラウドサービスのプライベート接続機能を使用できます。
Proxy Agent も同様のオプションで、その他の接続オプションとの主な違いを含めた特徴は以下になります。
- 顧客管理ネットワークにエージェントサーバを構成する
- エージェントサーバは Fivetran 管理のネットワークに対して送信ネットワーク接続を作成するため、顧客管理のネットワーク側で受信ポートを開く必要がない
- データソースとして RDBMS を中心に対応
- HVA と組み込合わせた構成も可能
- 単一のクラウドリージョンからの接続のみをサポート
- 一つの Proxy Agent は最大10個のコネクションをサポート
顧客管理のネットワーク側でインバウンドアクセス用にポートを開く必要がないため、こういったセキュリティ要件がある組織ではこのオプションが選択肢に入ると思います。
下図は公式ドキュメント記載の図からの引用ですが、このような構成です。
注意点として「単一のクラウドリージョンからの接続のみをサポート」しています。
Fivetran では宛先作成時にデータ処理を行うクラウドリージョンを指定します。そのため、このクラウドリージョンとデータソースのクラウドリージョンが一致する場合に Proxy Agent は構成可能です。
また、執筆時点ですべてのクラウドリージョンでサポートされていません。ドキュメント上で一覧の記載は見つけられなかったので、構成可能なクラウドリージョンは宛先を指定しコネクション作成画面から確認する必要があります。
また、似たような接続オプションとして Fivetran では Hybrid Deployment というモデルを選択できます。こちらも顧客管理のネットワークに Fivetran とアウトバウンド通信を行うエージェントを構成します。Proxy Agent との違いとしては、 Hybrid Deployment ではデータ処理も顧客管理のネットワークで行われます。
Fivetran は SaaS ですので、データ処理時は一時的にデータが Fivetran 管理のネットワーク内で処理されます。セキュリティ要件上、この点が気になる際は Hybrid Deployment モデルを使用できます。
前提条件
以下の環境で検証しました。
- 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 サーバからのアクセスを許可
- Amazon RDS for SQL Server
- Proxy Agent サーバ
- OS:Amazon Linux 2023
- アーキテクチャ:x86_64
- インスタンスタイプ:t2.xlarge (4 vCPU, 16GB メモリ)
- ストレージ:8 GB
- Session Manager を使用して EC2 インスタンスに接続
構成は下図の通りです。
事前準備
SQL Server:サンプルデータの作成
ここでは Proxy Agent サーバにクライアントをインストールし、Fivetran に連携するデータを用意します。
クライアントのインストールについては、以下が参考になります。
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
ここまでの手順の詳細は以下をご参照ください。
Proxy Agent の構成
接続方法として Proxy Agent を使用するコネクションを作成します。
要件
Proxy Agent 用サーバの要件は以下に記載があります。
ドキュメントからの引用ですが、主な要件は以下の通りです。
- CPU:x86-64プロセッサを搭載した最低4 vCPU
- メモリ:最低5 GBのRAM
- ストレージ: 実行ファイルとログ用に最低2 GBの割り当てディスク容量
- Java:プロキシエージェントには、オープンソースのAzul Zulu JDKをベースとしたJava実行環境(JRE)がバンドルされている(追加のJavaライセンスのインストールや購入は不要)
コネクションの作成
はじめに Fivetran ダッシュボードで作業します。通常のようにコネクションを作成します。
宛先スキーマや命名規則を指定します。
ネットワークに関する接続設定では、接続方法として「Connect via Proxy Agent」を指定します。
すると下図の表示になります。エージェントは複数(最大10)のコネクションで使用できるので、すでに別のコネクションでエージェントを構成している場合は、そちらを指定することも可能です。
今回はエージェントの構成から行うので「+ Configure a new proxy agent」をクリックします。
下図のように、エージェントを構成可能なデータ処理リージョンである場合、追加の手順が表示されます。
はじめの手順として、エージェントをダウンロードします。
ダウンロードメニューは上記のリンクから遷移するか Fivetran ダッシュボードの「Account Settings > Downloads」からも表示できます。ここで対応する OS のソフトウェアパッケージをダウンロードします。 こちらはエージェントを構成するインスタンスに配置します。
次の手順として、エージェントの名称を指定し「Generate proxy agent config」をクリックします。
すると設定が記載された Json ファイル(config.json
)をダウンロードできます。
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 のインストール
構成に必要なファイルを取得したら、実際にエージェント サーバを構成します。手順は以下に記載があります。
ネットワーク周りの前提として、エージェント サーバから Fivetran 側のプロキシサーバーへ接続できること確認しておきます。
# 443ポートへの接続をテスト
nc -zv <proxy_server_uri> 443
EC2 側で以下の環境変数を設定します。
HVR_HOME
HVR_CONFIG
HVR_TMP
これらの環境変数はそれぞれ、対応するインストールディレクトリhvr_home
、hvr_config
、hvr_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」をクリックすると下図の表示となりました。サービスを起動しエージェントからの送信接続が確立されていれば問題ないものと思います。
次の項目ではデータベースへの認証情報、接続先のデータベースを指定します。エージェントからデータベースへアクセスできることを確認します。
最後に同期方法を指定します。ここでは特に設定が不要な「Fivetran Teleport Sync」を指定しました。
最後に、各項目のテストが行われ、問題なければ下図の表示となります。
必要に応じて同期対象のスキーマを指定します。
以上で設定完了です。これで初期同期を開始できます。
データを確認
初期同期後、Snowflake 側で確認すると下図のように宛先にテーブルが追加されていました。
レコードの追加
基本的な更新を試してみます。はじめにソース側でテーブルにレコードを追加します。
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 側で確認するとレコードの追加を確認できます。
レコードの削除
ソース側でレコードを削除してみます。
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 側で確認すると論理削除として反映されます。
ダッシュボードでのエージェント表示
エージェント構成後はダッシュボードの「Account Settings > General > Connection Methods」で構成したエージェントを確認できます。
さいごに
Fivetran 接続オプションとして Proxy Agent を試してみました。
そこまで構成も複雑でなく、セキュリティ要件上インバウンド通信を許可できない際に使用できるので、特にクラウドサービス上のデータベースをソースとする際は選択肢に入るオプションと思います。
こちらの内容が何かの参考になれば幸いです。