AWS  Search  Services
Eiji  Shinohara
(2014年年にA9のCloudSearchチームが来⽇日した時の飲み会の様⼦子)
⾃自⼰己紹介
{
        "Name"  :  "篠原英治",
        "Twitter"  :  "@shinodogg",
        "Profile"  :  {
                                                "Role"  :  "Solutions  Architect",
                                                "Market":  "Startup",
                                                "Services"  :  [  
                                                                                        "Amazon  CloudSearch",
                                                                                        "Amazon  Elasticsearch  Service",
                                                                                        "Amazon  Simple  Workflow  Service”,
                                                                                          "AWS  Elastic  Beanstalk”
                                                                                    ]
                                        }
}
New ☺
AWSの検索索サービス
•  Amazon  CloudSearch
–  https://aws.amazon.com/jp/cloudsearch/  
•  Amazon  Elasticsearch  Service
–  https://aws.amazon.com/jp/elasticsearch-‐‑‒service/  
Amazon  CloudSearch Amazon  Elasticsearch  Service
A9.com
•  CloudSearch/Amazon  ES  の開発拠点はパロアルト
•  Amazonの商品検索索もA9で作っています
A9.com
Amazon  CloudSearch
•  ⾃自動拡張するフルマネージド検索索サービス
–  2011  API
•  A9が作ったプロプライエタリな検索索エンジン
•  Amazon.comで使っているもの
•  東京リージョンは対象外
–  2013  API
•  on  top  of  Apache  Solr
•  多⾔言語対応
–  ⽇日本語の形態素解析、n-‐‑‒gram、カスタム辞書にも対応
•  東京リージョンは2014年年3⽉月からサービス提供中
Amazon  CloudSearch
•  Auto  Scaling  /  Auto  Partitining
Auto  Partitioning
Auto  Scaling
Amazon  CloudSearch
•  Amazon  EMRを利利⽤用した⾃自動ノード分割
Index
Index  P1
Index  P2Amazon  
EMR
Amazon  CloudSearch
•  ⽇日本でも様々な公開事例例
–  schoo
–  nanapi
–  ChatWork
–  サイタ
–  SnapDish
–  SmartInsight
–  Lancers
–  ごちクル
–  SmartNews
A9  x  SmartNews  in  Palo  Alto
CloudSearch  Meetup  at  Amazon  Meguro  Office
SourceFieldとDynamicField
•  SourceField
–  例例えば、形態素解析とBi-‐‑‒Gramの2つのフィールドを⽤用意
–  バッチファイルで全く同じものを⼆二つ⽤用意するのは無駄
–  よくあるのは、例例えば住所
Solrで⾔言うところのCopy  Fieldあります
SourceFieldとDynamicField
•  DynamicField
–  飲み会系、イベント系、、どんどんフィールド増やす??
–  フィールド定義は1つだけ
SourceFieldとDynamicField
•  DynamicField
–  bar_̲txt
*_̲txt  指定の検索索は出来ません
⇒⼊入れた時に指定したフィールド名でのみ検索索
•  形態素解析(Morphological  Analysis)
–  辞書のカスタマイズできます
Amazon  CloudSearch  -‐‑‒  Japanese  Text  Processing
•  形態素解析(Morphological  Analysis)
–  辞書のカスタマイズできます:  AWS  CLI/SDKからも操作可能
{              
        "AnalysisSchemeName":  "jascheme",
        "AnalysisSchemeLanguage":  "ja",
        "AnalysisOptions":  {
                "JapaneseTokenizationDictionary":  "[
                        [“きゃりーぱみゅぱみゅ”,“きゃりー  ぱみゅぱみゅ”,“キャリー  パミュパミュ","名
詞,固有名詞,⼈人名”]
]"  
        }
}
$  aws  cloudsearch  define-‐‑‒analysis-‐‑‒scheme  -‐‑‒-‐‑‒region  us-‐‑‒east-‐‑‒1  -‐‑‒-‐‑‒domain-‐‑‒name  mydomain  
-‐‑‒-‐‑‒analysis-‐‑‒scheme  file://jascheme.txt
Amazon  CloudSearch  -‐‑‒  Japanese  Text  Processing
•  シノニム・類義語(Synonym  Addition)
–  例例えば  Venice
•  ベニス
•  ベネチア
•  ヴェネチア
•  ヴェネツィア
–  Alias
•  Pupilで検索索  =>  Studentもヒット
•  Studentで検索索  =>  Pupilはヒットしない
–  Group
•  1st,  first,  one  =>  どれで検索索しても全てヒット
–  上記全て、マネージメントコンソールもしくはCLI/SDKで操作可能
http://ja.wikipedia.org/wiki/ヴェネツィア  
Amazon  CloudSearch  -‐‑‒  Japanese  Text  Processing
•  A/Bテスト
–  マネージメントコンソール上で⽐比較
Amazon  CloudSearch  -‐‑‒  Japanese  Text  Processing
Amazon  CloudSearch
•  CloudSearchにいただいたご要望
–  リアルタイムにデータを取り込んで可視化したい
•  CloudSearchは最⼤大で5MBのバッチファイルでの連携
•  細かいデータを⾼高頻度度でストアするのに強いストレージではない
–  Amazon  CloudSearchの独⾃自APIを習得するのに時間がかかる
•  Solrを使っているがSolrのAPIは利利⽤用できない
•  完全マネージドでスケールと低レイテンシを同時に満たすには
様々なSolrの機能をオープンにすることはできない
Elasticsearch
•  Google  Trends
ELK  stack
•  ELK  is  Elasticsearch,  Logstash,  and  Kibana
Elasticsearch  is  a  
distributed,  schema-‐‑‒
free  search  and  
analytics  engine
Logstash  is  a  tool  for  
collecting  and  
managing  events  and  
logs.
Kibana  is  a  browser-‐‑‒
based  analytics  and  
search  dashboard  for  
Elasticsearch.
Kibana
•  探索と可視化
http://www.binpress.com/blog/2014/10/21/binpress-‐‑‒podcast-‐‑‒episode-‐‑‒16-‐‑‒shay-‐‑‒banon-‐‑‒elasticsearch/  
Amazon  Elasticsearch  Service
Shayさんと私(篠原)ですw
Amazon  Elasticsearch  Service
•  Elasticsearchのマネージドサービス
–  AWSクラウド上で  Elasticsearch  を簡単に構築可能
•  Elasticsearchの分散/スケーリング機能はクラウドと相性が良良い
•  インスタンスタイプと台数を選択するだけでプロビジョニング
–  デフォルトでKibanaがインストール
•  Management  ConsoleにてURLをクリックするだけで直ぐ利利⽤用可能
–  使った分だけの従量量課⾦金金
•  ノードに利利⽤用するEC2の時間課⾦金金
•  EBSボリュームを使った場合はEBSの料料⾦金金
–  略略称はAmazon  ES
Amazon  Elasticsearch  Service
http://aws.typepad.com/aws_̲japan/2015/10/amazon-‐‑‒elasticsearch-‐‑‒service.html  
Amazon  Elasticsearch  Service
•  Elasticsearchの利利点
–  クエリは⾮非常に⾼高速でアドホックな集計や分析に強い
•  Apache  Luceneベース(Apache  SolrおよびCloudSearchと同様)
–  リアルタイムにデータを取り込んで検索索可能な状態にできる
•  Kibanaを活⽤用することでリアルタイムにデータを可視化
•  Amazon  Elasticsearch  Serviceの利利点
–  AWSのサービスと連携して⼀一気通貫な構成を簡単に構築できる
    例例1)  CloudWatch  Logs→Lambda→Elasticsearch→Kibana
    例例2)  DynamoDB  Streams→Logstash→Elasticsearch
