Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

201909 mediado.go 駆け出しGopherの初めてのバッチ設計で学んだこと

419 views

Published on

LambdaとStep functionsでバッチ処理を作ってみた話

Published in: Technology
  • Be the first to comment

  • Be the first to like this

201909 mediado.go 駆け出しGopherの初めてのバッチ設計で学んだこと

  1. 1. 駆け出しGopherの 初めてのバッチ設計で 学んだこと By こじけん
  2. 2. 自己紹介 小島健太郎(こじけん) ・株式会社メディアドゥ ・2019年新卒入社 ・電子書店コミなびの開発
  3. 3. メディアドゥ ってなにしてるの?
  4. 4. メディアドゥがやっていること 買う 電子書店ごとに 本の情報を提供 本の情報を提供 電子書店 電子書籍の取次
  5. 5. メディアドゥも電子書店を運営している
  6. 6. 電子書店がやることは
  7. 7. 日々、新刊が発売されたり キャンペーンで本の価格が変わるので
  8. 8. 電子書店の持つDBの本情報を毎日更新する { book_id: 1 book_name: “ワンピース93巻” price: 400 thumbnail_path:“https://thumbnail_url” } サムネ画像はメディ アドゥ が用意して いる 1日多くて2000件
  9. 9. 問題
  10. 10. 問題 サムネ画像が重い
  11. 11. つまり電子書店を運営するには
  12. 12. バッチが必要
  13. 13. AWS で実現したい
  14. 14. 考えられた選択肢 ・AWS Batch ・SQS + Lambda ・Step Functions + Lambda
  15. 15. AWS Batch
  16. 16. バッチだし AWS Batch使えばなんとかなるっしょ
  17. 17. AWS Batchの使い方間違ってます Solution Architect
  18. 18. そもそもバッチの管理とは
  19. 19. バッチジョブ管理システムは二種類ある ジョブのプロセスを制御 ジョブを複数リソースに割り当てる AWS Black Belt Online Seminar 2017 AWS Batch より AWS Batchはこっち JobA JobB JobC JobA JobB JobAJobB キューイング
  20. 20. SQS + Lambda
  21. 21. SQS + Lambda 次に呼び出すLambdaをLambda自身で指定 しないといけない
  22. 22. バッチ処理に使うLambdaたちを いっぺんに管理したいなー
  23. 23. そこで
  24. 24. Step Functions
  25. 25. Step Functions 次に呼ぶリソース(Lambdaなど)の指定 、並行処理、エラー時の分岐処理など Step Functionsで定義できる (Lambdaのコード量も減少)
  26. 26. JSON形式の言語でワークフローを定義 単一の処理を行うよ リソースはこれだよ 出力結果はこのキー で取得できるよ 次はこのステートの 処理を行ってね リトライはこんな感 じでやってね
  27. 27. State Typeは7種類ある Task 単一の処理を行う Wait 指定した時間の間、処理をストップする Pass 入力をそのまま出力へ渡す Parallel 並列に処理を実行する Choice 一定の条件により分岐する Fail 実行結果を失敗として終了する Succeed 実行結果を成功として終了する
  28. 28. 料金 ステップが遷移した回数に対する課金 4000回/月まで無料 それ以降は 約2.7円/1000回 今回の条件だったら無料で使えそう
  29. 29. Step Functionsで使えるサービス dynamoDB SNS ECS SQS Glue Lambda Batch SageMaker
  30. 30. ということで
  31. 31. バッチを設計してみました
  32. 32. バッチ処理のアーキテクチャ ◯秒待ってから
  33. 33. Step Functionsのワークフロー
  34. 34. 百聞は一見にしかずということで
  35. 35. Step Functionsを動かしてみます
  36. 36. GoでLambdaを作っている時に はまったこと
  37. 37. Goのバイナリに .envファイルが含まれない
  38. 38. Goで作ったLambdaで環境変数を取得する方法 ・AWSコンソールで設定して、os.Getenv ・envファイルも含めてzipファイルを作ってgodotenv.Load() ・statik、packr等のアセットツールを使ってtmpFileにenvファイル の内容を出力し、godotenv.Load(tmpFile.Name()) バイナリファイル .env .envが入ったフ ォルダ box tmpFile Loadする box.Find()
  39. 39. まとめ ・Step FunctionsとLambdaを組み合わせることで Lambdaを簡単に管理できる ・環境変数の扱いには注意
  40. 40. ご清聴ありがとうございました

×