Slide 1

Slide 1 text

Baseconnect 株式会社 Endratno Alvin 2022.09.29 サーバーレスを使って⼤量データの処理 を実装したお話をします Copyright © 2022 Baseconnect Inc. All Rights Reserved. Confidential

Slide 2

Slide 2 text

サーバーレスを使って⼤量データ処理の実装 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

Slide 3

Slide 3 text

サーバーレスを使って⼤量データ処理の実装 Copyright © 2022 Baseconnect Inc. All Rights Reserved. 会社の ご紹 介 私 た ちの ⽬的 PURPOSE 会 社 情報 COMPANY 事 業 紹介 Musubu

Slide 4

Slide 4 text

サーバーレスを使って⼤量データ処理の実装 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 ・みずほキャピタル ・京都市スタートアップ⽀援ファンド ・オリエントコーポレーション 他    代表取締役 國重侑輝 取締役   野中 崇史 社外取締役 ⼭川 隆義 常勤監査役 尾堂 隆久

Slide 5

Slide 5 text

サーバーレスを使って⼤量データ処理の実装 Endratno Alvin Copyright © 2022 Baseconnect Inc. All Rights Reserved. 私たちの⽬的・存在価値 PURPOSE 世界中のデータを繋げることで ダイレクトに必要な情報にアクセス できる世界を作る。 15世紀にグーテンベルクにより活版印刷技術が⽣まれて「書籍」が普及 し、20年前にGoogleが⽣まれて「検索」が普及しました。⼈が何かを知 る⽅法はここ⼗数年変わっていません。重たい本を持ってくるか、キーワー ド検索にヒットしたリンクの⼀覧を1つ1つクリックするか、知⼈に尋ねる かのいずれかです。 Baseconnectは書籍、検索に続く、第3の「知る」インターフェースを創 造します。知る体験を根本から変え、これからの当たり前を発明します。 Baseconnectに課せられたミッションは「世界中のデータを繋げる」こ とです。世界中のデータを繋げ合わせ、構造化して整理し、世界のデータ の中⼼である「Knowledge Base」 を創造します。 そうすることで、世界中の⼈々はダイレクトに必要な情報にアクセスできる ようになります。⼈から何かを教えてもらうようにして知りたいことを「知 る」ことができ、誰もが簡単に安⼼して「知る」ことができます。 新しい「知る」の あたりまえを作る 世界最⼤の データ製造業の会社 情報検索に イノベーションを 世界⼀価値ある会社

Slide 6

Slide 6 text

サーバーレスを使って⼤量データ処理の実装 Endratno Alvin Copyright © 2022 Baseconnect Inc. All Rights Reserved. 事業紹介 Musubu まだ会ったことのない「売れる顧客」に出会える 法⼈営業を⽀援する企業情報データベース 通算導⼊ 利⽤社数 社 , 100 000 1 営業リスト 作成サービス No. 全 国 ※ ※ 実施委託先:⽇本トレンドリサーチ2020 年5 ⽉実施:サイトのイメージ調査 法⼈営業のための クラウド型企業情報データベース。 企業情報 140 万件以上(事業所を含む)の情報量。 拠点情報や求⼈データも提供。 ターゲティングからアプローチ、 顧客分析までオールインワン。 「最新のテクノロジー × ⼈⼒」 による優れたデータ品質。 1 2 3 4

Slide 7

Slide 7 text

Copyright © 2022 Baseconnect Inc. All Rights Reserved. ここから本編です サーバーレスを使って⼤量データ処理の実装

Slide 8

Slide 8 text

サーバーレスを使って⼤量データ処理の実装 Endratno Alvin Copyright © 2022 Baseconnect Inc. All Rights Reserved. パートナー企業様からの連携を受けての求⼈検索の実現 Musubu では元々インターネットから取得した 求⼈データを提供していた 1 2 パートナー企業様が保有する求⼈データを 「Musubu 」のデータベースと連携することになった より鮮度の⾼い求⼈情報での検索や 新たな検索軸での検索が可能となった 求⼈データの更新頻度や全求⼈を 網羅する点に課題があった 3 4

Slide 9

Slide 9 text

サーバーレスを使って⼤量データ処理の実装 Endratno Alvin Copyright © 2022 Baseconnect Inc. All Rights Reserved. やろうとした事 パートナー企業様 VPC Public subnet ? Private subnet Musubu Database 特定した 求⼈データを保存 求⼈データ を送る 1 2 データは Baseconnect が作成した API Endpoint に送信されます どの会社の求⼈なのかを特定する必要があります ( 求⼈と企業の名寄せ処理) 求⼈情報のデータは、パートナー企業様から週 1 回送られます(数万件) 企業が特定された求⼈データは Musubu のデータベースに追加する

Slide 10

Slide 10 text

サーバーレスを使って⼤量データ処理の実装 Copyright © 2022 Baseconnect Inc. All Rights Reserved. はどうしたか?

Slide 11

Slide 11 text

サーバーレスを使って⼤量データ処理の実装 Endratno Alvin Copyright © 2022 Baseconnect Inc. All Rights Reserved. MUST WANT いつでもリクエストを 受け取れる API エンドポイント コストはできるだけ低い 定期的に実⾏する処理 ⾼い可⽤性を持つ 1 1 2 2 運⽤の要件を整理

Slide 12

Slide 12 text

サーバーレスを使って⼤量データ処理の実装 Endratno Alvin Copyright © 2022 Baseconnect Inc. All Rights Reserved. 実現案1: EC 2を使う パートナー企業様 VPC Public subnet Private subnet Musubu Database 特定した 求⼈データを保存 EC2 求⼈データ を送る 1 2

Slide 13

Slide 13 text