–  複数AZへの分散配置もチェックボックスにチェックを⼊入れるだけ
•  Zone  Awareness機能
Amazon  Elasticsearch  Service
•  Amazon  ESの注意点
–  CloudSearchのように⾃自動的にスケーリングはしない
•  構成は後から変更更可能であるがダウンタイムはゼロではない
–  プラグインを⾃自由にインストールすることはできない
•  マネージドサービスである為、セキュリティや可⽤用性担保の必要性
•  Elasticの商⽤用プラグインに該当するような機能はIAMやCloudWatchで
–  各種メトリクスを⾒見見ながらユーザー⾃自⾝身で対応する必要がある
Amazon  Elasticsearch  Service
•  Amazon  ESのCloudWatch  Metrics
q  Cluster  status(Green/Yellow/Red)
q  Node  count
q  Searchable  documents
q  Deleted  documents
q  CPU  utilization
q  Free  storage  space
q  JVM  memory  pressure
q  Automatic  snapshot  failures
q  Master  CPU  utilization
q  Master  free  storage  space
q  Master  JVM  memory  pressure
q  Read  IOPS
q  Write  IOPS
q  Read  latency
q  Write  latency
q  Read  throughput
q  Write  throughput
q  Disk  queue  depth
Amazon  Elasticsearch  Service
Amazon  Elasticsearch  Service
•  IAM  Integration
–  IPアドレスベースの制限
•  例例)  Kibanaへのアクセスは社内のIPアドレスレンジからのみ
–  Signed  requests  with  SigV4
•  例例)  AWSのクレデンシャルを使ってセキュアにアクセス
•  Logstashプラグイン:  https://github.com/awslabs/logstash-‐‑‒output-‐‑‒amazon_̲es  
–  Fine-‐‑‒grainedアクセスコントロール
•  例例)  ドメイン内のIndex毎にアクセス権限を分ける
Logstash Amazon  ESData  Source
Amazon  Elasticsearch  Service
•  ⽇日本語解析
–  ICUとKuromojiプラグインはインストール済み
•  analysis-‐‑‒icu(ノーマライズ)
•  analysis-‐‑‒kuromoji(形態素解析)
–  但し、ユーザー辞書の追加機能は現在(2015年年10⽉月)開発中
•  その他ご要望があれば随時ご連絡ください
Amazon  Elasticsearch  Service
•  Deployment
node node
EBS EBS
node
node
node
Master  Nodes Data  Nodes
Cluster
Node
Shard  3
node
EBS
node
EBS
Shard  1
Shard  4
Shard  2
Amazon  Elasticsearch  Service
•  バックアップ&リストア
–  AWSが⾃自動で取得するもの
•  Daily:  1⽇日1回  Automated  snapshot  start  hourで指定
•  リストアはAWSサポートまで
–  お客さまがご⾃自⾝身で取得するもの  w/  _̲snapshot  API
•  Elasticsearchのフォーマットでお客さまのS3バケット
•  任意のタイミングでいつでもリストア可能
Amazon  Elasticsearch  Service
•  今後の予定
–  2016年年にはかなり多くの機能追加を予定
–  但し、お客さまからのご要望によって優先度度は変わってきます
例例)
•  Elasticsearch2.0は?Kibana4.2は?複数バージョンサポートして欲しい
•  9300番ポートを使ったElasticsearchのバイナリなプロトコルを利利⽤用したい
•  VPC内のエンドポイントが欲しい
–  是⾮非AmazonESをご利利⽤用いただき、フィードバックいただければと
思います!
AWS Search Services

