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.8k
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
GitHub Copilot Tips and Tricks
yuichielectric
26
7.5k
クソコード動画『カプセル化 Mk-II』 で考える 上手くカプセル化できない理由 / encapsulation2
minodriven
11
8k
とにかくHTTP3をライトニングに話す / Anyway, I'll talk to Lightning about HTTP3.
seike460
PRO
0
120
ここ1~2年くらいで 使えるようになった(主要ブラウザーの最新版 がすべて対応した ) ウェブの新機能について ランダムに喋る!
myzkyy
9
6.5k
Swiftの型推論を学ぼう | Let's Learn About Type Inference in Swift
omochi
2
740
自作ソフト(VMagicMirror)がVRMA対応してる話+実装のTips
bakudreameater
0
110
Data Contracts In Practice With Debezium and Apache Flink (Kafka Summit London)
gunnarmorling
2
280
Why 1 + 1 = 2 in Swift?
1plus4
1
250
ドメイン・ファーストで考える問題解決に役立つモデル設計 / Domain First Model Design
suzushin54
1
1.4k
生成 AI の中身を覗いてみよう〜基礎から医療現場での応用まで〜
soh9834
2
770
ONE WEDGE_Company_Information
1wedge
0
180
設計の知識と技能で駆動するソフトウェア開発
masuda220
PRO
18
11k
Featured
See All Featured
The Power of CSS Pseudo Elements
geoffreycrofte
58
4.9k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
113
18k
jQuery: Nuts, Bolts and Bling
dougneiner
57
7.1k
Thoughts on Productivity
jonyablonski
57
3.8k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
219
21k
5 minutes of I Can Smell Your CMS
philhawksworth
199
19k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
501
140k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
18
1.7k
StorybookのUI Testing Handbookを読んだ
zakiyama
10
4.5k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
1
3.3k
Large-scale JavaScript Application Architecture
addyosmani
501
110k
Music & Morning Musume
bryan
39
5.5k
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 ご清聴ありがとうございました