Share
Embed
Snowflake Openflow Connector利用の勘所 / 20261024developersio2026tokyo-snowflake-openflow
2026/10/24 (土) 開催の「DevelopersIO 2026 Tokyo」にて登壇した資料。
イベントページ
https://events.classmethod.jp/study-club/connpass-402011/
https://classmethod.connpass.com/event/402011/
kasacchiful PRO
October 24, 2026
Transcript
36 slides
-
自己紹介 笠原 宏 (@kasacchiful) クラスメソッド株式会社 データ事業本部 ビジネスソリューション部 ソリューションアーキテクト 新潟県新潟市在住 JAWS-UG新潟
/ Python機械学習勉強会 in 新潟 / JaSST Niigata / ASTER / SWANII / Cloudflare Meetup Niigata / AI CRAFT Hacks Niigata / KomeKaigi AWS Community Builder (Serverless) 2022, 2025 Japan AWS Top Engineer / 2022-2026 Japan All AWS Certifications Engineer AWS Samurai 2025 2 -
Openflowとは Snowflakeのデータ統合サービス Apache NiFi ベース 外部のDBやSaaSからSnowflakeへ取り込み (CDC (Change Data Capture)
にも対応) 基本構成 構成要素 解説 Deployment Openflowを動かす基盤。 ここで SPCS (Snowpark Container Service) / BYOC (Bring Your Own Cloud) を選ぶ。 Apache NiFiが動く、Deployment上で動作するコンテナ化された実行環境。 Runtime ノードサイズやロール、外部アクセス (ネットワーク統合) 等を持つ。 Connector Runtime上に置く、データソース別の接続設定 今回は、PostgreSQL / Oracle の Connector で、DBのデータをCDCで取り込みを試しています 4 -
SPCS と BYOC SPCS 動作する場所 Snowflake管理のコンテナ基盤 構築方法 Snowsightから作成 ソースDBへの経路 外部アクセス設定が必要
Snowflake マネージド 運用 アップグレードも自動 対応クラウド AWS および Azure BYOC 自社所有AWSアカウント上のEKS Snowflake提供のCFn + 自前のVPC等 VPC内でプライベートに接続 構築・更新はエージェントEC2が実施 実行タイミングは自分で判断 AWS 5 -
試した3パターン # ソースDB 1 RDS for PostgreSQL 2 RDS for
PostgreSQL 3 オンプレ OracleDB Deployment 経路 BYOC (EKS) VPC内 SPCS インターネット + NLB (IP制限) SPCS アウトバウンド PrivateLink + TGW 詳細はブログにまとめています https://dev.classmethod.jp/articles/tried-running-snowflake-openflow-connector-for-postgresqlon-aws/ 6 -
1. RDS for PostgreSQL (BYOC) Openflow Deploymentは、自身が所有するAWSアカウン ト内のEKSで稼働 SnowflakeへのOutbound通信が必要 Deployment構築には、Snowflake提供のCfnテンプレ
ートを利用 Connector設定用のApache NiFiの画面にアクセスするた めの、NLBが設定される Connector設定のためのInbound通信も必要 認証はSnowflakeで行う プライベートIngress通信用NLBも構築可能 https://dev.classmethod.jp/articles/tried-running-snowflake-openflow-connector-for-postgresqlon-aws/ 7 -
2. RDS for PostgreSQL (SPCS) Openflow Deploymentは、Snowflakeアカウント内で稼 働 データソースへアクセスするために、AWS側にInbound 通信できる構成を整備する必要がある
今回は、AWSパブリックネットワークからNLBを経由 して接続できるように構成 https://dev.classmethod.jp/articles/tried-running-snowflake-openflow-connector-for-postgresqlon-spcs-and-connected-to-rds/ 8 -
3. オンプレ OracleDB (SPCS) Openflow Deploymentは、Snowflakeアカウ ント内で稼働 データソースへアクセスするために、AWS側 にInbound通信できる構成を整備する必要が ある
今回はPrivateLink接続 (Business Critical) https://dev.classmethod.jp/articles/tried-running-snowflake-openflow-connector-for-oracle-onspcs-and-connected-to-an-on-premise-database-via-privatelink/ 9 -
利用規約の承諾は ORGADMIN だけ Openflow Connectorを利用するには、 ORGADMIN権限を持つユーザにて、利用規約 の承認が必要 Openflowの画面を初回に開いた際に、承認 可能 OracleDBコネクタを利用する場合、上記規約
のほかに、ORGADMIN権限を持つユーザに て、別途追加の利用規約の承認が必要 Marketplaceから個別に承認 追加承認前に作成したRuntimeでは、 OracleDB Connectorは使えないので、 Runtime再作成 11 -
Runtimeにログインできない Runtimeを開くと、ログイン画面に戻される The role requested has been explicitly blocked for
use with this application Runtime の OAuth ログインは、ユーザーの 「DEFAULT_ROLE」を使う ACCOUNTADMIN / ORGADMIN / SECURITYADMIN など はブロック対象 Snowsightでロールを切り替えていても関係なし 対処法: DEFAULT_ROLEを変更 ALTER USER <user> SET DEFAULT_ROLE = OPENFLOW_ADMIN; ALTER USER <user> SET DEFAULT_SECONDARY_ROLES = ('ALL'); -- サインアウトして、サインインし直す 12 -
その他の制約 PostgreSQL / Oracle Connector はシングルノードのみ対応 ノードタイプは Medium 以上 Min
/ Max ノード数は 1 / 1 イベントテーブルは UI で指定できない ログ、トレース、メトリクス等テレメトリデータを取得するために必要 Deployment 作成後に SQL で設定 ALTER OPENFLOW DATA PLANE INTEGRATION < 自動生成名> SET EVENT_TABLE = ...; 上記は gen 1 の場合。gen 2 では ALTER OPENFLOW DEPLOYMENT ... SET EVENT_TABLE OracleDBのコネクタ利用の場合は、ライセンス等の制約条件を満たしているか確認すること Oracle XStreamサービスを使うことが許可されているか XStreamサービスのライセンスは「Snowflake提供」か「BYOL」か 13 -
SPCSから外部へ接続するために 1. Network Rule と External Access Integration (EAI) を作成
2. Runtime ロールに GRANT USAGE ON INTEGRATION 3. Runtimes 画面で、Runtime に EAI を関連付け ハマりどころ EAI を後から関連付けたら、Runtime の再起動をすること 忘れると UnknownHostException (タイムアウトではなく名前解決失敗) JDBC URL のコピペで、空白・改行が混入しても同じエラーになるので注意 AWS 側(SG / FW)の許可も別途必要 接続制御は Snowflake 側と AWS 側の両方必要 15 -
パブリックネットワーク経由なら、NLBを利用 SPCS → パブリックNW (TLS) → NLB (Snowflake egress IP
のみ許可) → private RDS ハマりどころ 接続が約半分失敗す る RDS 側 SG でブロッ ク sslmode=verify- 対処 NLB の cross-zone 有効化(RDSが1AZのため) preserve_client_ip は無効のまま 証明書はRDS名だが、接続ホスト名はNLB。 require か verify-ca に で失敗 egress IP がいつの間 SYSTEM$GET_SNOWFLAKE_EGRESS_IP_RANGES() は90日で失 にか変わる 効するので、定期的に更新すること RDS Proxy を挟みた ストリーミング非対応のため使用不可。NLB で い full 16 -
閉域にしたいなら、アウトバウンド接続のPrivateLink Business Critical 以上 / 同一リージョン 接続の向きに注意 Snowflake が Consumer
/ AWSが Provider AWS側で作るのは VPC Endpoint Service + NLB Snowflake インバウンド接続の PrivateLink(AWS → Snowflake)とは向きが異なる エンドポイントは、アカウントあたり5つまで 同じAWSアカウント上から複数のデータソースにアクセスする場合は、ポート多重化 ( :1521 / :15521 ) で1つのエンドポイントに集約 ホスト名は3か所の設定で完全一致させる SYSTEM$PROVISION_PRIVATELINK_ENDPOINT / Network Rule / JDBC URL (Openflow Connector) 17 -
PostgreSQL (RDS) の準備 rds.logical_replication = 1 静的パラメータ → 再起動が必要。 SHOW
wal_level; で確認 RDS のマスターユーザーは superuser ではない REPLICATION 属性は付けられない → GRANT rds_replication CREATE PUBLICATION ... FOR ALL TABLES は不可 連携対象となるテーブルを列挙する必要あり 主キーのないテーブルは、スナップショットが進まない / FAILED REPLICA IDENTITY USING INDEX などで対応 Connector を消してもレプリケーションスロットは残る WAL が溜まり続けてディスクを圧迫 → pg_drop_replication_slot 20 -
Oracle DBの準備 前提 GoledenGate / XSteam サービスが利用可能か 基本的にはOracle Database Enterprise
Edition ARCHIVELOG / supplemental logging / STREAMS_POOL_SIZE 等を設定 XStream Outbound Server を作成し、接続ユーザーを紐付け ORA-26827: Insufficient privileges to attach to XStream outbound server DBA ユーザーでも attach できない Snowflake 側の Connector の Username を、Oracle DB 側の Outbound Server の connect_user と一致させる必要あり XStream Out Server URL は OCI ドライバ指定 jdbc:oracle:oci:@//... 21 -
スナップショットは来るのに、CDCが来ない 症状 初回スナップショットは成功。その後の変更が一切来ない Oracle 側は WAITING FOR REDO 、 bytes_of_redo_mined
= 0 原因 Outbound Server を作ってから数日放置 アーカイブログが24時間で削除される環境だった 必要な redo が消えた 学び 「アーカイブログの保持期間」 が 「許容できる停止時間」 WAITING FOR REDO は異常、 WAITING FOR TRANSACTION は正常 切り分けは3区間 capture (Oracle) → outbound (Oracle) → Connector (Snowflake) 23 -
取り込み対象の追加順を間違えると、黙って欠ける 実際に取り込まれる対象 「Oracle の Outbound ルールで指定したテーブル」かつ「Snowflake の Connector で指定 した
Included Table Names 」 Connector 側だけ先に設定追加すると スナップショットは JDBC で直接読むので、テーブルは作成される でも、ルール追加までの変更はエラーなしでデータが欠落する Included Table Names は DB.SCHEMA.TABLE の3パート必須 DB名を書き忘れると、データ取り込みされない (エラーにならず無視される) 取り込み対象の追加は必ず Oracle → Snowflake の順で 24 -
「Running」なのに止まっている Connectorのトップ画面上は正常動作しているように見えるが、データ が反映されない 「Incremental Load」グループの集計は Running 31 / Stopped 0
/ Invalid 0 と正常に見えるが、グループを開いて個々のプロセッサを見 ると、5分間 In/Out/Read-write が全てゼロ。 トップ画面上で Stop/Start しても直らない 見分け方 動作していないプロセッサを右クリックすると Start がなく Terminate だけしか表示されない 正常動作なら Stop / Start が表示されるが、ゾンビ状態になって いる模様 対処 Terminate してから Start 25 -
監視と運用のルール Connector は基本止めない 止めるなら、アーカイブログ / WAL の保持期間内にすること 監視するもの ソース側 scn_behind
/ bytes_of_redo_mined / SYSAUX / レプリケーションスロット Snowflake 側 最終更新時刻 _SNOWFLAKE_UPDATED_AT 、ラグ 再スナップショットは 手動で テーブル DROP 宛先テーブルとジャーナルを消さないと already exists で FAILED Snowflakeの下流側は、直接テーブルを参照するより、ビューを挟んでおくと影響を抑えら れる 本番前に「停止 → 再開で欠落なく追いつくか」を試験すること 26 -
消したつもりになっていないか? パターン BYOC SPCS PrivateLink PostgreSQL 残りがちなもの 対処 EKS /
NLB / ノード CFn削除の前にエージェントEC2上で ./destroy.sh compute pool Runtime がなくても課金。Deployment ごと削除 エンドポイント SYSTEM$DEPROVISION_PRIVATELINK_ENDPOINT を先に削除 レプリケーションスロット 手動で DROP(WAL肥大化) 所要時間の目安 BYOC の Deployment 作成 45〜60分、 destroy.sh 20〜30分 Runtime 作成 約2分、PrivateLink エンドポイント 約5分 28 -
gen 2 Openflow とは 2026/08/31 Preview → 2026/09/08 Deployment /
Runtime が GA 2026/09/09 以降、gen 1 Deployment の新規作成は終了 2026/10/01 gen 1 → gen 2 の移行が GA Deployment / Runtime / Connector が SQLオブジェクトに Runtime / Connector はスキーマレベルのオブジェクト、通常のRBACで管理 Connector の設定は バージョン管理されたファイル ( config.json ) draft → commit、ロールバック、Gitで環境間に展開 Connector 設定は Public Preview SQL/設定ファイル対応は PostgreSQL CDC / MySQL・MariaDB CDC のみ (2026/10時点) gen 1 の Connector は gen 2 の Runtime でも動く https://docs.snowflake.com/en/user-guide/data-integration/openflow/gen2/openflow-generations 30 -
まとめ: 時短チェックリスト 始める前 ORGADMINで規約承諾 利用ユーザーの DEFAULT_ROLE は ACCOUNTADMIN 以外に ネットワーク
(SPCS) EAI 3点の設定 + 後付けなら Runtime 再起動 閉域なら Business Critical + アウトバウンド PrivateLink ソースDB ライセンス・ログ設定・ユーザーは DB 管理者と事前に合意 動いた後 「エラーが出ないデータ欠落」を前提に、監視と停止・再開の試験を 片付け destroy.sh / compute pool / スロット / エンドポイント これから始めるなら gen 2 で、構築手順を SQL として残す 31 -
参考資料 Snowflake Openflow Connector for PostgreSQL を AWS で動かしてみた |
DevelopersIO Snowflake Openflow Connector for PostgreSQL を SPCS で動かし、RDS for PostgreSQLに接 続してみた | DevelopersIO Snowflake Openflow Connector for Oracle を SPCS で動かし、PrivateLink経由でオンプレの Oracle Databaseに接続してみた | DevelopersIO 36