Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Snowflake Openflow Connector利用の勘所 / 20261024dev...

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/

Avatar for kasacchiful

kasacchiful PRO

October 24, 2026

More Decks by kasacchiful

Other Decks in Programming

Transcript

  1. 自己紹介 笠原 宏 (@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
  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
  3. SPCS と BYOC SPCS 動作する場所 Snowflake管理のコンテナ基盤 構築方法 Snowsightから作成 ソースDBへの経路 外部アクセス設定が必要

    Snowflake マネージド 運用 アップグレードも自動 対応クラウド AWS および Azure BYOC 自社所有AWSアカウント上のEKS Snowflake提供のCFn + 自前のVPC等 VPC内でプライベートに接続 構築・更新はエージェントEC2が実施 実行タイミングは自分で判断 AWS 5
  4. 試した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
  5. 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
  6. 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
  7. 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
  8. 利用規約の承諾は ORGADMIN だけ Openflow Connectorを利用するには、 ORGADMIN権限を持つユーザにて、利用規約 の承認が必要 Openflowの画面を初回に開いた際に、承認 可能 OracleDBコネクタを利用する場合、上記規約

    のほかに、ORGADMIN権限を持つユーザに て、別途追加の利用規約の承認が必要 Marketplaceから個別に承認 追加承認前に作成したRuntimeでは、 OracleDB Connectorは使えないので、 Runtime再作成 11
  9. 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
  10. その他の制約 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
  11. 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
  12. パブリックネットワーク経由なら、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
  13. 閉域にしたいなら、アウトバウンド接続の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
  14. 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
  15. 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
  16. スナップショットは来るのに、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
  17. 取り込み対象の追加順を間違えると、黙って欠ける 実際に取り込まれる対象 「Oracle の Outbound ルールで指定したテーブル」かつ「Snowflake の Connector で指定 した

    Included Table Names 」 Connector 側だけ先に設定追加すると スナップショットは JDBC で直接読むので、テーブルは作成される でも、ルール追加までの変更はエラーなしでデータが欠落する Included Table Names は DB.SCHEMA.TABLE の3パート必須 DB名を書き忘れると、データ取り込みされない (エラーにならず無視される) 取り込み対象の追加は必ず Oracle → Snowflake の順で 24
  18. 「Running」なのに止まっている Connectorのトップ画面上は正常動作しているように見えるが、データ が反映されない 「Incremental Load」グループの集計は Running 31 / Stopped 0

    / Invalid 0 と正常に見えるが、グループを開いて個々のプロセッサを見 ると、5分間 In/Out/Read-write が全てゼロ。 トップ画面上で Stop/Start しても直らない 見分け方 動作していないプロセッサを右クリックすると Start がなく Terminate だけしか表示されない 正常動作なら Stop / Start が表示されるが、ゾンビ状態になって いる模様 対処 Terminate してから Start 25
  19. 監視と運用のルール Connector は基本止めない 止めるなら、アーカイブログ / WAL の保持期間内にすること 監視するもの ソース側 scn_behind

    / bytes_of_redo_mined / SYSAUX / レプリケーションスロット Snowflake 側 最終更新時刻 _SNOWFLAKE_UPDATED_AT 、ラグ 再スナップショットは 手動で テーブル DROP 宛先テーブルとジャーナルを消さないと already exists で FAILED Snowflakeの下流側は、直接テーブルを参照するより、ビューを挟んでおくと影響を抑えら れる 本番前に「停止 → 再開で欠落なく追いつくか」を試験すること 26
  20. 消したつもりになっていないか? パターン 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
  21. 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
  22. まとめ: 時短チェックリスト 始める前 ORGADMINで規約承諾 利用ユーザーの DEFAULT_ROLE は ACCOUNTADMIN 以外に ネットワーク

    (SPCS) EAI 3点の設定 + 後付けなら Runtime 再起動 閉域なら Business Critical + アウトバウンド PrivateLink ソースDB ライセンス・ログ設定・ユーザーは DB 管理者と事前に合意 動いた後 「エラーが出ないデータ欠落」を前提に、監視と停止・再開の試験を 片付け destroy.sh / compute pool / スロット / エンドポイント これから始めるなら gen 2 で、構築手順を SQL として残す 31
  23. 参考資料 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