ZendeskのチケットデータをAmazon Elasticsearch Serviceへ自動的にアップロードする | Developers.IO

Amazon Elasticsearch ServiceはAmazon VPCプライベートサブネットに作成; Amazon API Gateway経由でAWS Lambdaを実行させる; Zendeskの自動化とwebhookでAmazon Elasticsearch Serviceへデータを入れるまでを自動化する; Amazon Elasticsearch Serviceへ入れるデータスキーマ … 続きを読む

センサデータを fluentd 経由で Amazon Elasticsearch Service に送信して可視化

1. はじめに

以前の記事 で、RaspberryPi で収集したセンサデータを、 さくらVPS上に構築した Elasticsearch に送信して、Kibana で可視化しました。
今回は勉強を兼ねて、データを Amazon Elasticsearch Service ( Amazon ES ) に送信するように構成を変更します。

2. 全体の構成

image.png

3. 設定

3-1. Server side ( Amazon ES )

Amazon ES を立ち上げます。

Amazon ES ダッシュボード

  • 画面右上で、東京リージョン( ap-northeast-1 )が選択されていることを確認します
  • 新しいドメインの作成ボタンを押します
image

ドメインの定義

  • ドメイン名と Elasticsearch のバージョンを設定します
image

クラスターの設定

  • 今回は最小構成にします
image

アクセスの設定

  • ダッシュボードは特定メンバーに公開したかったので、パブリックアクセスとして、IPアドレスでアクセス制限を設定しました
  • 本当は IAM Role で制限したかったのですが、Webブラウザからのアクセスが面倒になるので今回は見送りました ( ブラウザはIAM認証できない )
image

完了確認

  • 10分ほど待ちます
image
  • 設定の状態が「アクティブ」になれば完了です
image

3-2. Sensor side ( Raspberry PI )

前提条件

以前の記事 の状態が前提です。今回はこれに変更を加えます。

プラグインのインストール

  • fluentd から Elasticsearch に直接格納するためのプラグインをインストールします
  • なお、IAM 認証をする場合は fluent-plugin-aws-elasticsearch-service を使うようです
sudo fluent-gem install fluent-plugin-elasticsearch

fluentd の設定

  • fluentd の設定ファイルを編集して、データの送信先を変更して、fluentd を再起動します
/home/pi/fluent/fluent.conf
<source>
  @type tail
  format json
  path /home/pi/myroom.log
  pos_file /home/pi/myroom.log.pos
  tag log.myroom
</source>

<match log.myroom>
  @type copy
  <store>
    @type elasticsearch
    type_name myroom
    logstash_format true
    logstash_prefix myroom
    reload_connections false
    hosts https://search-myroom-********.ap-northeast-1.es.amazonaws.com
  </store>
</match>

4. 確認

データが送信されていることを確認しました。
image.png

続きを読む

RaspberryPi で収集したセンサデータを Amazon ES に格納

1. はじめに

前回の記事 では、RaspberryPi で収集したセンサデータを、 さくらVPS上に構築した Elasticsearch に格納しました。
今回は勉強を兼ねて、データを Amazon Elasticsearch Service ( Amazon ES ) に格納するように構成変更します。

2. 全体の構成

image.png

3. 設定

3-1. Server side ( Amazon ES )

Amazon ES を立ち上げます。今回はそれだけです。

Amazon ES ダッシュボード

  • 画面右上で、東京リージョン( ap-northeast-1 )が選択されていることを確認します
  • ドメインの作成ボタンを押します
image

ドメインの定義

  • ドメイン名と Elasticsearch のバージョンを設定します
image

クラスターの設定

  • 今回は最小構成にします
image

アクセスの設定

  • ダッシュボードは特定メンバーに公開したかったので、パブリックアクセスとして、IPアドレスでアクセス制限を設定しました
  • 本当は IAM Role で制限したかったのですが、Webブラウザからのアクセスが面倒になるので今回は見送りました ( ブラウザはIAM認証できない )
image

完了確認

  • 10分ほど待ちます
image
  • 設定の状態が「アクティブ」になれば完了です
image

3-2. Sensor side ( Raspberry PI )

前提条件

以前の記事 の状態が前提です。今回はこれに変更を加えます。

プラグインのインストール

  • fluentd から Elasticsearch に直接格納するためのプラグインをインストールします
  • なお、IAM 認証をする場合は fluent-plugin-aws-elasticsearch-service を使うようです
