はじめに
初めまして。
駆け出しデータエンジニアのotoyaです。
タイトルにもある通り新卒で入社して2年目(開発部門配属されて1年目)です。
当時のインフラ
下記画像のようになってました。
ただこれにはいくつも問題があり・・
元データの問題
- 似たようなDBが存在するが、使い分けがわからない
- PostgresやMySQLやClickhouseなどがEC2上に乗っているのですが、versionが古すぎる
どのDBか忘れましたが、explain(実行計画)がサポートされてないとエラーが出た時は痺れました笑
ETLの問題
- digdagサーバーが会社にあるmac miniの上に乗っているが、UPSなどがなく停電するとサーバーが落ちる
- 何故かgithubに書いてあるコードとmac mini上にあるコードが違う
- ci/cdに対応していない
DWHの問題
- データレイクもBigQuery上においてあり無駄なコストが発生している
- scheduled queryも使わないのに動いているものがある → 無駄なコスト発生
- ここもテーブル定義がまとめられていないから手探り状態
- 誰が何のために作ったデータかがわからず消せない
こうした問題があるだけでなく解決するための壁も多く
- データの社内活用のPJがほぼ動いていないため重要性も薄れている
- データ基盤を見ている人が私だけで頼れる人がいない
- 別会社のDBとの関連もありコミュニケーションに時間がかかる
- 新卒の私だけで決められない問題が多い
と当時は絶望していました笑笑
解決策
問題については①重要度の高さ②リスクの大きさ③変更や処理の容易さをベースに優先順位群を作成しました。
1st phase(兎に角"やばい"を排除するphase)
- サーバーをmacmini環境から脱却する(リスクが大きい)
- Bigqueryに溜まっている無駄なデータやscheduled Queryを削除(ビジネスインパクトが大きい)
2nd phase(理想状態に近づけるphase)
- DWHやDLを再構築
データソースがAWS上にあるため、DLやDWHをAWS上に置いておきたい(転送コストの減少) - データテーブルなどのルールを設定
- ETLの再検討
- データ活用アクションの設定
- テーブル定義書の作成
3rd phase(最適状態を作り出すphase)
- 元データ格納DBのリプレイス
- CI/CDの構築
得た知見
このPJ(まだ終わってませんが笑)を通して沢山のことを学びました。
ここでは皆さんにお伝えしたい部分だけ紹介します。
- 誰が何のために使う基盤なのかは絶対に考えるべき
DWHやDLの選定をする際にそれぞれの特徴はあるものの、結局どれにする?が分からずじまいでした。使うのは営業の人も含めるのか、アジリティはどれくらい求めた方がいいのか等は、考えておくと今後本当に楽になります。 - レガシーシステムは短期的な視野を想定しない方がいい
解読に時間がかかります。
私の場合ドキュメントがない + 担当者もいない状況だったので、"誰に聞けばいいの?", "これってどういうこと?"がたくさん詰まっているレガシーシステムでした。
刷新前の解読の時間が異常にかかるのでこの時間を最初にたっぷり取った方がいいと思います。 - IaCの偉大さ
AWS Cloud Development Kit(CDK)を使っているのですが、IaCを最初にしておくと環境のリプレイスが異常に簡単でした。
初学者でもわかったのでCDKおすすめです! - 兎に角いろんな人を巻き込むことが大事
自分一人だと出来ることが制限されていたので上司や他部書のインフラ関連の有識者を巻き込むというのを続けました - 説得のための会議かブレストのための会議かをはっきり分ける
最初にはっきりしておかないと、下記のような事象が発生するので決めておいた方がいいと思います。
・会議中に説得できず次回に持ち越し
・意見がまとまらず次回に持ち越し - 外部コミュニティに積極的に参加
理想状態がどうなのかを考えるには視野が狭いと感じたので積極的に外部コミュニティに参加しました。自社を知らない第三者の意見が貰えるのは自分の考えを整理するためにも非常に重要でした。
今の状態と今後の展望
今は1st phaseが終わって2nd phaseでまだ苦労しているところになっています。
ちなみに2nd phaseではこのような構成にしようと思っています。
ここ最近は頼れる先輩方も入社してきて進めやすくはなっていますが、
まだまだ途中なので頑張ります!
最後に
新卒で同じような状況にいた方の励みや学びに繋がれば幸いです!
まだまだ時間がかかる作業なので、また新しい苦労や発見が出てきたら適宜発信していこうと思います。
これからよろしくお願いしますー!