サーバーレスを使って⼤量データ処理の実装 Endratno Alvin Copyright © 2022 Baseconnect Inc. All Rights Reserved. 実現案1: EC2 を使⽤する場合の問題 問題点 1 2 3 利⽤頻度が低いため、 EC2 のランニングコストが無駄になる EC2 が落ちれば、パートナー企業様に迷惑をかける EC2 を増やしたくない(管理するのが難しい)

Slide 14

Slide 14 text

サーバーレスを使って⼤量データ処理の実装 Endratno Alvin Copyright © 2022 Baseconnect Inc. All Rights Reserved. 実現案2: Serverless 問 題 点 1 1 1 利⽤頻度が低いため、 EC2 のランニングコストが無駄になる EC2 が落ちれば、パートナー企業様に迷惑をかける EC2 を増やしたくない(管理するのが難しい) アクセス数が少ない 可⽤性 Serverless ! 設計する際に2つの構成にわけて考えました。 Endpoint データ処理 パートナー企業様からのリクエストを 受け取る役割をもつ 求⼈データを Musubu に⼊れる役割をもつ

Slide 15

Slide 15 text

サーバーレスを使って⼤量データ処理の実装 Endratno Alvin Copyright © 2022 Baseconnect Inc. All Rights Reserved. 実現案2:サーバーレス API Endpoint 部分の構成 パートナー企業様 API Gateway Lambda S3 パートナー企業様からのデータは APIGateway で処理する Lambda は求⼈データを S3 に保存 API Gateway で認証を⾏う S3 に保存されたデータを後ほど処理する(処理⽅法は後述)

Slide 16

Slide 16 text

サーバーレスを使って⼤量データ処理の実装 Endratno Alvin Copyright © 2022 Baseconnect Inc. All Rights Reserved. 実現案2:データ処理を設計する際に考えること 1 2 3 S3 に求⼈データが csv 形式で保存されている 求⼈データは数万件程度 処理にかかる時間は少なくとも3時間(Lambda ですぐに処理できない) Endpoint 部分と処理部分は分けた⽅がいい!

Slide 17

Slide 17 text

サーバーレスを使って⼤量データ処理の実装 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

Slide 18

Slide 18 text

サーバーレスを使って⼤量データ処理の実装 Endratno Alvin Copyright © 2022 Baseconnect Inc. All Rights Reserved. 開発プロセス:処理コードを書く ローカルに Docker イメージを構築する 処理の内容を書く コンテナを作り、その中でコードを 実⾏できることを確認する 01 02 03 求⼈データ データベースに⼊れる MusubuのDBにある 企業に名寄せをして 紐づく Musubuで公開 CSV 求⼈1 企業A 企業C 企業B 求⼈1 求⼈2 求⼈2

Slide 19

Slide 19 text

サーバーレスを使って⼤量データ処理の実装 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

Slide 20

Slide 20 text

サーバーレスを使って⼤量データ処理の実装 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 求⼈データを取得する 定期的に実⾏する 特定できた求⼈データ保存

Slide 21

Slide 21 text

サーバーレスを使って⼤量データ処理の実装 Endratno Alvin Copyright © 2022 Baseconnect Inc. All Rights Reserved. 全体アーキテクチャー図 パートナー企業様 API Gateway Lambda S3 Private subnet Musubu Database AWS Batch VPC

Slide 22

Slide 22 text

サーバーレスを使って⼤量データ処理の実装 Endratno Alvin Copyright © 2022 Baseconnect Inc. All Rights Reserved. デプロイ& CICD Github から CodePipeline を通して CodeBuild をトリガーする CodeBuild で Docker のイメージをビルドし、 ECR にプッシュする 次の AWS Batch 処理は、 最新のイメージを使って実⾏される 1 2 3

Slide 23

Slide 23 text

サーバーレスを使って⼤量データ処理の実装 Endratno Alvin Copyright © 2022 Baseconnect Inc. All Rights Reserved. 今回のアーキテクチャーで良かったこと 並⾏処理ができる(今回紹介しなかった処理もあり、同時実⾏している) プロセスごとに Batch のジョブを分けることで、処理⼯程を分割できる 他の AWS サービスとの連携が容易に実現できる いつ API リクエストが来てもデータ処理を深夜に実⾏できる AWS のランニングコストが低い 後⼯程の処理が失敗した場合に、前⼯程の処理を再実⾏する必要がない AWS Secrets Manager の値を環境変数として利⽤できる 例:名寄せ処理とデータベース投⼊の処理を分けることで、投⼊処理で失敗したら投⼊処理だけ再実⾏すればいい AWS EventBridge でジョブを直接トリガーできる

Slide 24

Slide 24 text

サーバーレスを使って⼤量データ処理の実装 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 サービス ⾒積もり

Slide 25

Slide 25 text

サーバーレスを使って⼤量データ処理の実装 Endratno Alvin Copyright © 2022 Baseconnect Inc. All Rights Reserved. 今回のアーキテクチャーで残った課題 学習コストが⾼い、チーム内で引き継ぎにくい リソースのコード化までできなかったこと(CloudFormation など) 使⽤するサービスの数が多い AWS API Gateway AWS Batch AWS Lambda AWS Event Bridge

Slide 26

Slide 26 text

Copyright © 2022 Baseconnect Inc. All Rights Reserved. まとめ サーバーレスを利⽤することで、 実⾏頻度の低いサービスでも⾼可⽤性と低コストを 両⽴したサービスを構築することができました

Slide 27

Slide 27 text

Baseconnect 株式会社 Endratno Alvin 2022.09.29 Copyright © 2022 Baseconnect Inc. All Rights Reserved. Confidential ご清聴ありがとうございました