Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWS Startup Tech Meetup 関西 #1 の登壇スライド

AWS Startup Tech Meetup 関西 #1 の登壇スライド

内容は主にAWSのサーバーレスサービス(Lambda、API Gateway、AWS Batch)を活用し、高可用性かつ低コストなサービスを作ることについてお話しました。

Alvin Endratno

October 30, 2022
Tweet

Other Decks in Programming

Transcript

  1. サーバーレスを使って⼤量データ処理の実装 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
  2. サーバーレスを使って⼤量データ処理の実装 Copyright © 2022 Baseconnect Inc. All Rights Reserved. 会社の

    ご紹 介 私 た ちの ⽬的 PURPOSE 会 社 情報 COMPANY 事 業 紹介 Musubu
  3. サーバーレスを使って⼤量データ処理の実装 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 ・みずほキャピタル ・京都市スタートアップ⽀援ファンド ・オリエントコーポレーション 他    代表取締役 國重侑輝 取締役   野中 崇史 社外取締役 ⼭川 隆義 常勤監査役 尾堂 隆久
  4. サーバーレスを使って⼤量データ処理の実装 Endratno Alvin Copyright © 2022 Baseconnect Inc. All Rights

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    実⾏頻度の低いサービスでも⾼可⽤性と低コストを 両⽴したサービスを構築することができました
  24. Baseconnect 株式会社 Endratno Alvin 2022.09.29 Copyright © 2022 Baseconnect Inc.

    All Rights Reserved. Confidential ご清聴ありがとうございました