Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Serverlessで構成するEvent Driven Data Platform
Search
Kazuki Maeda
December 23, 2020
Programming
0
33
Serverlessで構成するEvent Driven Data Platform
Kazuki Maeda
December 23, 2020
Tweet
Share
More Decks by Kazuki Maeda
See All by Kazuki Maeda
20240416_devopsdaystokyo
kzkmaeda
1
240
20240321_生成AI時代のDevOps
kzkmaeda
2
740
20240222_LangChain_ver0.1.0_LCEL
kzkmaeda
3
180
20240201_クラウド利用料を 半額にするために取り組んだ10+のコト
kzkmaeda
3
6.1k
20231027_Bedrock勉強会
kzkmaeda
3
920
20231011_LangChainコントリビュートのすゝめ
kzkmaeda
0
1k
LangChain Japan MeetUp 2023-07-20
kzkmaeda
0
360
2023 AWS Dev Day コミュニティ紹介LT
kzkmaeda
0
91
Deep Dive into Momento with LangChain
kzkmaeda
1
260
Other Decks in Programming
See All in Programming
JavaScript Closure
asoluka
0
710
Try creating your own orderedmap
kazamori
1
260
Elm Form Validation
bkuhlmann
0
520
Three ways to use AI on Android: The Good, the Bad and the Ugly
marxallski
0
110
Ruby GitHub Packages
bkuhlmann
0
650
Azure OpenAI Serviceのプロンプトエンジニアリング入門
tomokusaba
3
930
PostmanでAPIの動作確認が楽になった話
h455h1
0
190
Compose-View Interop in Practice (mDevCamp 2024)
stewemetal
0
170
Komplexe Oberflächen mit SVG und der Web Animation API
joergneumann
0
680
Netty Chicago Java User Group 2024-04-17
sullis
0
210
SwiftUIで使いやすいToastの作り方 / How to build a Toast system which is easy to use in SwiftUI
lovee
3
190
Exploring the Implementation of “t.Run”, “t.Parallel”, and “t.Cleanup”
akarin
1
140
Featured
See All Featured
Documentation Writing (for coders)
carmenintech
60
4k
Done Done
chrislema
178
15k
The MySQL Ecosystem @ GitHub 2015
samlambert
244
12k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
242
1.2M
Mobile First: as difficult as doing things right
swwweet
217
8.6k
Building a Scalable Design System with Sketch
lauravandoore
457
32k
A Modern Web Designer's Workflow
chriscoyier
689
190k
The Language of Interfaces
destraynor
151
23k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
188
16k
Design by the Numbers
sachag
274
18k
Making Projects Easy
brettharned
109
5.5k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
34
8.9k
Transcript
Serverlessで構成する Event Driven Data Platform SREマネージャー 前田
自己紹介 • 前田 和樹( @kzk_maeda ) • SRE Manager at
Progate • ギターやベースなど弾きます • 週末は2人の子どもに忙殺されてます
1. About Company 2. About System 3. About Data Platform
4. About Future 5. Closing Index
About Company 何をしている会社?
オンラインプログラミングサービス 初心者でも学びやすい学習環境をご用意。 日本語版と英語版を展開しています。 イラスト中心のスライドで学ぶ プログラムを書いて学ぶ 紙の本よりも直感的で、動画よりも学びやすい「スライド学習」を採用しました。 自分のペースで学習できること、復習しやすいことが強みです。 実際にプロダクトを作りながら学ぶから、使えるスキルが身につきます。 ブラウザ上でコードを書いて結果も確認。すぐにプログラミングが実践できます。 |
About Our Service 概要
スライド 演習 スライド 演習 達成 達成
累計ユーザー数推移 日本 over 1,450,000人 (2020/12/01 時点) 単位:人
累計ユーザー数推移 インド (2020/12/01 時点) over 200,000人 単位:人
累計ユーザー数推移 インドネシア (2020/12/01 時点) over 70,000人 単位:人
About System どうやって創っている?
Architecture概要
複数のAWSアカウントをOrganizationで管理 - Production / Staging / Base(認証用) Architecture概要
基本のWeb機能は ALB + EC2(ASG) + Redis + Aurora(MySQL) Github +
CircleCIでRolling Update Architecture概要
ユーザーのコード実行環境として EC2でホストしたDocker Swarmクラスタを構成 - chatbotからcluster毎B/G Deploy可能 Architecture概要
ProductionのSwarm Clusterは複数Regionに分散 Architecture概要
Application周りのログはfluentd+KDF -> S3 監視はNewRelicに統合中 Architecture概要
使用技術 • Frontend ◦ React / React Native • Server-Side
◦ Ruby on Rails / Node.js • Infrastructure ◦ AWS(ALB, EC2, Fargate, RDS, ElastiCache, Lambda, APIGW, KDF, etc...) ◦ Terraform / Serverless Framework ◦ Docker / Docker Swarm • Other ◦ Github / DockerHub / Circle CI / Slack / Asana / DocBase
About Data Platform データ基盤について
対象とするデータ 更新頻度 分析活用 埋蔵金 • 活用用途を見出せてないデータ Master Data • Users
• Lessons • Languages Transactional Data • UserCodes • LessonHistories • Logs
データ要件 • 1日ごとの全件同期 • センシティブなデータの取り扱い ◦ 特定データには認可された人のみがアクセス可能な状態 • BI(redash)からクエリ
Data Platform Architecture
Data Platform Architecture RDS上のデータを DataCatalog化する
Data Platform Architecture • RDS SnapshotのS3Export機能を活用 ◦ parquet形式のファイルをS3に定期Upload可能 ◦ RDSに対してread負荷がかからない
• Data PipelineのレイヤはDatalake的な思想で構成 ◦ 収集→蓄積→変換→分析 ◦ 各レイヤをイベントドリブンで接続 • DataCatalogをセキュリティレベル別に分離 ◦ Sensitiveなデータとそうではないデータ ◦ 同一DataSourceからPipeline上で複数のCatalogを生成
Data Platform Architecture 収集 蓄積 変換 分析 DataPipelineをDatalake思想で構成 収集→蓄積→変換→分析 各Layerはイベントドリブン(SNS/SQS
+ Lambda)で接続
Data Platform Architecture Event RDSのSnapshot関連のイベントトリガー は、RDS Event Subscription→SNS SNSのSubscriberとしてLambdaが起動 Event
Event
Data Platform Architecture Sensitive Data Normal Data Sensitive DataのLayerとNormal Dataの
Layerで構成 ここもイベント接続
詰まった点1 RDS Event Subscriptionの仕様
なにが起きたか • Snapshotの作成とSnapshot Exportが同じEvent SubscriptionのEvent Categoryに属するので、どちらも同じSNS TopicにSubscribeされる • 別のEventとして単一責務のLambdaをSubscriberに設定する予定だった が、それぞれのEventを同一Lambda内で処理する必要性が
なにが起きたか 同じEvent Subscriptionから 通知される
どうしたか • 後続のLambdaを同一Functionとし、SNSのMessageによって実行する処理 を分岐 ◦ snapshot created イベントに対しては snapshot export
を実施 ◦ export task completed イベントに対しては後続の GlueJobをKick • 管理上関数を分けたかったが、全体をterraformで管理することとResource Groupを有効にすることで許容
詰まった点2 Snapshot Exportの仕様
なにが起きたか • RDS Snapshot ExportタスクによってSnapshotがS3にExportされる際、 Export Task名のPrefix配下にSnapshotが配置される • 後続処理でExportされたSnapshotデータを特定する際に、Export Task名と
して何が指定されたかを正確に把握する必要がある ◦ yyyy-mm-ddなどで値を決めると、リトライが発生した際のハンドリングが面倒
なにが起きたか ここで決めたTask名を こっちで正確に知る必要がある
どうしたか • Export Task実行時に決めた名前をSQSにメッセージング • 後続のLambdaの中でSQSにキューイングされたメッセージから設定された Export Task名を取得し、S3上のPathを把握 • GlueJob
/ Crawlerの実行を容易にするため、/latest 配下にcopy
どうしたか Task名をQueuing SQSからTask名を取得→/latestにcopy
詰まった点3 Data Pipelineのモニタリング
なにが起きたか • StepFunction管理にしなかったので、Pipelineのどこまで実行されているのか などのモニタリングが困難 • X-Rayでかっこよくいけるやろと思ってたけど、机上で調べてる限りやりたいこ との実現は難しそう ※理想
どうしたか • PipelineのStep毎にDynamoDBに状況を書き込むようにした ◦ Export Task名をPrimary Keyとして利用 • エラーで落ちた場合はエラーメッセージもDDBに格納されるので、どこまで実 行されてなぜ落ちたのかの大体の情報はDDBで完結
Step毎に書き込み エラー時はメッセージも
その他の知見 • 大まかなアーキテクチャはAWSのAsk an expertを活用してレビューしてもら えた。ライトに相談できる場としてすごく助かる。 • AWSから毎日のようにアナウンスされる便利機能アップデートは銀の弾丸で はない。自分たちのシステムに落とし込む上では考えたり実装したりするポイ ントがたくさん出てくる
• AWSサービスのアイコンを並べて設計した気になってるおじさんにならないよ うに気を付ける
About Future 今後の展望
データの更なる活用 更新頻度 分析活用 埋蔵金 • 活用用途を見出せてないデータ Master Data Transactional Data
活用ラインの 拡大 多様なトランザクショ ンデータ取得
データの更なる活用 データ活用の 多面化・組織化
新しい技術の活用 • 先日リリースされたマネージドAirFlow(MWAA)で後半のジョブネットはワーク フロー化できるかもしれないので、折を見て検証したい • 今日発表された Glue Elastic View との親和性など??
◦ 作ってるやつほぼ捨てられる・・・・???
Closing 最後に
結論 • RDSのsnapshot export機能を使えば、Master DataをDatalakeに簡単に格 納することが可能 • だと思っていた時期がありました。 • イベントドリブンなパイプラインのモニタリングはX-Ray
• だと思っていた時期がありました(要追加検証)。 • マネージドサービスを実要件での活用に落とし込んで行くには、結局はエンジ ニアリングが必要。 • AWS支援体制は積極的に活用していくのがいい
エンジニア積極採用中 • Progateではエンジニアを積極採用しています • プログラミング教育事業に興味がある、グローバルサービスに携わりたい、な ど、気になるポイントあれば是非ご連絡ください • 詳しくは採用サイトへ ◦ https://prog-8.com/about/careers
TechBlogはじめました • Progate TechBlogを開設しました • Advent Calendar期間を活用し、積極的に発信していきます • 詳しくはBlog ◦
https://tech.prog-8.com/
ご清聴ありがとうございました