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

Snowflake x Terraformに自動テストを導入した話

Snowflake x Terraformに自動テストを導入した話

KDDI SnowVIllage

November 17, 2023
Tweet

More Decks by KDDI SnowVIllage

Other Decks in Technology

Transcript

  1. 2 ©2023 ARISE analytics 目次 2 背景と目的 1 3 4

    自己紹介 事例紹介 さいごに
  2. 3 ©2023 ARISE analytics 目次 2 背景と目的 1 3 4

    自己紹介 事例紹介 さいごに
  3. 4 ©2023 ARISE analytics 背景と目的 背景  DMP基盤をSnowflakeで構築・運 用中 

    Snowflakeの各種オブジェクトは Terraformで構築/構成管理をして いる  その品質担保に自動テストツールとし てpytestを導入した 本日の目的  Snowflake x Terraformでの構成 に自動テストツールとしてpytestを導 入した事例について、経緯や実装概 要、今後の展望を共有する
  4. 5 ©2023 ARISE analytics 目次 2 背景と目的 1 3 4

    自己紹介 事例紹介 さいごに
  5. 6 ©2023 ARISE analytics 自己紹介 株式会社ARISE analytics Team Lead 田畑

    幹 経歴  Web企業 • Python x Django x AWSのWebアプリ開発をメインで担当。 • Reactを使用したSPA開発にも参画。  ARISE analytics プロジェクト • 店頭端末でのレコメンド機能PoC • 会員向け特典サービスの分析 • Terraform, Kubernetes Kubernetesを使用したアプリ展開・管理基盤 のPoC • BigQueryを中心としたGAアクセスログ集約GCP基盤の構築 • Snowflakeを用いたDMP基盤構築 趣味・好きなもの 旅行、バイク、日本酒、ダイビング
  6. ©2023 ARISE analytics 7 ARISE analytics とは? • 社名 •

    資本構成 • 営業開始 • 所在地 • 役員 • 社員数 : 株式会社ARISE analytics : KDDI 85% Accenture 15% : 2017年4月1日 : 渋谷区 渋谷2-21-2 渋谷ヒカリエ31F : 代表取締役社長 家中 仁 / KDDI : 152名/業務委託・派遣含め約500名 ※2023年9月1日現在 会社概要 事業領域 国内最大級350名を超えるデータサイエンティストが活躍
  7. 8 ©2023 ARISE analytics 目次 2 背景と目的 1 3 4

    自己紹介 事例紹介 さいごに  なぜ自動テストを導入することになったのか  なぜpytestを選んだのか  どのように実装したのか  実装後はどうなったか/どうしていきたいか
  8. ©2023 ARISE analytics 9 前提 main release develop PRDアカウント STGアカウント

    DEVアカウント  SnowflakeはPRD, STG, DEVの3面構成(アカウントレベ ルで分離)  Snowflakeのオブジェクトは基 本Terraformで管理  Terraformコードのリポジトリは GitHubで管理  リポジトリはGit-flowで開発  各環境に対応するブランチに対し てPR作成をするとplan, マージ をするとapplyされる  apply後、実際にSnowsightに て対象環境にアクセスし、挙動を 確認する terraform init terraform plan terraform apply Terraformリポジトリ GitHub Actions 動作 検証
  9. ©2023 ARISE analytics 10 なぜ自動テストを導入することになったのか ※ TerraformにてクラウドプロバイダやSaaSプロバイダ、その他のAPIとやり取りするために利用するプラグインのこと 手作業でのテストがつらい  試験対象のリソースが大量なので、手作業での確認工数がかかる

     商用環境は、セキュリティ上の理由から、オフィス内の特定の区画で、特定 端末を用いての操作が必要なので、ハードルが高い Snowflake向けの Terraformプロバイダ(※)の バージョンアップが控えていた  プロバイダのバージョンアップをしないと、発生する不具合や作成できないリ ソースがある  プロバイダのバージョンアップをすると、ロールに紐づくGRANT設定に関する Terraformコード修正を書き換える必要が生じる
  10. ©2023 ARISE analytics 11 なぜpytestを選んだのか Pythonと Snowflakeの親和性  Pythonコネクタが利用可能 

    Snowparkも利用可能  Snowflake公式のブログにもpytest x Snowflakeの利用事例があった チームメンバーの スキルマッチ  チーム内にPython&pytestの利用経験があるメンバーがいた
  11. ©2023 ARISE analytics 12 どのように実装したのか main release develop PRDアカウント STGアカウント

    DEVアカウント terraform init terraform plan terraform apply Terraformリポジトリ GitHub Actions 動作 検証  SnowflakeはPRD, STG, DEVの3面構成(アカウントレベ ルで分離)  Snowflakeのオブジェクトは基 本Terraformで構成管理  Terraformコードのリポジトリは GitHubで管理  リポジトリはGit-flowで開発  各環境に対応するブランチに対し てPR作成をするとplan, マージ をするとapplyされる  apply後、実際にSnowsightに て対象環境にアクセスし、挙動を 確認する
  12. ©2023 ARISE analytics 13 どのように実装したのか main release develop PRDアカウント STGアカウント

    DEVアカウント  pytestをGitHub Actions の1ステップとして定義  各環境でterraformを実行 後にSnowflake上でオブ ジェクトが構築された状態で pytestを実行 terraform init terraform plan terraform apply Terraformリポジトリ GitHub Actions pytest
  13. ©2023 ARISE analytics 14 どのように実装したのか  Snowflakeへの接続処理を、セッションスコープ のfixtureで定義 • fixtureとは、テストにおける事前処理/事後

    処理を定義できる機能 • 事前処理・事後処理をどの単位で実施する かをscopeという引数で設定可能  テストケースごとにロールをリセットすることを強制す るため、PUBLICロールに切り替える処理を、関 数スコープのfixtureで定義  pytestの中で実行されるクエリを区別できるよう、 接続時にセッションのパラメータとして、クエリタグ =PYTESTの値をセット。
  14. ©2023 ARISE analytics 15 どのように実装したのか  GRANTでの権限設定周りをメインにpytestを実 装  テーブルに対してのSELECTやウェアハウスに対し

    てのUSEなど、テストでの実行に問題がないもの については、機能ロールベースで実際に実行して 動作確認を行う  parametrizeデコレータを利用することで、同 一テストケースを、異なる複数のパラメータで実行 可能
  15. ©2023 ARISE analytics 16 どのように実装したのか  タスクやストアドプロシージャなどは、実際にテスト 内で実行すると、データに変更が入り、テストの事 後処理が煩雑になるため、実行はしない。 

    アクセスロールへの権限付与確認 x アクセスロー ルが機能ロールに継承されていることの確認 の掛 け合わせで機能ロールへの権限確認を実施する。
  16. ©2023 ARISE analytics 17 どのように実装したのか  タスクやストアドプロシージャなどは、実際にテスト 内で実行すると、データに変更が入り、テストの事 後処理が煩雑になるため、実行はしない。 

    アクセスロールへの権限付与確認 x アクセスロー ルが機能ロールに継承されていることの確認 の掛 け合わせで機能ロールへの権限確認を実施する。
  17. ©2023 ARISE analytics 18 実装後はどうだったか/どうしていきたいか あいう Try  テスト観点/方法のブラッシュアップ! 

    pytestの並列数増加!  snowparkやsnowflake-vcrpyなどの活用に よる処理高速化! Keep  手作業工数の大幅削減!  デグレ無しでTerraformプロバイダバージョン アップ完遂!(約200のGRANT設定変更) Problem  テストコードに実装不備があると、バグは発生し うる…  テストコードの実行時間は長い…
  18. 19 ©2023 ARISE analytics 目次 2 背景と目的 1 3 4

    自己紹介 事例紹介 さいごに
  19. ©2023 ARISE analytics 20 ARISE analytics とは? • 社名 •

    資本構成 • 営業開始 • 所在地 • 役員 • 社員数 : 株式会社ARISE analytics : KDDI 85% Accenture 15% : 2017年4月1日 : 渋谷区 渋谷2-21-2 渋谷ヒカリエ31F : 代表取締役社長 家中 仁 / KDDI :152名/業務委託・派遣含め約500名 ※2023年9月1日現在 会社概要 事業領域 国内最大級350名を超えるデータサイエンティストが活躍
  20. ©2023 ARISE analytics 21 ARISE analytics とは? • 社名 •

    資本構成 • 営業開始 • 所在地 • 役員 • 社員数 : 株式会社ARISE analytics : KDDI 85% Accenture 15% : 2017年4月1日 : 渋谷区 渋谷2-21-2 渋谷ヒカリエ31F : 代表取締役社長 家中 仁 / KDDI :152名/業務委託・派遣含め約500名 ※2023年9月1日現在 会社概要 事業領域 国内最大級350名を超えるデータサイエンティストが活躍 >たばにき これは再掲ですかね。掲載しない予で すかね。 →再掲です!最後ダメ押しでアピー ル予定です! ARISE analyticsはデータアーキテクト職を積極採用中です。 SnowflakeやAWS/GCPを用いたデータ基盤に取り組みたい方々や、 大規模なデータ処理基盤の実装に関わりたい方々など、 ご興味ある方はぜひ採用ページをご覧ください!