ユーザー企業におけるサーバレスシステムへの移行/JAWS DAYS2018

91929d7fcc6d69bdf9a9da6bd5759089?s=47 marumoto
March 10, 2018

ユーザー企業におけるサーバレスシステムへの移行/JAWS DAYS2018

・JAWS DAYS2018
・東京
・20180310

91929d7fcc6d69bdf9a9da6bd5759089?s=128

marumoto

March 10, 2018
Tweet

Transcript

  1. 1 DAISO INDUSTRIES CO., LTD. ユーザー企業におけるサーバレスシステムへの移⾏ 株式会社⼤創産業 情報システム部 開発1課 課⻑

    丸本 健⼆郎
  2. 会社紹介 DAISO INDUSTRIES CO., LTD. 2 (2017/10現在) 売上4,200億 店舗5,050 商品70,000

    国27
  3. 会社紹介 DAISO INDUSTRIES CO., LTD. 3 売上4,200億 店舗5,050 商品70,000 国27

    (2017/10現在)
  4. 会社紹介 DAISO INDUSTRIES CO., LTD. 4 売上4,200億 店舗5,050 商品70,000 国27

    (2017/10現在)
  5. • ⽒名 丸本 健⼆郎(まるもと けんじろう) • 年齢 37歳 • ⽣まれ

    広島 • 趣味 – スキー 1級 30回/年 – ロードバイク ave 27km/h – ビリヤード C級 – 釣り ⿂探任せ – 料理 休⽇コック – 畑仕事 30分/毎朝 – DIY 外構完成、ウッドデッキ図⾯製作中 • 社歴 Sier(⼤阪)→ 外資(東京)→ ダイソー(広島) ⾃⼰紹介 DAISO INDUSTRIES CO., LTD. 5
  6. 1.(概念編)なぜ、サーバーレスに⾄ったのか 2.(実践編)サーバーレス使ってみた 3.(まとめ)使ってみての感想、できあがったもの アジェンダ 6 DAISO INDUSTRIES CO., LTD. ユーザー企業におけるサーバレスシステムへの移⾏

  7. 7 DAISO INDUSTRIES CO., LTD. 1.(概念編)なぜ、サーバーレスに⾄ったのか

  8. システム開発における課題を 解決するため 1.(概念編)なぜ、サーバーレスに⾄ったのか 8 DAISO INDUSTRIES CO., LTD.

  9. 課題1 ⼤規模システムはイヤ! 1.(概念編)なぜ、サーバーレスに⾄ったのか 9 DAISO INDUSTRIES CO., LTD.

  10. ⼤規模システムはイヤ! DAISO INDUSTRIES CO., LTD. 10 ベンダー システム サーバー 機能

    C 機能 A 機能 B ・システム変更による影響範囲が広い ・テストが⼤きくなる
  11. ⼤規模システムはイヤ! DAISO INDUSTRIES CO., LTD. 11 ベンダー システム サーバー 機能

    C 機能 A 機能 B 特定ベンダーでないと改修できない
  12. ⼤規模システムはイヤ! DAISO INDUSTRIES CO., LTD. 12 ベンダー システム サーバー 機能

    C 機能 A 機能 B システムが⼤きいからだ
  13. ⼤規模システムはイヤ! DAISO INDUSTRIES CO., LTD. 13 システムは⼩さく創ろう ベンダー システム サーバー

    機能 C 機能 A 機能 B
  14. ⼤きいシステム → ⼩さいシステム ⼤規模システムはイヤ! 14 DAISO INDUSTRIES CO., LTD.

  15. 課題2 密結合はイヤ! 1.(概念編)なぜ、サーバーレスに⾄ったのか 15 DAISO INDUSTRIES CO., LTD.

  16. ⼆つのシステムが密接に結びついた状態。 システムどうしが固有のインターフェースに基づいて接続 されているため、⼀⽅が他⽅を容易に取り替えられない状 態をいう。 密結合はイヤ! 16 DAISO INDUSTRIES CO., LTD.

    密結合とは? ⼤辞林より 密接 ⼀⽅にメス 他⽅にもメス
  17. 密結合はイヤ! 17 DAISO INDUSTRIES CO., LTD. 密結合 ⼀⽅にメス 他⽅にもメス 他⽅にもメス

    他⽅にもメス 他⽅にもメス もうメスなんて⼊れれない
  18. 密結合はイヤ! 18 DAISO INDUSTRIES CO., LTD. 疎結合にするには? 密接

  19. 密結合はイヤ! 19 DAISO INDUSTRIES CO., LTD. 疎結合にするには? 連携部分 を 切り出す

    キュー API
  20. 密結合 → 疎結合 密結合はイヤ! 20 DAISO INDUSTRIES CO., LTD.

  21. 課題3 インフラ管理はイヤ! 1.(概念編)なぜ、サーバーレスに⾄ったのか 21 DAISO INDUSTRIES CO., LTD.

  22. インフラ管理はイヤ! DAISO INDUSTRIES CO., LTD. 22 管理対象外 管理対象 全てを管理 オンプレ

    クラウド MIDDLE VM プログラム 建屋 ハード OS 電源 NW ⼟地 ハードの 管理が不要 MIDDLE VM プログラム 建屋 ハード OS 電源 NW ⼟地 MIDDLE VM プログラム 建屋 ハード OS 電源 NW ⼟地 サーバーレス アプリ のみに集中 ビジネス プログラム
  23. オンプレ、クラウド → サーバレス インフラ管理はイヤ! 23 DAISO INDUSTRIES CO., LTD.

  24. 課題4 スケールアップはイヤ! 1­4.(概念編)なぜ、サーバーレスに⾄ったのか 24 DAISO INDUSTRIES CO., LTD.

  25. 処理の考え⽅ DAISO INDUSTRIES CO., LTD. 25 処理したいデータ量 処 理 能

    ⼒ 1h 処理能⼒/1h 3h
  26. 処理の考え⽅ DAISO INDUSTRIES CO., LTD. 26 処理したいデータ量 処 理 能

    ⼒ 1h 処理能⼒/1h 1hで終わらせたい! スケールアップ
  27. 処理の考え⽅ DAISO INDUSTRIES CO., LTD. 27 処理したいデータ量 処 理 能

    ⼒ 1h 処理能⼒/1h 1hで終わらせたい! ×3 スケールアウト
  28. スケールアップはイヤ! DAISO INDUSTRIES CO., LTD. 28 店舗数 ・・・5,050 × 商品数

    ・・・70,000 × 計算⽇数 ・・・45 =15,907,500,000レコード (159億)
  29. スケールアップはイヤ! DAISO INDUSTRIES CO., LTD. 29 処理したいデータ量 スケールアップ

  30. スケールアップはイヤ! DAISO INDUSTRIES CO., LTD. 30 処理したいデータ量 スケールアウト

  31. スケールアップ → スケールアウト 1­4.(概念編)なぜ、サーバーレスに⾄ったのか 31 DAISO INDUSTRIES CO., LTD.

  32. サービスいっぱい・・・ DAISO INDUSTRIES CO., LTD. 32 Compute Amazon EC2 AWS

    Elastic Beanstalk Amazon EFS Amazon Glacier Amazon S3 Storage Database Amazon DynamoDB Amazon ElastiCache Amazon RDS Amazon Redshift Amazon CloudWatch AWS CloudFormation Management Tools Amazon Kinesis Analytics Amazon EMR Developer Tools Amazon API Gateway AWS Step Functions Amazon SWF Application Services Messaging Amazon SES Amazon SQS Amazon SNS Amazon ECS AWS Lambda AWS CloudTrail Amazon ES Amazon CloudSearch AWS CodeCommit AWS CodeDeploy AWS CodeBuild AWS CodePipeline
  33. 振り分けてみた DAISO INDUSTRIES CO., LTD. 33 Amazon EC2 AWS Elastic

    Beanstalk Amazon EFS Amazon Glacier Amazon S3 Amazon DynamoDB Amazon ElastiCache Amazon RDS Amazon Redshift Amazon CloudWatch AWS CloudFormation Amazon Kinesis Amazon EMR Amazon API Gateway AWS Step Functions Amazon SWF Amazon SES Amazon SQS Amazon SNS Amazon ECS AWS Lambda AWS CloudTrail Amazon ES Amazon CloudSearch AWS CodeCommit AWS CodeDeploy AWS CodeBuild AWS CodePipeline スケールアウト型 スケールアップ型
  34. システムを⼩さく、 疎結合で インフラを持たず スケールアウト型で 開発をしよう 概念まとめ 34 DAISO INDUSTRIES CO.,

    LTD.
  35. 35 DAISO INDUSTRIES CO., LTD. 2.(実践編)サーバーレス使ってみた

  36. 参照 ためる チェック 受取 構成図 36 DAISO INDUSTRIES CO., LTD.

    コマンド クエリ 参照更新 POSデータを うける → ためる → つかう
  37. S3 37 DAISO INDUSTRIES CO., LTD.

  38. 38 DAISO INDUSTRIES CO., LTD. ⼀⾔で⾔うと、ファイルシステム

  39. S3 39 DAISO INDUSTRIES CO., LTD. サーバー サーバーレス 冗⻑ バックアップ

    世代管理 バックアップ 完全性 リネーム イベント 検知 サーバーあり、と、サーバーレスで⽐較 標準 標準 標準 標準
  40. S3 40 DAISO INDUSTRIES CO., LTD. ファイル移動が失敗することがある AWS CLI tips

    ? All move ポーリング All move
  41. S3 41 DAISO INDUSTRIES CO., LTD. tips ファイル名を意識しよう 20180310_A 20180310_B

    20180310_C 20180310_D 20180310_E 20180310_F
  42. S3 42 DAISO INDUSTRIES CO., LTD. tips ファイル名を意識しよう 20180310_A 20180310_B

    20180310_C 20180310_D 20180310_E 20180310_F アクセス効率が悪い
  43. S3 43 DAISO INDUSTRIES CO., LTD. tips ファイル名を意識しよう ファイル名 20180310_A

    20180310_B 20180310_C 20180310_D 20180310_E 20180310_F
  44. S3 44 DAISO INDUSTRIES CO., LTD. tips ファイル名を意識しよう ab4j20180310_A 1a6520180310_B

    oeb120180310_C beak20180310_D 3jda20180310_E pm9j20180310_F ハッシュ値 + ファイル名
  45. S3 45 DAISO INDUSTRIES CO., LTD. tips ファイル名を意識しよう ハッシュ値 +

    ファイル名 ab4j20180310_A 1a6520180310_B oeb120180310_C beak20180310_D 3jda20180310_E pm9j20180310_F アクセス効率が良い 定常的に100リクエスト/1秒、瞬間的に800リクエスト/1秒 以上
  46. SQS 46 DAISO INDUSTRIES CO., LTD.

  47. SQS 47 DAISO INDUSTRIES CO., LTD. 疎結合にしよう 処理A キュー 処理B

    クラウドデザインパターン Queuing Chain
  48. SQS 48 DAISO INDUSTRIES CO., LTD. 実⾏保証 処理A 処理B

  49. SQS 49 DAISO INDUSTRIES CO., LTD. 冪等性 確保 複数回うごくことがある tips

  50. SQS 50 DAISO INDUSTRIES CO., LTD. は き だ せ

    る スケーラブル う け と め れ る
  51. ④ ⑤ SQS 51 DAISO INDUSTRIES CO., LTD. 順番保証されない ①

    ② ③ ④ ⑤ ② ③ tips ① ① ② ③ ④ ⑤
  52. SQS 52 DAISO INDUSTRIES CO., LTD. 順番保証されない ① ② ③

    ④ ⑤ ① ② ③ ④ ⑤ 結果整合性で設計する! どうしても順番がいる場合は、FIFOオプション tips
  53. SQS 53 DAISO INDUSTRIES CO., LTD. 拡張を⾒越した設計

  54. SNS 54 DAISO INDUSTRIES CO., LTD. Pub Sub 拡張を⾒越した設計 クラウドデザインパターン

    Fanout イベントを起こす側 イベント処理を⾏う側
  55. Lambda 55 DAISO INDUSTRIES CO., LTD.

  56. Lambda 56 DAISO INDUSTRIES CO., LTD. アプリケーションコードを実⾏するサービス イベント

  57. Lambda 57 DAISO INDUSTRIES CO., LTD. オンプレ クラウドサーバー サーバーレス ⽐較

    EC2 Lamdba
  58. Lambda オンプレ、クラウドサーバー、サーバーレスを⽐較 58 DAISO INDUSTRIES CO., LTD. 処 理 能

    ⼒ 時 24 0 12 6 18 オンプレ ピークにあわせてリソースを確保 想定処理量
  59. 59 DAISO INDUSTRIES CO., LTD. 処 理 能 ⼒ 停⽌

    24 0 12 稼働 スケール アップ/アウト スケール ダウン/イン 6 18 停 ⽌ Lambda オンプレ、クラウドサーバー、サーバーレスを⽐較 クラウドサーバー 想定処理量 時
  60. 60 DAISO INDUSTRIES CO., LTD. イベント駆動でスケーラブル、無駄がない 処 理 能 ⼒

    24 0 12 6 18 Lambda オンプレ、クラウドサーバー、サーバーレスを⽐較 サーバーレス 時
  61. Lambda 61 DAISO INDUSTRIES CO., LTD. オンプレ クラウドサーバー サーバーレス ⽐較

    EC2 Lamdba
  62. start end Lambda 62 DAISO INDUSTRIES CO., LTD. MAX 5分

    tips
  63. start end Lambda 63 DAISO INDUSTRIES CO., LTD. MAX 5分

    時間内に処理できる量をつかむ tips
  64. start end Lambda 64 DAISO INDUSTRIES CO., LTD. MAX 5分

    5分で 終わる ボリューム にカット tips
  65. Lambda 65 DAISO INDUSTRIES CO., LTD. ソース容量 50MB 制限 外部ライブラリ

    Pandas(40MB) tips 別の外部ライブラリ (20MB) もう⼊らない! 解決策・・・⾒つかってません。。
  66. DynamoDB 66 DAISO INDUSTRIES CO., LTD.

  67. データベース DynamoDB 67 DAISO INDUSTRIES CO., LTD. RDS Dynamo 特性

    AICD (並列と相性悪い) 結果整合性 (並列と相性が良い) データ モデル テーブル キー・バリュー コスト ストレージ I/O ストレージ キャパシティユニット
  68. データベース DynamoDB 68 DAISO INDUSTRIES CO., LTD. RDS Dynamo 特性

    AICD (同時コネクション数が少) 結果整合性 (同時コネクション数が多い) データ モデル テーブル キー・バリュー コスト ストレージ I/O ストレージ キャパシティユニット tips
  69. 書き込みキャパ DynamoDB 69 DAISO INDUSTRIES CO., LTD. 処理したいコ×5 tips 書き込みできたコ×3

    書き込みまちのコ×2 Lambda5分制約 タイムアウトエラー
  70. 書き込みキャパ DynamoDB 70 DAISO INDUSTRIES CO., LTD. お⾦で解決 書き込みできたコ×3 書き込みまちのコ×2

    tips
  71. 書き込みキャパ DynamoDB 71 DAISO INDUSTRIES CO., LTD. このようなコを 発⽣させない仕掛け tips

  72. 書き込みキャパ DynamoDB 72 DAISO INDUSTRIES CO., LTD. Lamdba同時起動数を制御し キャパシティ超えを 起こさせない

    tips
  73. DynamoDB 73 DAISO INDUSTRIES CO., LTD. 同時実⾏数 制御前 同時実⾏数 制御後

    書き込みキャパ上限で、 Lamdbaがエラー多発 書き込みキャパ以下でDynamoが稼働
  74. 開発⼿法 74 DAISO INDUSTRIES CO., LTD.

  75. コーディング環境 IDE 75 DAISO INDUSTRIES CO., LTD.

  76. IDE 76 DAISO INDUSTRIES CO., LTD. ⽐較 ローカルスペックに依存 or or

  77. IDE 77 DAISO INDUSTRIES CO., LTD. ターミナル [CLI、git、linuxコマンド] ローカル プロジェクト

    フォルダ ソース⼀覧 実際の画⾯
  78. –ソース世代管理 –ソースレビュー ソース管理 78 DAISO INDUSTRIES CO., LTD.

  79. ソース管理 79 DAISO INDUSTRIES CO., LTD. プルリク(ソースレビュー)でナレッジ共有

  80. ソース管理 80 DAISO INDUSTRIES CO., LTD. ツリー⾒たいときはSourceTreeを別途⽴ち上げ

  81. CI/CD + cloudformation 81 DAISO INDUSTRIES CO., LTD. デプロイの⾃動化 CFn未対応のものがある

    (ex.Lamdba同時実⾏数) tips
  82. CI/CD + cloudformation 82 DAISO INDUSTRIES CO., LTD. AWS CLI

    デプロイの⾃動化 CFn未対応のものがある (ex.Lamdba同時実⾏数) tips circleCIで「CFn→CLI」
  83. 全体 開発イメージ 83 DAISO INDUSTRIES CO., LTD. 本番環境 本番 ⾃動

    デプロイ ⾃動 テスト master 83 検証環境 総合テスト ⾃動 デプロイ ⾃動 テスト Release/ ~~~ 開発環境 結合テスト ⾃動 デプロイ ⾃動 テスト develop 実験環境 環境テスト ⾃動 デプロイ ⾃動 テスト Push Feature/ ~~~ 単体 テスト Commit 改修 プルリク プル リク
  84. 3.(まとめ)使ってみての感想、できあがったもの 84 DAISO INDUSTRIES CO., LTD.

  85. アプリ チーム インフラ チーム サーバーあり 1 1 サーバーレス 3.(まとめ)使ってみての感想 DAISO

    INDUSTRIES CO., LTD. 85 苦労した?? 2 初モノはなんでも苦労する 0.1
  86. 3.(まとめ)使ってみての感想 DAISO INDUSTRIES CO., LTD. 86 アプリ チーム インフラ チーム

    サーバーあり 1 1 サーバーレス 0.1 苦労した?? → 今はどう? 0.8 ・制約があるから、迷わない ・優秀な先⽣がいっぱい
  87. アプリ インフラ サーバーあり 70点 70点 サーバーレス 3.(まとめ)できあがったもの DAISO INDUSTRIES CO.,

    LTD. 87 創られたシステムの出来は? 90点 クラウドのメリットを簡単に、⼤きく享受 90点
  88. おわり 88 DAISO INDUSTRIES CO., LTD. AWSで開発を推進中 ⼀緒に仕事しませんか! 連絡、お待ちしております。 grp_system_recruit@daisojapan.com