sudo fluent-gem install fluent-plugin-elasticsearch

fluentd の設定

  • fluentd の設定ファイルを編集して、データの送信先を変更して、fluentd を再起動します
/home/pi/fluent/fluent.conf
<source>
  @type tail
  format json
  path /home/pi/myroom.log
  pos_file /home/pi/myroom.log.pos
  tag log.myroom
</source>

<match log.myroom>
  @type copy
  <store>
    @type elasticsearch
    type_name myroom
    logstash_format true
    logstash_prefix myroom
    reload_connections false
    hosts https://search-myroom-q6f5bk4cwppojeescffv24dmkm.ap-northeast-1.es.amazonaws.com
  </store>
</match>

4. 確認

データが送信されていることを確認しました。
image.png

続きを読む

Amazon Linux 2 に elasticsearchのbenchmarkツールrallyをインストールして、Amazon Elasticsearch Serviceの性能評価を行う.

Amazon Linux 2 に elasticsearchのbenchmarkツールrallyをインストールして、Amazon Elasticsearch Serviceの性能評価を行う.

Amazon Elasticssearch Serviceのパフォーマンスを調査する為に、Elasticsearchが提供するベンチマークツールのrallyを導入したEC2インスタンスを立ち上げ、性能評価を行います。

AMIは、最近発表された
Amazon Linux 2 LTS Candidate AMI 2017.12.0 (HVM), SSD Volume Type - ami-7707a10f
を利用してみます.

rallyは、python3上で動作する為、python3をインストールが必要になります.
AMIとして利用するAmazon Linux2に標準でインストールされているpythonは、version2系(Python 2.7.5)の為、python3系をインストールします。

$ sudo amazon-linux-extras install python3
$ python3 --version
Python 3.6.2

rally用のpython3環境とする為、python3の仮想環境を作ります.

$ python3 -m vent .py-esrally-venv
$ source .py-esrally-venv/bin/activate

rallyのインストール,実行時に不足するライブラリをインストールします.

$ sudo yum install gcc python3-devel git

rallyをインストールします.

(.py-esrally-venv) $ pip3 install esrally
(.py-esrally-venv) $ esrally configure
 # Press Enter to skip. 

elasticsearch serviceへのアクセスは、 Signature Version 4でアクセスする必要がある為、rallyから直接接続するすることができません. そこで Elasticsearch serviceにアクセスする為のproxyを立ち上げます.
今回は、 nodeベースのproxy aws-es-proxyを利用します.

nodeをインストールする為にnvmのインストールを行い、その後、nodeをインストールし、 aws-es-proxyを導入します.

(.py-esrally-venv) $ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash
(.py-esrally-venv) $ source .bashrc
(.py-esrally-venv) $ nvm install  v8.9.3
(.py-esrally-venv) $ npm init
(.py-esrally-venv) $ npm install --save aws-es-proxy

proxyを起動します.
なお、aws credentials情報(access_key_id, aws_secret_access_key)は、aws cliで設定しておいてください.

(.py-esrally-venv) $ node_modules/aws-es-proxy/bin/aws-es-proxy --port 9200 --profile default --region [region]  [endpoint]

proxy経由でElasticsearch Serviceにアクセスできることを確認します.

(.py-esrally-venv) $ curl http://localhost:9200/

rallyを実行します. target-hostsとして、proxyのアドレスを指定します。

