Slide 1

Slide 1 text

Snowflake Openflow Connector 利用の勘所 2026/10/24 (土) DevelopersIO 2026 Tokyo 笠原 宏

Slide 2

Slide 2 text

自己紹介 笠原 宏 (@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

Slide 3

Slide 3 text

今日のお話 「動くはずなのに、動かない」 Snowflake Openflow Connector を、3パターンで試しました そのたびに、ドキュメント通りのはずなのに動かない場面に遭遇しました 今日は、その「ハマりどころ」と「対処方法」をまとめて共有します これから触る方の「時短ガイド」になれば幸いです 3

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

SPCS と BYOC SPCS 動作する場所 Snowflake管理のコンテナ基盤 構築方法 Snowsightから作成 ソースDBへの経路 外部アクセス設定が必要 Snowflake マネージド 運用 アップグレードも自動 対応クラウド AWS および Azure BYOC 自社所有AWSアカウント上のEKS Snowflake提供のCFn + 自前のVPC等 VPC内でプライベートに接続 構築・更新はエージェントEC2が実施 実行タイミングは自分で判断 AWS 5

Slide 6

Slide 6 text

試した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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

勘所(1) 始める前に

Slide 11

Slide 11 text

利用規約の承諾は ORGADMIN だけ Openflow Connectorを利用するには、 ORGADMIN権限を持つユーザにて、利用規約 の承認が必要 Openflowの画面を初回に開いた際に、承認 可能 OracleDBコネクタを利用する場合、上記規約 のほかに、ORGADMIN権限を持つユーザに て、別途追加の利用規約の承認が必要 Marketplaceから個別に承認 追加承認前に作成したRuntimeでは、 OracleDB Connectorは使えないので、 Runtime再作成 11

Slide 12

Slide 12 text

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 SET DEFAULT_ROLE = OPENFLOW_ADMIN; ALTER USER SET DEFAULT_SECONDARY_ROLES = ('ALL'); -- サインアウトして、サインインし直す 12

Slide 13

Slide 13 text

その他の制約 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

Slide 14

Slide 14 text

勘所(2) SPCS利用時のネットワーク構成

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

パブリックネットワーク経由なら、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

Slide 17

Slide 17 text

閉域にしたいなら、アウトバウンド接続の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

Slide 18

Slide 18 text

例: Oracle DB 複数のデータソースへ接続するパターンの構成 18

Slide 19

Slide 19 text

勘所(3) ソースDB側の準備

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

勘所(4) 設定して動作した後の話 (Oracle Connector 中心)

Slide 23

Slide 23 text

スナップショットは来るのに、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

Slide 24

Slide 24 text

取り込み対象の追加順を間違えると、黙って欠ける 実際に取り込まれる対象 「Oracle の Outbound ルールで指定したテーブル」かつ「Snowflake の Connector で指定 した Included Table Names 」 Connector 側だけ先に設定追加すると スナップショットは JDBC で直接読むので、テーブルは作成される でも、ルール追加までの変更はエラーなしでデータが欠落する Included Table Names は DB.SCHEMA.TABLE の3パート必須 DB名を書き忘れると、データ取り込みされない (エラーにならず無視される) 取り込み対象の追加は必ず Oracle → Snowflake の順で 24

Slide 25

Slide 25 text

「Running」なのに止まっている Connectorのトップ画面上は正常動作しているように見えるが、データ が反映されない 「Incremental Load」グループの集計は Running 31 / Stopped 0 / Invalid 0 と正常に見えるが、グループを開いて個々のプロセッサを見 ると、5分間 In/Out/Read-write が全てゼロ。 トップ画面上で Stop/Start しても直らない 見分け方 動作していないプロセッサを右クリックすると Start がなく Terminate だけしか表示されない 正常動作なら Stop / Start が表示されるが、ゾンビ状態になって いる模様 対処 Terminate してから Start 25

Slide 26

Slide 26 text

監視と運用のルール Connector は基本止めない 止めるなら、アーカイブログ / WAL の保持期間内にすること 監視するもの ソース側 scn_behind / bytes_of_redo_mined / SYSAUX / レプリケーションスロット Snowflake 側 最終更新時刻 _SNOWFLAKE_UPDATED_AT 、ラグ 再スナップショットは 手動で テーブル DROP 宛先テーブルとジャーナルを消さないと already exists で FAILED Snowflakeの下流側は、直接テーブルを参照するより、ビューを挟んでおくと影響を抑えら れる 本番前に「停止 → 再開で欠落なく追いつくか」を試験すること 26

Slide 27

Slide 27 text

勘所(5) 検証終了後の後片付け

Slide 28

Slide 28 text

消したつもりになっていないか? パターン 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

Slide 29

Slide 29 text

補足: 第2世代 (gen 2) Openflow で、SQLで設定 できるように

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

まとめ: 時短チェックリスト 始める前 ORGADMINで規約承諾 利用ユーザーの DEFAULT_ROLE は ACCOUNTADMIN 以外に ネットワーク (SPCS) EAI 3点の設定 + 後付けなら Runtime 再起動 閉域なら Business Critical + アウトバウンド PrivateLink ソースDB ライセンス・ログ設定・ユーザーは DB 管理者と事前に合意 動いた後 「エラーが出ないデータ欠落」を前提に、監視と停止・再開の試験を 片付け destroy.sh / compute pool / スロット / エンドポイント これから始めるなら gen 2 で、構築手順を SQL として残す 31

Slide 32

Slide 32 text

宣伝

Slide 33

Slide 33 text

KomeKaigi 2026 33

Slide 34

Slide 34 text

No content

Slide 35

Slide 35 text

No content

Slide 36

Slide 36 text

参考資料 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