curlコマンドを利用して、Elasticsearch Serviceドメインにデータを投入してみます。
前提条件
Elasticsearch Serviceへの権限
Elastic Searchに対して読み取り権限があること。
AWS CLIのバージョン
以下のバージョンで動作確認済
- AWS CLI 1.10.19
aws --version
aws-cli/1.10.19 Python/2.7.10 Darwin/15.4.0 botocore/1.4.10
- 準備
=======
0.1. リージョンの決定
利用するリージョンを決めます。 (カレントユーザが利用するカレントリージ
ョンも切り変わります。)
export AWS_DEFAULT_REGION='ap-northeast-1'
0.2. プロファイルの確認
プロファイルが想定のものになっていることを確認します。
aws configure list
Name Value Type Location
---- ----- ---- --------
profile es-prjz-mbp13 env AWS_DEFAULT_PROFILE
access_key ****************XXXX shared-credentials-file
secret_key ****************XXXX shared-credentials-file
region ap-northeast-1 env AWS_DEFAULT_REGION
AssumeRoleを利用している場合はprofileが ''と表示されます。 それ以外のときにprofileが '' と表示される場合は、以下を実行してください。
export AWS_DEFAULT_PROFILE=<IAMユーザ名>
0.3. ドメイン名の指定
対象となるドメインの名前を指定します。
ES_DOMAIN_NAME="handson-esdomain-$(date +%Y%m%d)" \
&& echo ${ES_DOMAIN_NAME}
handson-esdomain-20160411
0.4. エンドポイントの取得
ES_DOMAIN_ENDPOINT=$( \
aws es describe-elasticsearch-domains \
--domain-name ${ES_DOMAIN_NAME} \
--query "DomainStatusList[?ARN == \`${ES_DOMAIN_ARN}\`].Endpoint" \
--output text \
) \
&& echo ${ES_DOMAIN_ENDPOINT}
search-handson-esdomain-20160411-xxxxxxxxxxxxxxxxxxxxxxxxxx.ap-northeast-1.es.amazonaws.com
- 事前作業
===========
変数の確認
cat << ETX
ES_DOMAIN_NAME: ${ES_DOMAIN_NAME}
ES_DOMAIN_ENDPOINT: ${ES_DOMAIN_ENDPOINT}
ETX
- インデックスの作成
=====================
インデックス名を指定します。
ES_INDEX_NAME=${ES_DOMAIN_NAME}
cat << ETX
ES_DOMAIN_ENDPOINT: ${ES_DOMAIN_ENDPOINT}
ES_DOMAIN_INDEX_NAME: ${ES_INDEX_NAME}
ETX
インデックスを作成します。
curl -X PUT ${ES_DOMAIN_ENDPOINT}/${ES_INDEX_NAME}
{"acknowledged":true}
- データの投入
===============
3.1. 投入データの作成
FILE_INPUT="${ES_INDEX_NAME}-input.json" \
&& echo ${FILE_INPUT}
cat << EOF > ${FILE_INPUT}
{
"field1":2,
"@timestamp":"$(date +%Y-%m-%dT%H:%M:%S%z)"
}
EOF
cat ${FILE_INPUT}
JSONファイルを作成したら、フォーマットが壊れてないか必ず確認します。
jsonlint -q ${FILE_INPUT}
エラーが出力されなければOKです。
3.2. データの投入
タイプ名/IDを決定します。
ES_TYPE_NAME='testlog'
ES_RECORD_ID='1'
POST先のURLを組み立てます。
エンドポイント/インデックス名/タイプ名/IDとなります。
ES_URL_POST="${ES_DOMAIN_ENDPOINT}/${ES_INDEX_NAME}/${ES_TYPE_NAME}/${ES_RECORD_ID}" \
&& echo ${ES_URL_POST}
cat << ETX
ES_URL_POST: ${ES_URL_POST}
FILE_INPUT: ${FILE_INPUT}
ETX
curl -X PUT ${ES_URL_POST} -d @"${FILE_INPUT}"
{"_index":"handson-esdomain-20160411","_type":"testlog","_id":"1","_version":1,"
- kibana
=========
Amazon ESのダッシュボードで得た Kibana のURLにアクセスします。
- "Index name or pattern"に、以下を実行して表示される文字列を入力します。
echo ${ES_INDEX_NAME}
- "Time-field name"に、"@timestamp"を入力します。
インデックスが正しく作成されていれば"Create"ボタンが表示されるので、クリックします。
インデックスのカラム一覧が表示されればOKです。
"Discover"の下にある"field1"をクリックすると、Countを表わすグラフが表示されます。
- データの追記
===============
新しいデータを投入してみましょう。
5.1. 投入データの作成
cat << EOF > ${FILE_INPUT}
{
"field1":8,
"@timestamp":"$(date +%Y-%m-%dT%H:%M:%S%z)"
}
EOF
cat ${FILE_INPUT}
JSONファイルを作成したら、フォーマットが壊れてないか必ず確認します。
jsonlint -q ${FILE_INPUT}
エラーが出力されなければOKです。
5.2. データの投入
IDを更新します。
ES_RECORD_ID='2'
POST先のURLを組み立てます。
ES_URL_POST="${ES_DOMAIN_ENDPOINT}/${ES_INDEX_NAME}/${ES_TYPE_NAME}/${ES_RECORD_ID}" \
&& echo ${ES_URL_POST}
cat << ETX
ES_URL_POST: ${ES_URL_POST}
FILE_INPUT: ${FILE_INPUT}
ETX
curl -X PUT ${ES_URL_POST} -d @"${FILE_INPUT}"
{"_index":"handson-esdomain-20160411","_type":"testlog","_id":"2","_version":1,"created":true}
"Discover"の下にある"field1"に新しいデータが表示されればOKです。
- 検索
=======
GET先のURLを組み立てます。
ES_URL_GET="${ES_DOMAIN_ENDPOINT}/${ES_INDEX_NAME}/${ES_TYPE_NAME}" \
&& echo ${ES_URL_GET}
ES_SEARCH_WORD='8'
cat << ETX
ES_URL_GET: ${ES_URL_GET}
ES_SEARCH_WORD: ${ES_SEARCH_WORD}
ETX
curl -XGET "${ES_URL_GET}/_search?q=${ES_SEARCH_WORD}"
{"took":14,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":1,"max_score":0.11506981,"hits":[{"_index":"handson-esdomain-20160411","_type":"testlog","_id":"2","_score":0.11506981,"_source":{ "field1":8, "@timestamp":"2016-04-11T17:30:28+0900"}}]}}
完了
以上で、Elasticsearch Serviceドメインへのデータの投入と検索が完了しました。