LoginSignup
17
14

More than 1 year has passed since last update.

【データ基盤構築/Snowflake/AWS】自分で1から簡単なデータ基盤・データパイプラインを作ってみる

Last updated at Posted at 2023-04-30

今回の課題

今後、業務でAWSとSnowflakeでデータ基盤を構築・運用していくことになるので、
勉強のために、自分で1からデータ基盤・データパイプラインの作成に挑戦してみた。

後から見返しやすいように、どのように作成したのかまとめてみる。

どのようにデータ基盤を作ったのか

以下のアーキテクチャ図のように作ってみた。
image.png

データ基盤作成手順

どのようにデータ基盤を作成したのか、手順に沿ってまとめてみた。
手順毎の詳細は、以前に別の記事で書いているので、そちらの記事も手順毎に記載した。

1)EC2上でRDSを動かす&RDSにデータを入れる

下記の記事を参考にしながら、以下を実装。

  • VPCを構築し、その中にEC2とRDSを立てる。
  • 今回は、ターミナルからAWSにSSH接続して、create tableinsertなどを実行してRDSにデータを入れるようにした。

※注意:Snowflakeのリージョンがca-central-1なので、AWSのリージョンもca-central-1に合わせる。

2)LambdaとEventBridgeを使ってRDSからS3に定期的にデータをロードする仕組みを実装する

下記の記事に書いたように以下を実装。
これで、RDSのデータが毎日S3にロードされるようになる。

  • RDSのスナップショットをロードするためのS3バケットを作成。
  • RDSからS3にスナップショットをロードするためのLambda関数が、EventBridgeで1日一回特定の時間に実行されるように設定。

※注意:Snowflakeのリージョンがca-central-1なので、AWSのリージョンもca-central-1に合わせる。

3)S3にRDSのスナップショットがロードされたらSnowpipeでSnowflakeにデータがロードされるように実装する

下記の記事に書いたように以下を実装。
Snowpipeを作成することで、RDSからS3にスナップショットがロードされたのとほぼリアルタイムに、
S3からSnowflakeのテーブルにデータがロードされる。

  • Snowflakeでストレージ統合を作成。
  • Snowflakeで外部ステージを作成。
  • SnowflakeでS3のデータをロードして格納するためのテーブルを作成。
  • SnowflakeでSnowpipeを作成。

4)dbtとGitHubを連携してクエリ履歴の管理ができるように実装する

下記の記事のように、dbtをGitHubを連携してクエリ履歴の管理を行えるように実装する。

記事では、S3からSnowflakeにデータをロードするクエリ履歴のGitHubにPushしているが、
S3からSnowflakeのデータのロードは、dbtを使わなくてもSnowpipeで実施可能なので、
Snowflake上でETLを行ったクエリの管理を行うようにする。

5)Redashでデータを可視化する

簡単なデータ基盤ができたので、
下記の記事に書いたようにEC2でRedashを立てて、データを可視化してみた。

まとめ

以上の流れでデータ基盤を作成することができた。
他にも、dbtAWS CloudformationAWS DMSで色々と試してみたので、
以下のおまけの見出しでまとめてみた。

おまけ

上記以外で、dbtやAWS Cloudformationで試してみたことのまとめ

dbtで試してみたこと

cloudformationで試してみたこと

AWS DMSで試してみたこと

※Lambda + EventBridgeでなくても、RDSからS3へのデータのロードができた。

17
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
14