RecoChoku tech night #09 -reinvent2018報告会-

A9534f725dee09f1f0177fc68ab4e16c?s=47 recochoku
December 12, 2018

RecoChoku tech night #09 -reinvent2018報告会-

2018年12月12日のRecoChoku tech night #09での登壇内容です。

A9534f725dee09f1f0177fc68ab4e16c?s=128

recochoku

December 12, 2018
Tweet

Transcript

  1. RecoChoku Tech Night #09 - re:Invent 参加レポート - 小林 真弓

    海津 純平 福治 菜摘美 岡崎 拓哉
  2. ALB Support for Lambdaを 試してみました 株式会社レコチョク 小林 真弓

  3. 自己紹介 小林 真弓(コバヤシ マユミ) • 2017年 新卒入社(2年目) • 事業システム部 システム・アーキテクトグループ

    • 社内ツールの開発(2017/10~) • 新規プロジェクトのWeb開発に携わりはじめています • AWS初心者 • サーバレスでの開発はしたことないですが、今回のre:Inventをキッカケに興味を 持ち始め、色々調べてみました
  4. None
  5. ALB Support for Lambda

  6. ALBのターゲットに Lambdaの選択が可能になりました (東京リージョンでもすでに利用可能です) 要するに

  7. 今回のre:Inventで・・・ これまでのAWS Lambda API Gatewayのバックエンドに Lambdaを使用

  8. アーキテクトイメージ - DynamoDBからデータを取得する AWS Cloud API Gatewayのバックエンドに Lambdaを使用

  9. 今回のre:Inventで・・・ 今回の機能追加により ALBをLambdaのフロントエンド に使用可能に

  10. 今回のre:Inventで・・・ AWS Cloud ALBをLambdaのフロントエンド に使用可能に アーキテクトイメージ - DynamoDBからデータを取得する

  11. Webサイトやアプリケーションを サーバレスに作成、管理 クライアントからのリクエストに HTTP/HTTPSフロントエンドを提供 今回の新機能でできること

  12. 今回の新機能でできること API GatewayがLambdaをトリガーする際のパラメータと ALBのパラメータは共通性がある API Gateway or ALBもしくは両方で Lambda関数の使用が可能

  13. •ランタイム:Python 3.7 •IAMロール:AWSLambdaVPCAccessExecutionRoleを付与 一旦それ以外の設定はデフォルトのまま作成しました 触ってみた - Lambda関数の作成

  14. 触ってみた - ALBの作成 ターゲットの種類に Lambda 関数 が追加されています

  15. 触ってみた - ALBの作成 ヘルスチェックの有効化 にチェックを入れると 詳細設定が可能になります

  16. 今回のre:Inventで・・・ 接続してみる 触ってみた

  17. 今回のre:Inventで・・・ 触ってみた - curlコマンドを叩いてみる P-1174:~ ma-kobayashi$ curl -v http://kbys-lambda-alb-xxxxxxxxxx.ap-northeast-1.elb.amazonaws.com *

    Rebuilt URL to: http://kbys-lambda-alb-xxxxxxxxxx.ap-northeast-1.elb.amazonaws.com/ * Trying xx.xxx.xxx.xxx…. * TCP_NODELAY set * Connected to kbys-lambda-alb-xxxxxxxxxx.ap-northeast-1.elb.amazonaws.com (xx.xxx.xxx.xxx) port 80 (#0) > GET / HTTP/1.1 > Host: kbys-lambda-alb-xxxxxxxxxx.ap-northeast-1.elb.amazonaws.com > User-Agent: curl/7.54.0 > Accept: */* > < HTTP/1.1 502 Bad Gateway < Server: awselb/2.0 < Date: Mon, 10 Dec 2018 07:23:54 GMT < Content-Type: text/html < Content-Length: 138 < Connection: keep-alive < <html> <head><title>502 Bad Gateway</title></head> <body bgcolor="white"> <center><h1>502 Bad Gateway</h1></center> </body> </html> * Connection #0 to host kbys-lambda-alb-xxxxxxxxxx.ap-northeast-1.elb.amazonaws.com left intact
  18. 触ってみた - curlコマンドを叩いてみる The response from the Lambda function is

    not in the expected format (レスポンスの型が違います)
  19. 触ってみた Requests can include HTTP GET, HEAD, PUT, POST, DELETE,

    PATCH and OPTIONS methods, and request and response bodies can be text or binary. The Application Load Balancer that you’ve set up with AWS Lambda takes care of translating an HTTP/S request into an AWS Lambda-compatible event. 要求には、HTTP GET、HEAD、PUT、POST、DELETE、PATCH、OPTIONSメソッドが 含まれ、要求および応答の本文にはテキストまたはバイナリを使用できます。 AWS Lambdaで設定したApplication Load Balancerは、HTTP(S)リクエストをAWS Lambda イベントに変換します。 Lambda functions as targets for Application Load Balancers https://aws.amazon.com/jp/blogs/news/lambda-functions-as-targets-for-application-load-balancers/
  20. 今回のre:Inventで・・・ 触ってみた - Lambda関数の修正 def lambda_handler(event, context): response = {

    "statusCode": 200, "isBase64Encoded": False, "headers": { "Content-Type": "text/html; charset=utf-8" } } response['body'] = """ <html> <head> <meta charset="UTF-8"> <title>kobayashi test</title> </head> <body> <p>今日はre:Invent報告会です</p> </body> </html>""" return response
  21. アーキテクトイメージ - Webサイトを作成する VPC AWS Cloud (静的コンテンツ) (動的コンテンツ)

  22. まとめ ・ALBのヘルスチェックはLambda関数が機能しているかの確認を行う →Lambda関数のリクエストとしてカウント ・ALB + Lambdaの場合のリクエスト・レスポンスは、テキストorバイナリである必要が ある ・ リクエスト受信の回数に合わせて自動的にスケールするため運用負荷減 ・LambdaにALBを設定していても、API

    Gatewayのバックエンドとしての利用も可能
  23. エンジニアブログやってます レコチョク エンジニアブログ 検索 おまけ

  24. AWS Toolkit for PyCharmを触ってみた 事業システム部 ミュージック・アーキテクトグループ 海津 純平

  25. 自己紹介 • 名前 • 海津 純平(カイヅ ジュンペイ) • 居住地 •

    新潟(出生〜高校) • 宮城(大学) • 東京(現在) • 好きな言語 • Python • 好きなAWSのサービス • AWS CloudFormation
  26. テーマ AWS Toolkit for PyCharmを触ってみた

  27. メリット PyCharm内だけでサーバーレスアプリケーション開発が可能

  28. サーバーレスアプリケーション開発

  29. 必要なツール • PyCharmプラグイン「AWS Toolkit」 • Docker • AWS SAM(Serverless Application

    Model)CLI
  30. AWS SAM 1 AWSTemplateFormatVersion: '2010-09-09' 2 Transform: AWS::Serverless-2016-10-31 3 Resources:

    4 HelloWorldFunction: 5 Type: AWS::Serverless::Function 6 Properties: 7 CodeUri: hello_world/ 8 Handler: app.lambda_handler 9 Runtime: python3.6 10 Events: 11 HelloWorld: 12 Type: Api 13 Properties: 14 Path: /hello 15 Method: get AWS CloudFormation のサーバーレス拡張
  31. メリット PyCharm内だけでサーバーレスアプリケーション開発が可能

  32. できること リージョンと認証情報の指定 リソース参照 デプロイ ローカル実行 リモート実行

  33. できること リージョンと認証情報の指定 リソース参照 デプロイ ローカル実行 リモート実行

  34. ローカル実行 デプロイせずに動作確認が可能

  35. ローカル実行 デバッグ実行可能 ブレークポイントも貼れる

  36. できること リージョンと認証情報の指定 リソース参照 デプロイ ローカル実行 リモート実行

  37. リージョンと認証情報の指定 認証情報は ~/.aws/credentials からの読み込み

  38. できること リージョンと認証情報の指定 リソース参照 デプロイ ローカル実行 リモート実行

  39. デプロイ ︙ ビルド→パッケージ化→S3アップロード→デプロイ

  40. できること リージョンと認証情報の指定 リソース参照 デプロイ ローカル実行 リモート実行

  41. リソース参照 CloudFormation と Lambda のリソース

  42. できること リージョンと認証情報の指定 リソース参照 デプロイ ローカル実行 リモート実行

  43. リモート実行 実行時に渡すデータも指定可能

  44. まとめ • PyCharm内だけでサーバーレスアプリケーション開発が可能 • ローカル実行 • リージョンと認証情報の指定 • デプロイ •

    リソース参照 • リモート実行 • 動作確認のためにデプロイする必要がない • 全員環境を揃えて開発をすると効率良いかも
  45. Amazon Personalizeの紹介

  46. 自己紹介 名前は? 福治 菜摘美(新卒2年目) 何してる人? e-Sports同好会 代表(ゲームできない) サービス改善のためのデータ分析をしている。 機械学習は勉強中。 好きな動物

    猫。ペンギン。なんでも。
  47. お断り事項 https://docs.aws.amazon.com/ja_jp/personalize/latest/dg/document-history.html

  48. お断り事項 https://docs.aws.amazon.com/ja_jp/personalize/latest/dg/document-history.html 2018/11/28に作成された公式ドキュメントを参考にしています。

  49. Amazon Personalizeとは? パーソナライズレコメンドを行う場合の手順

  50. パーソナライズレコメンドを行う場合の手順 購入履歴など

  51. パーソナライズレコメンドを行う場合の手順 学習アルゴリズム1 購入履歴など

  52. パーソナライズレコメンドを行う場合の手順 モデル1 学習アルゴリズム1 購入履歴など

  53. パーソナライズレコメンドを行う場合の手順 モデル1 学習アルゴリズム1 レコメンドリスト1 1. メガネ 2. 蛍光ペン 3. しおり

    購入履歴など
  54. パーソナライズレコメンドを行う場合の手順 モデル1 評価(0.60) 学習アルゴリズム1 レコメンドリスト1 1. メガネ 2. 蛍光ペン 3.

    しおり 購入履歴など
  55. パーソナライズレコメンドを行う場合の手順 モデル1 モデル2 モデル3 評価(0.60) 評価(0.87) 評価(0.40) 学習アルゴリズム1 学習アルゴリズム2 学習アルゴリズム3

    レコメンドリスト1 レコメンドリスト2 レコメンドリスト3 1. メガネ 2. 蛍光ペン 3. しおり 1. しおり 2. 本1 3. 蛍光ペン 1. 防水ケース 2. メガネ 3. しおり 購入履歴など
  56. パーソナライズレコメンドを行う場合の手順 モデル1 モデル2 モデル3 評価(0.60) 評価(0.87) 評価(0.40) レコメンドリスト1 レコメンドリスト2 レコメンドリスト3

    1. メガネ 2. 蛍光ペン 3. しおり 1. しおり 2. 本1 3. 蛍光ペン 1. 防水ケース 2. メガネ 3. しおり 学習アルゴリズム1 学習アルゴリズム2 学習アルゴリズム3 購入履歴など
  57. パーソナライズレコメンドを行う場合の手順 モデル1 モデル2 モデル3 評価(0.60) 評価(0.87) 評価(0.40) レコメンドリスト1 レコメンドリスト2 レコメンドリスト3

    1. メガネ 2. 蛍光ペン 3. しおり 1. しおり 2. 本1 3. 蛍光ペン 1. 防水ケース 2. メガネ 3. しおり 学習アルゴリズム1 学習アルゴリズム2 学習アルゴリズム3 購入履歴など Amazon Personalizeとは パーソナライズを容易にする機械学習サービス。
  58. 用語の説明

  59. 用語 モデル1 モデル2 モデル3 評価(0.60) 評価(0.87) 評価(0.40) 学習アルゴリズム1 学習アルゴリズム2 学習アルゴリズム3

    レコメンドリスト1 レコメンドリスト2 レコメンドリスト3 1. メガネ 2. 蛍光ペン 3. しおり 1. しおり 2. 本1 3. 蛍光ペン 1. 防水ケース 2. メガネ 3. しおり 購入履歴など
  60. 用語 モデル1 モデル2 モデル3 評価(0.60) 評価(0.87) 評価(0.40) 学習アルゴリズム1 学習アルゴリズム2 学習アルゴリズム3

    レコメンドリスト1 レコメンドリスト2 レコメンドリスト3 1. メガネ 2. 蛍光ペン 3. しおり 1. しおり 2. 本1 3. 蛍光ペン 1. 防水ケース 2. メガネ 3. しおり レシピ レシピ レシピ 購入履歴など
  61. 用語 モデル1 モデル2 モデル3 評価(0.60) 評価(0.87) 評価(0.40) 学習アルゴリズム1 学習アルゴリズム2 学習アルゴリズム3

    レコメンドリスト1 レコメンドリスト2 レコメンドリスト3 1. メガネ 2. 蛍光ペン 3. しおり 1. しおり 2. 本1 3. 蛍光ペン 1. 防水ケース 2. メガネ 3. しおり レシピ レシピ レシピ ソリューション ソリューション ソリューション 購入履歴など
  62. 用語 モデル1 モデル2 モデル3 評価(0.60) 評価(0.87) 評価(0.40) 学習アルゴリズム1 学習アルゴリズム2 学習アルゴリズム3

    レコメンドリスト1 レコメンドリスト2 レコメンドリスト3 1. メガネ 2. 蛍光ペン 3. しおり 1. しおり 2. 本1 3. 蛍光ペン 1. 防水ケース 2. メガネ 3. しおり レシピ レシピ レシピ ソリューション ソリューション ソリューション 購入履歴など キャンペーン
  63. Amazon Personalizeのここがすごい!

  64. 1. APIを叩くだけで、機械学習が可能である。 モデル1 モデル2 モデル3 評価(0.60) 評価(0.87) 評価(0.40) 学習アルゴリズム1 学習アルゴリズム2

    学習アルゴリズム3 レコメンドリスト1 レコメンドリスト2 レコメンドリスト3 1. メガネ 2. 蛍光ペン 3. しおり 1. しおり 2. 本1 3. 蛍光ペン 1. 防水ケース 2. メガネ 3. しおり 購入履歴など
  65. 1. APIを叩くだけで、機械学習が可能である。 モデル1 モデル2 モデル3 評価(0.60) 評価(0.87) 評価(0.40) 学習アルゴリズム1 学習アルゴリズム2

    学習アルゴリズム3 レコメンドリスト1 レコメンドリスト2 レコメンドリスト3 1. メガネ 2. 蛍光ペン 3. しおり 1. しおり 2. 本1 3. 蛍光ペン 1. 防水ケース 2. メガネ 3. しおり レシピ レシピ レシピ ソリューション ソリューション API API API API ソリューション 購入履歴など API キャンペーン
  66. 1. APIを叩くだけで、機械学習が可能である。(一部) Create Delete Describe Get List Retrain Update Algorithm

    ◦ ◦ ◦ ◦ Campaign ◦ ◦ ◦ ◦ ◦ CampaignUpdate ◦ Dataset ◦ ◦ ◦ ◦ ◦ DatasetGroup ◦ ◦ ◦ ◦ DatasetImportJob ◦ ◦ ◦ ◦ ◦ DatasetImportJobRun ◦ ◦ EventTracker ◦ ◦ ◦ ◦ FeatureExportJob ◦ ◦ ◦ FeatureTransformation ◦ ◦ ◦ ◦ Recipe ◦ ◦ ◦ ◦ ◦ Schema ◦ ◦ ◦ ◦ Solution ◦ ◦ ◦ ◦ ◦ ◦ SolutionVersion ◦ ◦ Metrics ◦
  67. 2. 機械学習をやったことない人でも使える Deep-FM Recipe Matrix factorizationに基づくレシピ FFNN Recipe feed-forward neural

    network (FFNN) に基づくレシピ HRNN Recipe ユーザ行動の変化をモデルする階層型ニューラルネットワークに基づくレシピ Popularity-Baseline Recipe データセットのアイテムの人気をカウントするアルゴリズムのレシピ SIMS Recipe 商品間の類似度を計算するアルゴリズムのレシピ + 自分で作成したレシピ
  68. 2. 機械学習をやったことない人でも使える Deep-FM Recipe Matrix factorizationに基づくレシピ FFNN Recipe feed-forward neural

    network (FFNN) に基づくレシピ HRNN Recipe ユーザ行動の変化をモデルする階層型ニューラルネットワークに基づくレシピ Popularity-Baseline Recipe データセットのアイテムの人気をカウントするアルゴリズムのレシピ SIMS Recipe 商品間の類似度を計算するアルゴリズムのレシピ + 自分で作成したレシピ
  69. Deep-FM Recipe Matrix factorizationに基づくレシピ FFNN Recipe feed-forward neural network (FFNN)

    に基づくレシピ HRNN Recipe ユーザ行動の変化をモデルする階層型ニューラルネットワークに基づくレシピ Popularity-Baseline Recipe データセットのアイテムの人気をカウントするアルゴリズムのレシピ SIMS Recipe 商品間の類似度を計算するアルゴリズムのレシピ + 自分で作成したレシピ Amazon Personalizeがレシピを勝手に選んでくれる機能も! 2. 機械学習をやったことない人でも使える
  70. 2. 機械学習をやったことない人でも使える Deep-FM Recipe Matrix factorizationに基づくレシピ FFNN Recipe feed-forward neural

    network (FFNN) に基づくレシピ HRNN Recipe ユーザ行動の変化をモデルする階層型ニューラルネットワークに基づくレシピ Popularity-Baseline Recipe データセットのアイテムの人気をカウントするアルゴリズムのレシピ SIMS Recipe 商品間の類似度を計算するアルゴリズムのレシピ + 自分で作成したレシピ
  71. 2. 機械学習をやったことない人でも使える Deep-FM Recipe Matrix factorizationに基づくレシピ FFNN Recipe feed-forward neural

    network (FFNN) に基づくレシピ HRNN Recipe ユーザ行動の変化をモデルする階層型ニューラルネットワークに基づくレシピ Popularity-Baseline Recipe データセットのアイテムの人気をカウントするアルゴリズムのレシピ SIMS Recipe 商品間の類似度を計算するアルゴリズムのレシピ + 自分で作成したレシピ 2017年7月に発表された 映画のレコメンドで最も良い結果を出した手法!!!
  72. 3. リアルタイムに I.夜中にバッチを組まなくても機械学習ができる II.リアルタイムにイベントデータを送ることができる

  73. プレビューの申し込み&作業手順 Getting Started (Python Notebook) Amazon Personalize Preview

  74. Amazon Forecastの紹介 事業システム部 ミュージックアーキテクトグループ 岡崎 拓哉

  75. 自己紹介 • 名前 • 岡崎 拓哉 • 趣味 • プログラミング

    • ドラム • インコと戯れる • 好きな食べ物 • 鶏の唐揚とか
  76. 結論 予測データを簡単に作る事が出来る! サーバのトラフィック量/商品の需要予測 …etc

  77. 予測データ例

  78. アーキテクチャ構成 Amazon Forecast ユーザ Login Read

  79. 作り方概要 • 「Amazon Forecast」 に「S3」に配置してある CSV ファイルを読み込ませる • CSV ファイルから予測データ作成用に

    DataSet を作成する • DataSet※ を指定してJob※として読み込みを行う • 「Amazon Forecast」が提供する予測データの作成用のオプション※を選択する • 「Amazon Forecast」ダッシュボードから商品の需要予測データを見る
  80. 補足 • Dataset • Amazon Forecast のタスク定義ファイル • Amazon が定義したスキーマに準拠している必要あり

    • Job • Amazon Forecast に DataSet を読み込ませる事でデータの読み込みが可能 • オプション • オプション名 • 予測データの期間 • 予測データのレシピ(生成アルゴリズム)
  81. Amazon Forecastを使う準備

  82. CSVファイルの形式

  83. DataSetの作成

  84. DataSetの読み込み

  85. レシピの種類

  86. オプション作成

  87. オプションのデプロイ

  88. 予測データの取得

  89. 予測データ例

  90. まとめ • Amazon Forecast を使うと出来ること • 機械学習に詳しくなくても使用できる • 簡単に予測データを作成する事ができる •

    機械学習の勉強の第一歩を踏み出せる
  91. 質疑応答 ・ALB Support for Lambdaを試してみました:小林 真弓 ・AWS Toolkit for PyCharmを触ってみた:海津

    純平 ・Amazon Personalizeの紹介 :福治 菜摘美 ・Amazon Forecastの紹介:岡崎 拓哉 sli.do #RecoTech09