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
AWS Startup Tech Meetup 関西 #1 の登壇スライド
Search
Alvin Endratno
October 30, 2022
Programming
0
1.9k
AWS Startup Tech Meetup 関西 #1 の登壇スライド
内容は主にAWSのサーバーレスサービス(Lambda、API Gateway、AWS Batch)を活用し、高可用性かつ低コストなサービスを作ることについてお話しました。
Alvin Endratno
October 30, 2022
Tweet
Share
Other Decks in Programming
See All in Programming
Kaigi on Railsに初参加したら、その日にLT登壇が決定した件について
tama50505
0
110
暇に任せてProxmoxコンソール 作ってみました
karugamo
2
730
技術的負債と向き合うカイゼン活動を1年続けて分かった "持続可能" なプロダクト開発
yuichiro_serita
0
150
良いユニットテストを書こう
mototakatsu
8
3.1k
Stackless и stackful? Корутины и асинхронность в Go
lamodatech
0
970
これでLambdaが不要に?!Step FunctionsのJSONata対応について
iwatatomoya
2
3.8k
「Chatwork」Android版アプリを 支える単体テストの現在
okuzawats
0
180
GitHubで育つ コラボレーション文化 : ニフティでのインナーソース挑戦事例 - 2024-12-16 GitHub Universe 2024 Recap in ZOZO
niftycorp
PRO
0
120
useSyncExternalStoreを使いまくる
ssssota
6
1.4k
テストコードのガイドライン 〜作成から運用まで〜
riku929hr
5
950
わたしの星のままで一番星になる ~ 出産を機にSIerからEC事業会社に転職した話 ~
kimura_m_29
0
200
PHPで作るWebSocketサーバー ~リアクティブなアプリケーションを知るために~ / WebSocket Server in PHP - To know reactive applications
seike460
PRO
2
650
Featured
See All Featured
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
111
49k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
127
18k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.5k
How to train your dragon (web standard)
notwaldorf
88
5.7k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
Writing Fast Ruby
sferik
628
61k
How GitHub (no longer) Works
holman
311
140k
Music & Morning Musume
bryan
46
6.2k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Producing Creativity
orderedlist
PRO
342
39k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.2k
Transcript
Baseconnect 株式会社 Endratno Alvin 2022.09.29 サーバーレスを使って⼤量データの処理 を実装したお話をします Copyright © 2022
Baseconnect Inc. All Rights Reserved. Confidential
サーバーレスを使って⼤量データ処理の実装 Endratno Alvin Copyright © 2022 Baseconnect Inc. All Rights
Reserved. Alvin Endratno Baseconnect 株式会社 / Full Stack Engineer フロントエンドから、インフラ( AWS )まで幅広く WEB アプリケーションの開発に携わっています。 2 年前から AWS に興味を持ち始め、資格取得の勉強を始めました。 現在、プロフェッショナルアーキテクトとデブオプスを含む 6 つの AWS 認定資格を取得しています。 Portfolio : alvinend.tech Blog : blog.alvinend.tech SNS
サーバーレスを使って⼤量データ処理の実装 Copyright © 2022 Baseconnect Inc. All Rights Reserved. 会社の
ご紹 介 私 た ちの ⽬的 PURPOSE 会 社 情報 COMPANY 事 業 紹介 Musubu
サーバーレスを使って⼤量データ処理の実装 Endratno Alvin Copyright © 2022 Baseconnect Inc. All Rights
Reserved. 会社概要 COMPANY 会社名 所在地 従業員数 設 ⽴ 資本⾦ 株 主 役 員 Baseconnect 株式会社 京都府京都市中京区壬⽣神明町1-5 230 名(社員/ 役員 75 名・アルバイト155 名) 2017 年 1 ⽉ 17 ⽇ 13 億1912 万円(累計増資額) ・國重侑輝 ・Z Venture Capital ・Genesia Ventures ・ユーザベース ・JAFCO ・East Ventures ・みずほキャピタル ・京都市スタートアップ⽀援ファンド ・オリエントコーポレーション 他 代表取締役 國重侑輝 取締役 野中 崇史 社外取締役 ⼭川 隆義 常勤監査役 尾堂 隆久
サーバーレスを使って⼤量データ処理の実装 Endratno Alvin Copyright © 2022 Baseconnect Inc. All Rights
Reserved. 私たちの⽬的・存在価値 PURPOSE 世界中のデータを繋げることで ダイレクトに必要な情報にアクセス できる世界を作る。 15世紀にグーテンベルクにより活版印刷技術が⽣まれて「書籍」が普及 し、20年前にGoogleが⽣まれて「検索」が普及しました。⼈が何かを知 る⽅法はここ⼗数年変わっていません。重たい本を持ってくるか、キーワー ド検索にヒットしたリンクの⼀覧を1つ1つクリックするか、知⼈に尋ねる かのいずれかです。 Baseconnectは書籍、検索に続く、第3の「知る」インターフェースを創 造します。知る体験を根本から変え、これからの当たり前を発明します。 Baseconnectに課せられたミッションは「世界中のデータを繋げる」こ とです。世界中のデータを繋げ合わせ、構造化して整理し、世界のデータ の中⼼である「Knowledge Base」 を創造します。 そうすることで、世界中の⼈々はダイレクトに必要な情報にアクセスできる ようになります。⼈から何かを教えてもらうようにして知りたいことを「知 る」ことができ、誰もが簡単に安⼼して「知る」ことができます。 新しい「知る」の あたりまえを作る 世界最⼤の データ製造業の会社 情報検索に イノベーションを 世界⼀価値ある会社
サーバーレスを使って⼤量データ処理の実装 Endratno Alvin Copyright © 2022 Baseconnect Inc. All Rights
Reserved. 事業紹介 Musubu まだ会ったことのない「売れる顧客」に出会える 法⼈営業を⽀援する企業情報データベース 通算導⼊ 利⽤社数 社 , 100 000 1 営業リスト 作成サービス No. 全 国 ※ ※ 実施委託先:⽇本トレンドリサーチ2020 年5 ⽉実施:サイトのイメージ調査 法⼈営業のための クラウド型企業情報データベース。 企業情報 140 万件以上(事業所を含む)の情報量。 拠点情報や求⼈データも提供。 ターゲティングからアプローチ、 顧客分析までオールインワン。 「最新のテクノロジー × ⼈⼒」 による優れたデータ品質。 1 2 3 4
Copyright © 2022 Baseconnect Inc. All Rights Reserved. ここから本編です サーバーレスを使って⼤量データ処理の実装
サーバーレスを使って⼤量データ処理の実装 Endratno Alvin Copyright © 2022 Baseconnect Inc. All Rights
Reserved. パートナー企業様からの連携を受けての求⼈検索の実現 Musubu では元々インターネットから取得した 求⼈データを提供していた 1 2 パートナー企業様が保有する求⼈データを 「Musubu 」のデータベースと連携することになった より鮮度の⾼い求⼈情報での検索や 新たな検索軸での検索が可能となった 求⼈データの更新頻度や全求⼈を 網羅する点に課題があった 3 4
サーバーレスを使って⼤量データ処理の実装 Endratno Alvin Copyright © 2022 Baseconnect Inc. All Rights
Reserved. やろうとした事 パートナー企業様 VPC Public subnet ? Private subnet Musubu Database 特定した 求⼈データを保存 求⼈データ を送る 1 2 データは Baseconnect が作成した API Endpoint に送信されます どの会社の求⼈なのかを特定する必要があります ( 求⼈と企業の名寄せ処理) 求⼈情報のデータは、パートナー企業様から週 1 回送られます(数万件) 企業が特定された求⼈データは Musubu のデータベースに追加する
サーバーレスを使って⼤量データ処理の実装 Copyright © 2022 Baseconnect Inc. All Rights Reserved. はどうしたか?
サーバーレスを使って⼤量データ処理の実装 Endratno Alvin Copyright © 2022 Baseconnect Inc. All Rights
Reserved. MUST WANT いつでもリクエストを 受け取れる API エンドポイント コストはできるだけ低い 定期的に実⾏する処理 ⾼い可⽤性を持つ 1 1 2 2 運⽤の要件を整理
サーバーレスを使って⼤量データ処理の実装 Endratno Alvin Copyright © 2022 Baseconnect Inc. All Rights
Reserved. 実現案1: EC 2を使う パートナー企業様 VPC Public subnet Private subnet Musubu Database 特定した 求⼈データを保存 EC2 求⼈データ を送る 1 2
サーバーレスを使って⼤量データ処理の実装 Endratno Alvin Copyright © 2022 Baseconnect Inc. All Rights
Reserved. 実現案1: EC2 を使⽤する場合の問題 問題点 1 2 3 利⽤頻度が低いため、 EC2 のランニングコストが無駄になる EC2 が落ちれば、パートナー企業様に迷惑をかける EC2 を増やしたくない(管理するのが難しい)
サーバーレスを使って⼤量データ処理の実装 Endratno Alvin Copyright © 2022 Baseconnect Inc. All Rights
Reserved. 実現案2: Serverless 問 題 点 1 1 1 利⽤頻度が低いため、 EC2 のランニングコストが無駄になる EC2 が落ちれば、パートナー企業様に迷惑をかける EC2 を増やしたくない(管理するのが難しい) アクセス数が少ない 可⽤性 Serverless ! 設計する際に2つの構成にわけて考えました。 Endpoint データ処理 パートナー企業様からのリクエストを 受け取る役割をもつ 求⼈データを Musubu に⼊れる役割をもつ
サーバーレスを使って⼤量データ処理の実装 Endratno Alvin Copyright © 2022 Baseconnect Inc. All Rights
Reserved. 実現案2:サーバーレス API Endpoint 部分の構成 パートナー企業様 API Gateway Lambda S3 パートナー企業様からのデータは APIGateway で処理する Lambda は求⼈データを S3 に保存 API Gateway で認証を⾏う S3 に保存されたデータを後ほど処理する(処理⽅法は後述)
サーバーレスを使って⼤量データ処理の実装 Endratno Alvin Copyright © 2022 Baseconnect Inc. All Rights
Reserved. 実現案2:データ処理を設計する際に考えること 1 2 3 S3 に求⼈データが csv 形式で保存されている 求⼈データは数万件程度 処理にかかる時間は少なくとも3時間(Lambda ですぐに処理できない) Endpoint 部分と処理部分は分けた⽅がいい!
サーバーレスを使って⼤量データ処理の実装 Endratno Alvin Copyright © 2022 Baseconnect Inc. All Rights
Reserved. AWS Batch AWS でバッチジョブを 実⾏するためのサービスです Fargate を使⽤してコンテナを 実⾏することができます(Fargate Spot も) 環境構築は簡単 1 3 2 A. B. C. Docker Images Shell Scripts Linux Executeable
サーバーレスを使って⼤量データ処理の実装 Endratno Alvin Copyright © 2022 Baseconnect Inc. All Rights
Reserved. 開発プロセス:処理コードを書く ローカルに Docker イメージを構築する 処理の内容を書く コンテナを作り、その中でコードを 実⾏できることを確認する 01 02 03 求⼈データ データベースに⼊れる MusubuのDBにある 企業に名寄せをして 紐づく Musubuで公開 CSV 求⼈1 企業A 企業C 企業B 求⼈1 求⼈2 求⼈2
サーバーレスを使って⼤量データ処理の実装 Endratno Alvin Copyright © 2022 Baseconnect Inc. All Rights
Reserved. 実現案2:データ処理内容 S3 から CSV を読み込む CSV から求⼈情報を抽出する 求⼈情報を元に紐づく会社データが存在するかを アルゴリズムを⽤いて確認する 確認できた求⼈データを Musubu データベースに投⼊する 01 02 03 04 求⼈データ データベースに⼊れる MusubuのDBにある 企業に名寄せをして 紐づく Musubuで公開 CSV 求⼈1 企業A 企業C 企業B 求⼈1 求⼈2 求⼈2
サーバーレスを使って⼤量データ処理の実装 Endratno Alvin Copyright © 2022 Baseconnect Inc. All Rights
Reserved. 開発プロセス: AWS 上で動かす AWS Elastic Container Registry で イメージリポジトリを作成し、プッシュしました AWS Batch のジョブ定義を作成して、 イメージは(1)の ECR に指定する EventBridge を使ってジョブを定期的に実⾏ 01 02 03 VPC S3 Private subnet Musubu Database AWS Batch Event Bridge 1 1 2 3 2 3 求⼈データを取得する 定期的に実⾏する 特定できた求⼈データ保存
サーバーレスを使って⼤量データ処理の実装 Endratno Alvin Copyright © 2022 Baseconnect Inc. All Rights
Reserved. 全体アーキテクチャー図 パートナー企業様 API Gateway Lambda S3 Private subnet Musubu Database AWS Batch VPC
サーバーレスを使って⼤量データ処理の実装 Endratno Alvin Copyright © 2022 Baseconnect Inc. All Rights
Reserved. デプロイ& CICD Github から CodePipeline を通して CodeBuild をトリガーする CodeBuild で Docker のイメージをビルドし、 ECR にプッシュする 次の AWS Batch 処理は、 最新のイメージを使って実⾏される 1 2 3
サーバーレスを使って⼤量データ処理の実装 Endratno Alvin Copyright © 2022 Baseconnect Inc. All Rights
Reserved. 今回のアーキテクチャーで良かったこと 並⾏処理ができる(今回紹介しなかった処理もあり、同時実⾏している) プロセスごとに Batch のジョブを分けることで、処理⼯程を分割できる 他の AWS サービスとの連携が容易に実現できる いつ API リクエストが来てもデータ処理を深夜に実⾏できる AWS のランニングコストが低い 後⼯程の処理が失敗した場合に、前⼯程の処理を再実⾏する必要がない AWS Secrets Manager の値を環境変数として利⽤できる 例:名寄せ処理とデータベース投⼊の処理を分けることで、投⼊処理で失敗したら投⼊処理だけ再実⾏すればいい AWS EventBridge でジョブを直接トリガーできる
サーバーレスを使って⼤量データ処理の実装 Endratno Alvin Copyright © 2022 Baseconnect Inc. All Rights
Reserved. EC2 とのコスト⽐較(1ヶ⽉単位) AWS Batch を使⽤する場合 ECR AWS Batch API Gateway Lambda S3 合 計 $ 5.13 $ 0.10 $ 4.98 約 $ 0 約 $ 0 $ 0.03 1 GB Repo 2vCPU, 4GB RAM * 4回 * 10時間(1週間に1回) 4 リクエスト 4 リクエスト - サービス ⾒積もり 説 明 EC2 を使⽤する場合 EC2 合 計 $ 39.16 $ 39.16 常時起動 t3.medium サービス ⾒積もり
サーバーレスを使って⼤量データ処理の実装 Endratno Alvin Copyright © 2022 Baseconnect Inc. All Rights
Reserved. 今回のアーキテクチャーで残った課題 学習コストが⾼い、チーム内で引き継ぎにくい リソースのコード化までできなかったこと(CloudFormation など) 使⽤するサービスの数が多い AWS API Gateway AWS Batch AWS Lambda AWS Event Bridge
Copyright © 2022 Baseconnect Inc. All Rights Reserved. まとめ サーバーレスを利⽤することで、
実⾏頻度の低いサービスでも⾼可⽤性と低コストを 両⽴したサービスを構築することができました
Baseconnect 株式会社 Endratno Alvin 2022.09.29 Copyright © 2022 Baseconnect Inc.
All Rights Reserved. Confidential ご清聴ありがとうございました