(.py-esrally-venv) $ esrally --pipeline=benchmark-only --target-hosts=localhost:9200
    ____        ____
   / __ ____ _/ / /_  __
  / /_/ / __ `/ / / / / /
 / _, _/ /_/ / / / /_/ /
/_/ |_|__,_/_/_/__, /
                /____/

[INFO] Writing logs to /home/xxxxx/.rally/logs/rally_out_20171225T052238Z.log

************************************************************************
************** WARNING: A dark dungeon lies ahead of you  **************
************************************************************************

Rally does not have control over the configuration of the benchmarked
Elasticsearch cluster.

Be aware that results may be misleading due to problems with the setup.
Rally is also not able to gather lots of metrics at all (like CPU usage
of the benchmarked cluster) or may even produce misleading metrics (like
the index size).

************************************************************************
****** Use this pipeline only if you are aware of the tradeoffs.  ******
*************************** Watch your step! ***************************
************************************************************************
    :
  • 参考
    利用させていただいたproxy.
    https://github.com/joona/aws-es-proxy
    esrallyのドキュメント
    https://esrally.readthedocs.io/en/latest/index.html

  • 残件
    Amazon Elasticsearch Serviceの構成変更での性能評価を目的としている為、異なるproxyを利用する必要はないと想定しているが、go言語で実装された aws-es-proxyを使った場合の比較などもやっておくべきかもしれない. proxyで、パフォーマンスに差が出ると、性能指標の基準が低くなってしまうはず..
    trackを指定することで、異なるデータパターンでの評価を行うことができるので、サービスでの利用方法に近いtrackでの評価を実施すべき..デフォルト(オプション指定無)は、geonames.

  • 備考
    インスタンスタイプがt2.microだと、途中で異常終了してしまうようです. 評価中、CPU Creditを、使い切って途中で異常終了しました.
    また、Amazon Elasticsearch Service側の構成として、簡単に1台で立ち上げられますが、1台構成の場合、StatusがYellowの為、デフォルトでは、測定できません。 以下のようなERRORを出力して、測定が中断します.
    [ERROR] Cannot race. ('Could not execute benchmark', Cluster did not reach status [green]. Last reached status: [yellow])
    どうしても1台構成で実行する場合は、rally実行時に、 --cluster-health=yellow optionを付与する必要があります。

続きを読む

Amazon Elasticsearch ServiceのKibanaへ、SSH port forwardingでトンネルを掘り、踏み台サーバ経由でアクセスする

TL;DR

たまにSSH port forwardingのやり方を聞かれるのでメモがてら。

3+1行で説明するとこんな感じ。
SSH port forwardingでトンネルを掘る

ssh -i ~/Path_to_SSH_key/id_xxxx {account_name}@{踏み台サーバIP or DNS name} -L 8888:{Kibana private IP}:80 -N

ブラウザで(トンネルを通ってKibanaへアクセスする

http://localhost:8888/_plugin/kibana

Kibanaへのアクセス

今のところKibanaへアクセスするニーズがあるのは開発者のみ。
開発者は踏み台サーバにアカウントを持っている。

というわけで ssh port forwardingでアクセスできれば良しとしているケースです。

手順

1. KibanaのPrivate IPを確認

※東京リージョンの場合
https://ap-northeast-1.console.aws.amazon.com/es/home
My domains > “Kibanaにアクセスしたいドメイン” > Overview

Screen Shot 2017-12-20 at 17.50.05.png

赤枠部分のドメインをメモし、IPを確認する

$ host {赤枠部分のドメイン}.es.amazonaws.com
{赤枠部分のドメイン}.es.amazonaws.com has address 172.xx.xx.xx
{赤枠部分のドメイン}.es.amazonaws.com has address 172.xx.xx.xx

2. SSH port forwardingでトンネルを掘る

ssh -i ~/Path_to_SSH_key/id_xxxx {account_name}@{踏み台サーバIP or DNS name} -L 8888:{Kibana private IP:Port}:80 -N


e.g)
ssh -i ~/.ssh/id_rsa nntsugu@ec2-xx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com -L 8888:xxx.xxx.xxx.xxx:80 -N

3. ブラウザで(トンネルを通ってKibanaへアクセスする

http://localhost:8888/_plugin/kibana

お手軽に検索

Kibana > Dev Tools > Console
からだとJSONでクエリを投げられるのでとっつきやすい。かもしれない。

GET _search
{
  "query": {
    "match": {
      "severity": "ERROR"
    }
  }
}

続きを読む

初めてのパブリッククラウド

入社前は、オンプレミスやプライベートクラウドでサービスを運用しているプロジェクトのみに従事してきましたが、ピクスタで初めてパブリッククラウドでのサービス運用に携わりました。 今回は、私がピクスタに入社して初めて使用したパブリッククラウド上のサービスのうち、Amazon Elasticsearch Service(以下、AWS ES)での … 続きを読む

AWS LambdaからAmazon Elasticsearch Serviceにつないでみる

この投稿は、AWS Lambda Advent Calendar 2017の初日の投稿になります。

初日なので簡単なのをば!

Elasticsearchは今までローカルやプライベートネットワーク上にインストールして使うことが多く、マネージドサービスを使ったことがなかったので、今回Amazon Elsaticsearch Serviceを使ってみました。

で、色々なサイトを参考させてもらい、設定〜インデックス作成まで実施したので、その備忘録を載せます。

準備

準備ですが、クラスタを作成するだけです。当然t2.smallで作成。Elasticsearchのバージョンは5.5を選択しました。他はデフォルトの設定です。

スクリーンショット 2017-11-19 18.52.14.png

Lambdaからアクセスしてインデックスを作成してみる

AWS Lambdaに適当な関数を作成して、とりあえずアクセスしてみます。こちらを参考にさせてもらいました。

Lambda から elasticsearch service に何かする [cloudpack OSAKA blog]

このコードでアクセスするためには、STSのAssumeRolests:AssumeRoleがIAM Roleに付与されている必要があります。ポイントとなるポリシーの設定はこんな感じです。(もちろんテスト的な設定なので、本来はきちんとアクセス権限を設計しましょう)

        {
            "Action": [
                "sts:AssumeRole"
            ],
            "Resource": [
                "*"
            ],
            "Effect": "Allow"
        }

ソースコードはこんな感じで動きました。ENDPOINT、REGION、ROLE_ARN、S3_BUCKET、S3_OBJECTは環境変数からの定義となります。

import os
import sys

import boto3

sys.path.append(os.path.join(
    os.path.abspath(os.path.dirname(__file__)), 'lib'))
from elasticsearch import Elasticsearch, RequestsHttpConnection
from requests_aws4auth import AWS4Auth

ENDPOINT = os.environ['ES_ENDPOINT']
REGION = os.environ['REGION']
ROLE_ARN = os.environ['ROLE_ARN']
S3_BUCKET = os.environ['S3_BUCKET']
S3_OBJECT = os.environ['S3_OBJECT']


def run(event, context):
    es_client = connect_es(ENDPOINT)

    if event['method'] == "create-index":
        s3 = boto3.client('s3')
        index_doc = s3.get_object(Bucket=S3_BUCKET, Key=S3_OBJECT)['Body'].read()
        print(index_doc)
        create_index(es_client, event['index'], index_doc)
        return "Success"
    return es_client.info()

def connect_es(es_endpoint):

    print('Connecting to the ES Endpoint {0}'.format(es_endpoint))
    credentials = get_credential()
    awsauth = AWS4Auth(credentials['access_key'], credentials['secret_key'], REGION, 'es', session_token=credentials['token'])

    try:
        es_client = Elasticsearch(
            hosts=[{'host': es_endpoint, 'port': 443}],
            http_auth=awsauth,
            use_ssl=True,
            verify_certs=True,
            connection_class=RequestsHttpConnection)
        return es_client
    except Exception as E:
        print("Unable to connect to {0}".format(es_endpoint))
        print(E)
        exit(3)

def create_index(es_client, index_name, index_doc):
 try:
  res = es_client.indices.exists(index_name)
  print("Index Exists ... {}".format(res))
  if res is False:
   es_client.indices.create(index_name, body=index_doc)
 except Exception as E:
  print("Unable to Create Index {0}".format("metadata-store"))
  print(E)
  exit(4)

def get_credential():
    client = boto3.client('sts')
    assumedRoleObject = client.assume_role(
        RoleArn=ROLE_ARN,
        RoleSessionName="Access_to_ES_from_lambda"
    )
    credentials = assumedRoleObject['Credentials']
    return { 'access_key': credentials['AccessKeyId'],
             'secret_key': credentials['SecretAccessKey'],
             'token': credentials['SessionToken'] }

コードを見れば分かる通り、S3にアクセスするため、権限の設定が必要になります。

S3に配置するJSONデータの準備

今回はS3にインデックスの設定を保持します。こんな感じのdata.jsonを配置します。この辺はAWS Solution Architectのブログを参考にします。

【AWS Database Blog】AWS Lambda と Pythonを使ってメタデータをAmazon Elasticsearch Serviceにインデクシング

{
    "dataRecord": {
        "properties": {
            "createdDate": {
                "type": "date",
                "format": "dateOptionalTime"
            },
            "objectKey": {
                "type": "string",
                "format": "dateOptionalTime"
            },
            "content_type": {
                "type": "string"
            },
            "content_length": {
                "type": "long"
            },
            "metadata": {
                "type": "string"
            }
        }
    },
    "settings": {
        "number_of_shards": 1,
        "number_of_replicas": 0
    }
}

アクセスしてみる

アクセスしたところ、無事インデックスが作成されました。sample-indexが増えているのがわかります。

スクリーンショット 2017-12-01 18.29.10.png

まとめ

今回初めてAmazon Elasticsearch Serviceを利用しましたが、準備段階の手間が省けているのはありがたいですね。またAWS上のサービスなので、Lambdaなどの別サービスからのアクセスも簡単でした。

おまけ

ちなみに最初、受け取ったElasticsearch ClientをそのままReturnしていたのですが、その時のエラーメッセージがこんな感じ。一見するとJSONで保持できない=パラメータが異なった?と受け取れます。

{
  "errorMessage": "<Elasticsearch([{'host': 'HOSTNAME.us-east-1.es.amazonaws.com', 'port': 443}])> is not JSON serializable",
  "errorType": "TypeError",
  "stackTrace": [
    [
      "/var/lang/lib/python3.6/json/__init__.py",
      238,
      "dumps",
      "**kw).encode(obj)"
    ],
    [
      "/var/lang/lib/python3.6/json/encoder.py",
      199,
      "encode",
      "chunks = self.iterencode(o, _one_shot=True)"
    ],
    [
      "/var/lang/lib/python3.6/json/encoder.py",
      257,
      "iterencode",
      "return _iterencode(o, 0)"
    ],
    [
      "/var/runtime/awslambda/bootstrap.py",
      110,
      "decimal_serializer",
      "raise TypeError(repr(o) + " is not JSON serializable")"
    ]
  ]
}

これ、原因が

    return es_client

es_clientをそのまま返していたから。

    return es_client.info()

とすれば動くのですが、こんなの気づけんって。。。せめてピンポイントでエラー発生行番号が出力されれば話は別ですが、不親切すぎなエラーメッセージ(^^;どこかで改善されることを期待っす。

続きを読む

[re:inventレポート] ElasticSearchServiceとKibanaを用いたリアルタイムデータ分析

re:invent参加中です。
今は現地で朝4時ですが目が覚めてしまったので、初日のセッション参加レポートを書きます。

参加したのはこちらのセッション。
「ABD302 – Real-Time Data Exploration and Analytics with Amazon Elasticsearch Service and Kibana」

ElasticSearchとKibanaは2年くらい前にハンズオン参加して少し使ってみただけくらいでその後触れることはなかったのですが、今回ちょうど時間と場所が自分の予定と合ったので参加してみることにしてみました。

機能紹介

まずはAWS Elasticsearch Serviceってこんなものですよという紹介から。

IMG_0037.JPG

次にElasticsearchではprimary shardとreplica shardが作られ、各インスタンスに分散して配置されるという説明がありました。

IMG_0040.JPG

レポート書きながらどういうものなのか復習してみると、まさに以下のサイトでまとめられている内容ですね。
https://medium.com/hello-elasticsearch/elasticsearch-afd52d72711

おそらくElasticsearch慣れている方には一般的な話だったのではないかなと思います。

あとは、こういうユースケースではこういうアーキテクチャですという説明や、その一例としてWebアプリのログをKibanaで可視化したデモがありました。デモはJMeterで負荷をかけて数値が増えてますねというオーソドックスなシナリオでしたので目新しさはなかったです。

ここまでだと、ElasticsearchServiceの基本を紹介するセッションなのかな?という印象でした。

実運用で使うときのサイジングの目安

ここが個人的にはすごくよかったです。
実際に実運用で使おうと思った際に自分として一番不安になる点がノウハウとして共有されているのはすごく価値がありました。

自分自身あまり理解できていない部分も多いのですが、リファレンスになりそうなのでスライド載せておきます。

インスタンス数

IMG_0043.JPG

shards数

IMG_0044.JPG

インスタンスサイズ

IMG_0045.JPG

想定するアクセスは書き込みor読み込みどちらが多いのか

IMG_0046.JPG

マスターノードの推奨インスタンスサイズ

IMG_0049.JPG

セキュリティ

publicアクセス可能にした場合はIAMでのユーザ・アクセス元制御をしましょうという話からの・・

[NEW] VPCサポート

ここで新機能がさらっと出てきました!! 
ElasticsearchServiceがVPCの中(Privateな環境)に配置できるようになりましたよという話。

あまりに聞いている人の反応が薄いので以前から発表されていたのかな?と思いましたが、どうやらそうではないようです。

IMG_0047.JPG

監視

Cloudwatch Alarmの設定例

これも個人的にはすごくためになる情報でした。監視しておくべきポイント・最初の目安となる判断基準があるのはよいことです。
IMG_0050.JPG

感想

正直時間余ったので出てみるか、というくらいで直前に席を予約して参加したセッションではあるのですが、実案件適用の際にためになる情報があつまっているのは素晴らしいことだと思います。あと、こんなにしれっと新発表していいのですか?という気持ちになりました(keynoteで発表あるのかな・・?

続きを読む

Amazon Elasticsearch Service とlambda(Python3) を一瞬で疎通するメモ

Amazon Elasticsearch Serviceと Lambda(Python3)を一瞬で疎通するメモ

要件

  • AWS Lambdaと AWS Elasticsearch Serviceの連携ができること
  • ローカルPCで下記が出来ること
    • curlで Elasticsearch Serviceに接続可能
    • kibanaを利用可能
    • python-lambda-localで Lambdaを実行し、Elasticsearch Serviceに接続可能

Elasticsearch Serviceアクセスポリシー設定

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "es:*",
      "Resource": "arn:aws:es:ap-northeast-1:[アカウントID]:domain/[ESドメイン]/*",
      "Condition": {
        "IpAddress": {
          "aws:SourceIp": [
            "[アクセス元IPアドレス]"
          ]
        }
      }
    },
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::[アカウントID]:user/[ユーザ]"
      },
      "Action": "es:ESHttpGet",
      "Resource": "arn:aws:es:ap-northeast-1:[アカウントID]:domain/[ESドメイン]/*"
    }
  ]
}
  • Elasticsearch Serviceのドメインを最小構成で起動しておく
  • 下記ポリシーを持った IAMユーザを作成
    • AWSLambdaFullAccess
    • AmazonESFullAccess

Elasticsearch Service動作確認

  • ローカルPCから curlでの接続
$ curl -XGET https://xxxx.ap-northeast-1.es.amazonaws.com/_aliases
# {".kibana":{"aliases":{}}}
  • kibanaはブラウザでいい感じに動くことを確認する

Lambda実装サンプル

import os
from botocore.awsrequest import AWSRequest
from botocore.auth import SigV4Auth
from botocore.endpoint import BotocoreHTTPSession
from botocore.credentials import Credentials

def handler(event, context):
    url = os.environ["ES_ENDPOINT_URL"] + "/_aliases" # エイリアス一覧
    request = AWSRequest(method="GET", url=url)

    if ("AWS_ACCESS_KEY_ID" in os.environ):
        credentials = Credentials(os.environ["AWS_ACCESS_KEY_ID"], os.environ["AWS_SECRET_ACCESS_KEY"], os.environ["AWS_SESSION_TOKEN"])
        SigV4Auth(credentials, "es", os.environ["AWS_REGION"]).add_auth(request)

    response = BotocoreHTTPSession().send(request.prepare())
    return response.json()
  • 下記ポリシーを持った IAMロールを作成

    • AmazonESFullAccess
  • Lambda環境変数に設定
    • ES_ENDPOINT_URL
    • AWS_ACCESS_KEY_ID
    • AWS_SECRET_ACCESS_KEY
    • AWS_SESSION_TOKEN
  • Python以外だと署名バージョン4 の実装が若干面倒かも

Lambda動作確認

  • AWSデベロッパーコンソールに Lambdaソースを貼り付けてテスト
{
  ".kibana": {
    "aliases": {}
  }
}
  • ローカルPCから python-lambda-localで実行
$ export ES_ENDPOINT_URL=https://xxxx.ap-northeast-1.es.amazonaws.com
$ echo "{}" > event.json
$ python-lambda-local -f handler index.py event.json
# [root - INFO - 2017-11-xx xx:xx:xx,xxx] Event: {}
# [root - INFO - 2017-11-xx xx:xx:xx,xxx] START RequestId: xxxx
# [botocore.vendored.requests.packages.urllib3.connectionpool - INFO - 2017-11-xx xx:xx:xx,xxx] Starting new HTTPS connection (1): xxxx.ap-northeast-1.es.amazonaws.com
# [root - INFO - 2017-11-xx xx:xx:xx,xxx] END RequestId: xxxx
# [root - INFO - 2017-11-xx xx:xx:xx,xxx] RESULT:
# {'.kibana': {'aliases': {}}}
# [root - INFO - 2017-11-xx xx:xx:xx,xxx] REPORT RequestId: xxxx    Duration: 383.92 ms
  • ここまでやったら Lambda関数をエクスポートして 以後は CloudFormationでデプロイするとあとあとよい
  • ElasticSearchは忘れず止めておく😇

参考リンク

続きを読む