今回の課題
今後、業務でAWSとSnowflakeでデータ基盤を構築・運用していくことになるので、
勉強のために、自分で1からデータ基盤・データパイプラインの作成に挑戦してみた。
後から見返しやすいように、どのように作成したのかまとめてみる。
どのようにデータ基盤を作ったのか
データ基盤作成手順
どのようにデータ基盤を作成したのか、手順に沿ってまとめてみた。
手順毎の詳細は、以前に別の記事で書いているので、そちらの記事も手順毎に記載した。
1)EC2上でRDSを動かす&RDSにデータを入れる
下記の記事を参考にしながら、以下を実装。
- VPCを構築し、その中にEC2とRDSを立てる。
- 今回は、ターミナルからAWSにSSH接続して、
create table
やinsert
などを実行して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を立てて、データを可視化してみた。
まとめ
以上の流れでデータ基盤を作成することができた。
他にも、dbt
やAWS Cloudformation
、AWS DMS
で色々と試してみたので、
以下のおまけ
の見出しでまとめてみた。
おまけ
上記以外で、dbtやAWS Cloudformationで試してみたことのまとめ
dbtで試してみたこと
cloudformationで試してみたこと
AWS DMSで試してみたこと
※Lambda + EventBridgeでなくても、RDSからS3へのデータのロードができた。