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

マイクロサービス×データ統合で実現する利用状況の全貌

Avatar for t.t t.t
March 06, 2025

 マイクロサービス×データ統合で実現する利用状況の全貌

Avatar for t.t

t.t

March 06, 2025

More Decks by t.t

Other Decks in Technology

Transcript

  1. 目次 1. 自己紹介 2. 今日お話ししたいこと 3. 背景 / 要件 4.

    アーキテクチャ全体像 5. 工夫点 6. データ出力 / 活用事例 / AWS料金 7. 今後の改善ネタ 8. 最後に 2
  2. 自己紹介 名前 • 辻 翼(つじ つばさ) 所属 • エムオーテックス株式会社 開発本部

    業務 • 「LANSCOPE エンドポイントマネージャー クラウド版」の新機能開発・要望対応 好きなAWSサービス • Amazon Athena(S3も少し) • Amazon Bedrock(勉強中) プライベート • 時々、バスケで体動かしてます。 • 日々、育児・犬の世話に 奮闘中… 3
  3. 要件 1. データ収集・分析時の本番環境への影響は最小限にしないといけない → DynamoDBの[S3へのエクスポート]機能とS3の[レプリケーション]機能を活用して、 収集による負荷やオペミスによるデータ削除を考慮した設計にする 2. 弊社はマイクロサービスを採用しているため、複数のストレージにデータが散在している → データをS3に集約させ、複数のストレージデータをAthenaで結合して出力する

    3. 今後、どの機能の利用状況データを必要とされるのかわからない → 処理コードを汎用的に作成し、定義ファイルのみの編集で収集対象を増やせるようにする 4. お客様が所有するデータ、個人情報データなどは省かないといけない → 定義ファイルにテーブル単位ではなく、列レベルで記載できるようにする 8
  4. 工夫点 〜定義ファイルを使用したデータ収集〜 • 定義ファイルの情報をもとにデータ収集を行う • 定義 ファ イルに は取得 対象の

    「A WS サー ビス名 」 、「 リソ ース名 」 、「 項目 名」 を記載 する • これにより、 • 収集 対象が 増え た際の修 正コス トを削減 • お 客様が 所有す るデータ 、個 人情報 データの 排除を 実現 S3 へのエクスポート クロスアカウント レプリケーション 収集対象 10 定義ファイル { "data": [ { "service": "DynamoDB", "name": "hoge_table", "columns": [ "id1", "id2", "id3" ] } ] } 定義ファイル
  5. 工夫点 〜データ結合〜 • 収集対象の複数のストレージデータをS3に集約 • s3://{バケット}/{収集日(yyyy-MM-dd)}/{収集対象のテーブル名}/xxx.json • Glue Crawlerを用いて、テーブルと列定義を自動作成 •

    あとは、Athena クエリで結合(JOIN)することで、複数テーブル間を跨いでデータ出力が可能に S3 へのエクスポート 収集対象 クロスアカウント レプリケーション 13 定義ファイル
  6. データ出力 • 個別のストレージに保管されていた「企業情報」、「契約情報」、「デバイス情報」を結合して出力してみた。 • これにより、関係情 報を一元 的に閲覧できるようになった。 WITH companies AS

    ( SELECT companies.* FROM "database"."companies" companies INNER JOIN "database"."latest_date" latest ON companies.date = latest.latest_date AND latest.table_name = 'companies‘ ), contracts AS ( SELECT contracts.* FROM "database"."contracts" contracts INNER JOIN "database"."latest_date" latest ON contracts.date = latest.latest_date AND latest.table_name = 'contracts‘ ), devices AS ( SELECT devices.company_id as company_id, COUNT(devices.id) as count FROM "database"."devices" devices INNER JOIN "database"."latest_date" latest ON devices.date = latest.latest_date AND latest.table_name = 'devices‘ GROUP BY devices.company_id ) SELECT companies.id as “企業ID”, companies.name as "企業名", contracts.plan as "契約プラン", COALESCE(devices.count, 0) as "デバイス数" FROM companies INNER JOIN contracts ON companies.id = contracts.company_id INNER JOIN devices ON companies.id = devices.company_id ORDER BY devices.count DESC; 企業情報 テーブル 契約情報 テーブル デバイス情報 テーブル ※ 開発環境のダミーデータを使用 14
  7. 活用事例 早速、他部門の方々に 新機能の利用状況分析として使っていただき、製品改善に繋げることができた 運用している (登録数が2以上) 48% 試しに使ってみただけ (登録数が1) 23% まだ使ってない

    (登録数0) 29% 使用率 要望していた お客様 登録数 AAA株式会社 0 BBB株式会社 0 CCC株式会社 0 DDD株式会社 0 EEE株式会社 0 FFF株式会社 0 GGG株式会社 3 HHH株式会社 2 本機能に気づいていない 可能性がある ① 全体の状況を俯瞰 ② 状況の深堀り ③ 原因追求 新機能のお知らせを 表示する機能を改善 ④ アクション 15
  8. AWS料金 収集にかかる金額: 10.98円 / 回 • Glue: $0.07/回 • DynamoDBのS3へのエクスポート:

    $0.002/回 • S3への書き込み: 50ファイル $0.0002/回 • 合計: $0.0722/回 ストレージにかかる金額: 380円 / 月 • 収集データが最大保存期間の90日分存在すると仮定 • S3: 100GB $2.5/月 Athena検索にかかる金額: 1.52円 / 回 • 2つのDynamoDB + 1つのOpenSearchの1日分のデータを検索すると仮定 • Athena: スキャン量2GB $0.01/回 2025/02/18時点の為替レート: 1ドルあたり152.02円 16
  9. 今後の改善ネタ 利用状況データの取得範囲拡大 • 未対応ストレージ(S3など)も取得対象にできるように改良する • DynamoDB, OpenSearchの取得対象を増やす データのビジュアライゼーション • QuickSightなどのBIツールを活用して、誰でも簡単に利用状況を可視化できるようにする

    ドメイン駆動設計の境界づけられたコンテキストに関する課題の解消 • 境界づけられたコンテキストを跨いで、データを収集している • コンテキスト間をつなぐインターフェースを用意してデータ連携するなど見直しが必要 17
  10. 宣伝 弊社のテックブログ(MOTEX TECH BLOG)にも載せております。 19 屋 内 , テ ー

    ブ ル , 座 る , 項 目が 含 ま れ て い る 画 像 AI に よ っ て 生 成 さ れ た コ ン テ ン ツ は 間 違 っ て い る 可 能 性 が あ り ま す 。 グ ラ フ ィ カ ル ユ ー ザ ー イ ン タ ー フ ェ イ ス , ア プ リ ケ ー シ ョ ン AI に よ っ て 生 成 さ れ た コ ン テ ン ツ は 間 違 っ て い る 可 能 性 が あ り ま す 。