AWS Search Services

  • 1.
    AWS  Search  Services Eiji Shinohara (2014年年にA9のCloudSearchチームが来⽇日した時の飲み会の様⼦子)
  • 2.
    ⾃自⼰己紹介 {       "Name"  :  "篠原英治",        "Twitter"  :  "@shinodogg",        "Profile"  :  {                                                "Role"  :  "Solutions  Architect",                                                "Market":  "Startup",                                                "Services"  :  [                                                                                          "Amazon  CloudSearch",                                                                                        "Amazon  Elasticsearch  Service",                                                                                        "Amazon  Simple  Workflow  Service”,                                                                                          "AWS  Elastic  Beanstalk”                                                                                    ]                                        } } New ☺
  • 3.
    AWSの検索索サービス •  Amazon  CloudSearch – https://aws.amazon.com/jp/cloudsearch/   •  Amazon  Elasticsearch  Service –  https://aws.amazon.com/jp/elasticsearch-‐‑‒service/   Amazon  CloudSearch Amazon  Elasticsearch  Service
  • 4.
    A9.com •  CloudSearch/Amazon  ES の開発拠点はパロアルト
  • 5.
  • 6.
    Amazon  CloudSearch •  ⾃自動拡張するフルマネージド検索索サービス – 2011  API •  A9が作ったプロプライエタリな検索索エンジン •  Amazon.comで使っているもの •  東京リージョンは対象外 –  2013  API •  on  top  of  Apache  Solr •  多⾔言語対応 –  ⽇日本語の形態素解析、n-‐‑‒gram、カスタム辞書にも対応 •  東京リージョンは2014年年3⽉月からサービス提供中
  • 7.
    Amazon  CloudSearch •  Auto Scaling  /  Auto  Partitining Auto  Partitioning Auto  Scaling
  • 8.
    Amazon  CloudSearch •  Amazon EMRを利利⽤用した⾃自動ノード分割 Index Index  P1 Index  P2Amazon   EMR
  • 9.
    Amazon  CloudSearch •  ⽇日本でも様々な公開事例例 – schoo –  nanapi –  ChatWork –  サイタ –  SnapDish –  SmartInsight –  Lancers –  ごちクル –  SmartNews A9  x  SmartNews  in  Palo  Alto CloudSearch  Meetup  at  Amazon  Meguro  Office
  • 10.
    SourceFieldとDynamicField •  SourceField –  例例えば、形態素解析とBi-‐‑‒Gramの2つのフィールドを⽤用意 – バッチファイルで全く同じものを⼆二つ⽤用意するのは無駄 –  よくあるのは、例例えば住所 Solrで⾔言うところのCopy  Fieldあります
  • 11.
  • 12.
    SourceFieldとDynamicField •  DynamicField –  bar_̲txt *_̲txt 指定の検索索は出来ません ⇒⼊入れた時に指定したフィールド名でのみ検索索
  • 13.
    •  形態素解析(Morphological  Analysis) – 辞書のカスタマイズできます Amazon  CloudSearch  -‐‑‒  Japanese  Text  Processing
  • 14.
    •  形態素解析(Morphological  Analysis) – 辞書のカスタマイズできます:  AWS  CLI/SDKからも操作可能 {                      "AnalysisSchemeName":  "jascheme",        "AnalysisSchemeLanguage":  "ja",        "AnalysisOptions":  {                "JapaneseTokenizationDictionary":  "[                        [“きゃりーぱみゅぱみゅ”,“きゃりー  ぱみゅぱみゅ”,“キャリー  パミュパミュ","名 詞,固有名詞,⼈人名”] ]"          } } $  aws  cloudsearch  define-‐‑‒analysis-‐‑‒scheme  -‐‑‒-‐‑‒region  us-‐‑‒east-‐‑‒1  -‐‑‒-‐‑‒domain-‐‑‒name  mydomain   -‐‑‒-‐‑‒analysis-‐‑‒scheme  file://jascheme.txt Amazon  CloudSearch  -‐‑‒  Japanese  Text  Processing
  • 15.
    •  シノニム・類義語(Synonym  Addition) – 例例えば  Venice •  ベニス •  ベネチア •  ヴェネチア •  ヴェネツィア –  Alias •  Pupilで検索索  =>  Studentもヒット •  Studentで検索索  =>  Pupilはヒットしない –  Group •  1st,  first,  one  =>  どれで検索索しても全てヒット –  上記全て、マネージメントコンソールもしくはCLI/SDKで操作可能 http://ja.wikipedia.org/wiki/ヴェネツィア   Amazon  CloudSearch  -‐‑‒  Japanese  Text  Processing
  • 16.
    •  A/Bテスト –  マネージメントコンソール上で⽐比較 Amazon CloudSearch  -‐‑‒  Japanese  Text  Processing
  • 17.
    Amazon  CloudSearch •  CloudSearchにいただいたご要望 – リアルタイムにデータを取り込んで可視化したい •  CloudSearchは最⼤大で5MBのバッチファイルでの連携 •  細かいデータを⾼高頻度度でストアするのに強いストレージではない –  Amazon  CloudSearchの独⾃自APIを習得するのに時間がかかる •  Solrを使っているがSolrのAPIは利利⽤用できない •  完全マネージドでスケールと低レイテンシを同時に満たすには 様々なSolrの機能をオープンにすることはできない
  • 18.
  • 19.
    ELK  stack •  ELK is  Elasticsearch,  Logstash,  and  Kibana Elasticsearch  is  a   distributed,  schema-‐‑‒ free  search  and   analytics  engine Logstash  is  a  tool  for   collecting  and   managing  events  and   logs. Kibana  is  a  browser-‐‑‒ based  analytics  and   search  dashboard  for   Elasticsearch.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
    Amazon  Elasticsearch  Service • Elasticsearchのマネージドサービス –  AWSクラウド上で  Elasticsearch  を簡単に構築可能 •  Elasticsearchの分散/スケーリング機能はクラウドと相性が良良い •  インスタンスタイプと台数を選択するだけでプロビジョニング –  デフォルトでKibanaがインストール •  Management  ConsoleにてURLをクリックするだけで直ぐ利利⽤用可能 –  使った分だけの従量量課⾦金金 •  ノードに利利⽤用するEC2の時間課⾦金金 •  EBSボリュームを使った場合はEBSの料料⾦金金 –  略略称はAmazon  ES
  • 25.
  • 26.
  • 27.
    •  Elasticsearchの利利点 –  クエリは⾮非常に⾼高速でアドホックな集計や分析に強い • Apache  Luceneベース(Apache  SolrおよびCloudSearchと同様) –  リアルタイムにデータを取り込んで検索索可能な状態にできる •  Kibanaを活⽤用することでリアルタイムにデータを可視化 •  Amazon  Elasticsearch  Serviceの利利点 –  AWSのサービスと連携して⼀一気通貫な構成を簡単に構築できる     例例1)  CloudWatch  Logs→Lambda→Elasticsearch→Kibana     例例2)  DynamoDB  Streams→Logstash→Elasticsearch –  複数AZへの分散配置もチェックボックスにチェックを⼊入れるだけ •  Zone  Awareness機能 Amazon  Elasticsearch  Service
  • 28.
    •  Amazon  ESの注意点 – CloudSearchのように⾃自動的にスケーリングはしない •  構成は後から変更更可能であるがダウンタイムはゼロではない –  プラグインを⾃自由にインストールすることはできない •  マネージドサービスである為、セキュリティや可⽤用性担保の必要性 •  Elasticの商⽤用プラグインに該当するような機能はIAMやCloudWatchで –  各種メトリクスを⾒見見ながらユーザー⾃自⾝身で対応する必要がある Amazon  Elasticsearch  Service
  • 29.
    •  Amazon  ESのCloudWatch Metrics q  Cluster  status(Green/Yellow/Red) q  Node  count q  Searchable  documents q  Deleted  documents q  CPU  utilization q  Free  storage  space q  JVM  memory  pressure q  Automatic  snapshot  failures q  Master  CPU  utilization q  Master  free  storage  space q  Master  JVM  memory  pressure q  Read  IOPS q  Write  IOPS q  Read  latency q  Write  latency q  Read  throughput q  Write  throughput q  Disk  queue  depth Amazon  Elasticsearch  Service
  • 30.
    Amazon  Elasticsearch  Service • IAM  Integration –  IPアドレスベースの制限 •  例例)  Kibanaへのアクセスは社内のIPアドレスレンジからのみ –  Signed  requests  with  SigV4 •  例例)  AWSのクレデンシャルを使ってセキュアにアクセス •  Logstashプラグイン:  https://github.com/awslabs/logstash-‐‑‒output-‐‑‒amazon_̲es   –  Fine-‐‑‒grainedアクセスコントロール •  例例)  ドメイン内のIndex毎にアクセス権限を分ける Logstash Amazon  ESData  Source
  • 31.
    Amazon  Elasticsearch  Service • ⽇日本語解析 –  ICUとKuromojiプラグインはインストール済み •  analysis-‐‑‒icu(ノーマライズ) •  analysis-‐‑‒kuromoji(形態素解析) –  但し、ユーザー辞書の追加機能は現在(2015年年10⽉月)開発中 •  その他ご要望があれば随時ご連絡ください
  • 32.
    Amazon  Elasticsearch  Service • Deployment node node EBS EBS node node node Master  Nodes Data  Nodes Cluster Node Shard  3 node EBS node EBS Shard  1 Shard  4 Shard  2
  • 33.
    Amazon  Elasticsearch  Service • バックアップ&リストア –  AWSが⾃自動で取得するもの •  Daily:  1⽇日1回  Automated  snapshot  start  hourで指定 •  リストアはAWSサポートまで –  お客さまがご⾃自⾝身で取得するもの  w/  _̲snapshot  API •  Elasticsearchのフォーマットでお客さまのS3バケット •  任意のタイミングでいつでもリストア可能
  • 34.
    Amazon  Elasticsearch  Service • 今後の予定 –  2016年年にはかなり多くの機能追加を予定 –  但し、お客さまからのご要望によって優先度度は変わってきます 例例) •  Elasticsearch2.0は?Kibana4.2は?複数バージョンサポートして欲しい •  9300番ポートを使ったElasticsearchのバイナリなプロトコルを利利⽤用したい •  VPC内のエンドポイントが欲しい –  是⾮非AmazonESをご利利⽤用いただき、フィードバックいただければと 思います!