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

グローバルIoTスタートアップにおける2年強に及ぶちょうど良いデータ基盤への歩み / Global IoT Startup Data Infrastructure

グローバルIoTスタートアップにおける2年強に及ぶちょうど良いデータ基盤への歩み / Global IoT Startup Data Infrastructure

Hiroshi Oda

August 26, 2022
Tweet

More Decks by Hiroshi Oda

Other Decks in Technology

Transcript

  1. 1
 自己紹介
 Oda Hiroshi / @hi1280
 Global Mobility Service株式会社
 エンジニアリングマネージャ兼インフラエンジニア

    
 Udemy講師
 AWS / Kubernetes / Terraform / データエンジニアリング 
 好きなAWSサービス:Amazon EKS、Amazon ECS 
 

  2. 2
 車両販売店 エンドユーザー 金融機関 MCCS 車両販売 MCCS装着 ローン MCCSを利用した FinTechサービス

    支払 車両のエンジン遠隔 起動制御・モニタリング GMSのFinTechサービス MCCSとMSPFによる車両エンジン遠隔起動制御により、金融機関のデフォルトリスクを低減 より多くの人にファイナンス機会を創出 エンドユーザーの支払いが滞った際にエンジン遠隔制御を実施 エンドユーザーの支払いを促進し、万が一支払いができなくなった場合、車両回収を確実に行える仕組みを構築
  3. 7
 データ基盤を作る動機
 Data Platform Guide - 事業を成長させるデータ基盤を作るには #DataEngineeringStudy / 20200715

    - Speaker Deck より引用 データ基盤をSSOT: Single Source of Truth(信頼できる唯一の情報源)とする 

  4. 20
 IoTデータを収集する
 方法
 ストリームデータの処理に適したKinesis Data Firehoseを利用する
 特徴
 • Lambdaによるデータ変換処理
 •

    データ分析に適したデータ形式への変換処理
 • データ処理前のデータをバックアップ
 • 特定の送信先(S3など)へのデータ書き込み

  5. 26
 データ変換方法
 データ変換にはAthenaを使用
 AthenaでS3上のデータをクエリするには Glueデータカタログが必要
 必要に応じて、パーティション分割する
 パーティションを作成する場合にはパーティ ション射影の機能が便利
 CREATE EXTERNAL

    TABLE `alb_logs_partition_projection`( … TBLPROPERTIES ( 'has_encrypted_data '='false', 'projection.enabled '='true', 'projection.day.digits '='2', 'projection.day.interval '='1', 'projection.day.range '='1,31', 'projection.day.type '='integer', 'projection.month.digits '='2', 'projection.month.interval '='1', 'projection.month.range '='1,12', 'projection.month.type '='integer', 'projection.year.digits '='4', 'projection.year.interval '='1', 'projection.year.range '='2020,2025', 'projection.year.type '='integer', 'storage.location.template '='s3://your-alb-logs-director y/AWSLogs/<ACCOUNT-ID>/elasticloadbalancing/ap-northeast -1/${year}/${month}/${day} ' ) ALBのアクセスログ向けパーティション射影設定例
  6. 27
 データ変換方法
 AthenaのCREATE TABLE AS SELECT(CTAS)でSELECTクエリを使用してテーブル とデータを作成する
 INSERT INTOでデータを追加する
 CREATE

    TABLE table_name [ WITH (property_name = expression [, ...] ) ] AS query [ WITH [ NO ] DATA ] INSERT INTO destination_table SELECT select_query FROM source_table_or_view CTASの構文 INSERT INTOの構文
  7. 33
 データアクセス制御方法
 Redashのアクセス権限機能を使用する
 管理者
 • 全権限を保有
 • データ基盤構築・運用メンバー用
 データ分析者
 •

    分析者が所属する拠点のデータに対してのみクエリを作成可能
 • 各拠点の承認フローに基づいて本権限を付与する
 データ閲覧者
 • 参照権限のみ
 • 社員用Googleアカウント保有者

  8. 42
 データ処理のエラー監視
 やり方
 • スケジュール実行のデータ処理をStep Functions内で完結させる
 • Step FunctionsメトリクスにCloudWatch Alarmsを設定する


    Step Functionsメトリクスの内容
 • ExecutionsFailed
 • LambdaFunctionsFailed
 • ServiceIntegrationsFailed
 ◦ ECS、CodeBuildによるデータ処理が対象 
 ◦ 個別処理ごとに監視はできないが、気づけないよりは良い 
 

  9. 43
 データ不整合の監視
 PythonプログラムからAthenaでSQLを実行してデータを監視
 
 
 - description: データ存在チェック sql: |

    SELECT * FROM default.alb_logs limit 1 sql/sample.yaml 詳しくはこちら https://hi1280.hatenablog.com/entry/2021/11/01/180000
  10. 44
 データ定義変更の監視
 GitHub Actionsでマイグレーションファイルに対してのPRを監視
 GitHubにある各アプリケーションのリポジトリに適用
 name: database migration notice on:

    pull_request: branches: - main paths: - "src/migration/**" … .github/workflows/db-migration-notice.yml .github/workflows/db-migration-notice.yml Slackの通知 詳しくはこちら https://hi1280.hatenablog.com/entry/2022/07/10/210000
  11. 45
 その他工夫したこと
 開発・運用体験
 • データ処理フローを一本化、べき等性を保証
 • コンテナ、Lambdaのデプロイを自動化
 • データソースとなるCSVの取り込みをGoogle Apps

    Script(GAS)で自動化
 • テスト環境作成
 • リファクタリング
 • データの復旧手順書を作成
 • Athenaでのデータ型変換方法をドキュメント化
 データ型変換方法について詳しくはこちら https://hi1280.hatenablog.com/entry/2021/10/02/220747
  12. 60
 教育内容
 勉強会
 SQLの教育を中心に実施
 個別指導
 ソフトウェアエンジニアが1on1でSQLの書き方を徹底 指導
 お世話しすぎない程度に実施
 勉強会カリキュラム 


    • SQL文の基礎
 ◦ 第1回
 ▪ SQLとは?
 ▪ SELECT句
 ▪ WHERE句
 ◦ 第2回
 ▪ WHERE句
 ▪ ORDER BY、LIMIT 
 ◦ 第3回
 ▪ 集計
 ◦ 第4回
 ▪ 結合
 ◦ 第5回
 ▪ サブクエリ
 • 第6回
 ◦ Redashの理解
 ▪ グラフの作り方
 ▪ パラメーターの使い方 
 • 第7回
 ◦ 社内データの理解 
 カリキュラムを作るにあたり、Progate様のSQLレッスンの内容を 参考にさせて頂きました󰢛