本日も乙

ただの自己満足な備忘録。

Amazon ESの基本的な使い方を学べるワークショップ「Amazon Elasticsearch Service Intro Workshop」をやってみた

Amazon Elasticsearch Service(以下、Amazon ES)をキャッチアップするために、先日「これから始める Amazon Elasticsearch Service セミナー」に参加してきました。そのなかでワークショップの宣伝がされたのですが、Amazon ES の基本的な使い方を手で動かして学べそうだったので実際にやってみました。ワークショップは Elasticsearch に詳しくない人でもわかりやすく解説されています。

aws.amazon.com

ワークショップ概要

ワークショップ資料は GitHub リポジトリに公開されています。

github.com

ワークショップを通じて、以下の図のようなアーキテクチャを構築していきます。Amazon ES だけではなく関連する AWS サービスも触れるので良いですね。

  1. Kinesis Data Generator でサンプルデータを無限生成
  2. Kinesis Data Firehose でデータを一時的にストアし、Amazon ES に転送
  3. Amazon SNS で監視アラートを通知

amazon-es-workshop-architecture
https://github.com/aws-samples/amazon-elasticsearch-intro-workshop/blob/master/jp/images/architecture.png より引用

ワークショップは次の4章から構成されています。

  • Lab 1: 環境のセットアップ
  • Lab 2: Kibana での可視化と分析
  • Lab 3: Amazon ES の運用管理
  • Lab 4: Amazon ES の応用的な使い方

Lab 1: 環境のセットアップ

上図の環境を構築します。Amazon ES はパブリックアクセス(VPC 内部に置かない)にする設定なので、VPC ネットワークなどの構築は一切ありません。自分ところのグローバル IP アドレスを Amazon ES のアクセスポリシーでアクセス許可します。固定 IP アドレスでないところは都度変わる度にアクセスポリシーを変更します。私はワークショップ中に2回変更しました。Amazon ES と Kinesis Data Firehose は AWS マネジメントコンソールでポチポチ作成します。

Kinesis Data Generator はサンプルデータをランダムに生成し Kinesis に流し込むアプリケーションで、Amazon 公式で公開されています。CloudFormation で作成します。

aws.amazon.com

Kinesis Data Generator の設定画面で以下のようなテンプレートを設定します。IoT センサから送信されるログデータを想定しています。センサ ID(sensorId)、温度(currentTemperature)、IP アドレス、ステータスがランダムに生成されます。

{
    "sensorId": {{random.number(50)}},
    "currentTemperature": {{random.number(
        {
            "min":10,
            "max":150
        }
    )}},
    "ipaddress": "{{internet.ip}}",
    "status": "{{random.weightedArrayElement({
        "weights": [0.90,0.02,0.08],
        "data": ["OK","FAIL","WARN"]
    })}}",
    "timestamp": "{{date.utc("YYYY/MM/DD HH:mm:ss")}}"
}

ここまで設定すると Amazon ES にデータが集約され、Kibana で見れるようになります。

Lab 2: Kibana での可視化と分析

この章では Amazon ES に収集されたデータを Kibana で可視化する方法について紹介されています。Kibana をポチポチ触りながらダッシュボードを作るのがゴールです。

amazon-es-workshot-dashboard

https://github.com/aws-samples/amazon-elasticsearch-intro-workshop/blob/master/jp/images/dashboard_edit.png から引用

Lab 3: Amazon ES の運用管理

この章では Amazon ES の機能を活用して、権限管理・アラート通知・インデックス管理をしていきます。権限管理ではテナントという機能を用いて Kibana 上のアクセス範囲をユーザ単位で制御します。アラート通知ではしきい値となるクエリを設定し、しきい値を上回ったら Amazon SNS 経由でメールアドレスに通知します。インデックス管理は日々増加するデータに対して新しいインデックスを自動作成し、古いインデックスを自動削除するように設定します。

Lab 4: Amazon ES の応用的な使い方

最終章は応用編として全文検索するアナライザのチューニングとして、カスタム日本語辞書とシノニムをインポートします。デフォルトの全文検索だと文字の切れ目が不適切な場合に意図せぬ結果を返してしまう場合があります。日本語辞書データを S3 に配置し Amazon ES からインポートすれば不適切な切れ目による検索結果を返さなくても良くなりますし、専門用語や近代用語など辞書にはないワードも検索できるようになります。シノニム(類似語)データを S3 に配置し Amazon ES からインポートすることで、通常の検索には引っからなかった結果も取得できます。ワークショップの例では 築地銀だこ,たこ焼き と入れることで、たこ焼きと検索しても築地銀だこが含まれる結果を返すことができます。
また、Amazon ES(Open Distro)では SQL を使った検索もできます。Elasticsearch のクエリに慣れない人は SQL で検索できると嬉しいですよね。また、SQL で書かれたクエリと同等の Elasticsearch のクエリに変換する _opendistro/_sql/_explain API もあります。

まとめ

本記事では Amazon ES を作って試せるワークショップ「Amazon Elasticsearch Service Intro Workshop」をやってみました。Kinesis Data Generator によってサンプルデータを大量に生成することができるので、Kibana でグラフやダッシュボードを作る良い練習になるかと思います。もし次回作があるなら、もう少し本番稼働を意識した運用管理ができるとなお嬉しいですね。