Help us understand the problem. What is going on with this article?

Elasticsearch Service 6.8 に取り込んだログ(INDEX)を Curator で削除するメモ(Lambda Python 3.8 版)

Curator による取り込みログ(INDEX)削除の Elasticsearch Service 6.8 / Lambda Python 3.8 対応化メモを残しておきます。

旧記事:

手順

1. IAM Role の確認/作成

ログ取り込みで IAM Role は作成されてるはずですが、なければ作成します。

2. AWS Lambda ファンクションの作成

Lambda にアップロードする .zip ファイルの作成(Amazon Linux 2 上で)

Lambda用アップロードファイル.zip化
$ python3 -m venv dev
$ . dev/bin/activate
(dev) $ mkdir logrotate
(dev) $ cd logrotate/
(dev) $ pip install elasticsearch-curator requests_aws4auth -t ./
(省略)
(dev) $ rm -rf *.dist-info
(dev) $ vi logrotate.py
(ここで「logrotate.py」のコードを入力)
(dev) $ zip -r ../logrotate.zip
logrotate.py
import boto3
import curator
import os
from elasticsearch import Elasticsearch, RequestsHttpConnection
from requests_aws4auth import AWS4Auth

es_host = os.environ["ES_HOST"]
es_index = os.environ["ES_INDEX_PREFIX"] + "-"
rotation_period = int(os.environ["ROTATION_PERIOD"])
region = os.environ["AWS_REGION"]

def lambda_handler(event, context):
    awsauth = AWS4Auth(
        os.environ["AWS_ACCESS_KEY_ID"],
        os.environ["AWS_SECRET_ACCESS_KEY"],
        region,
        "es",
        session_token=os.environ["AWS_SESSION_TOKEN"]
    )

    es = Elasticsearch(
        hosts=[{"host": es_host, "port": 443}],
        http_auth=awsauth,
        use_ssl=True,
        verify_certs=True,
        connection_class=RequestsHttpConnection
    )
    runCurator(es)


def runCurator(es):
    ilo = curator.IndexList(es)
    ilo.filter_by_regex(kind="prefix", value=es_index)
    ilo.filter_by_age(source="name", direction="older", timestring="%Y%m%d", unit="days", unit_count=rotation_period)
    delete_indices = curator.DeleteIndices(ilo)
    delete_indices.do_action()

※Python コード自体は変わりませんが、.zip ファイルの作成方法が変わっています。

Lambda ファンクションの作成

ここから先は旧記事と同じ手順です。

先ほどの .zip ファイルをアップロードする形で作成します。
curator-log-rotate-1.png
ランタイムは Python 3.8、ハンドラはlogrotate.lambda_handlerを指定します。

※elasticsearch-curator の容量が大きくなった関係で、↑のスクリーンショットの頃とは違い、Python のコードは表示されない可能性が高いです。

  • 環境変数

curator-log-rotate-2.png
ES_INDEX_PREFIXで削除対象のログ(INDEX)のプレフィックス、ROTATION_PERIODで削除するまでの期間(日数)を指定します。

  • トリガー

「CloudWatch Events」で cron 式を使って、00:00 UTC を過ぎたあたりの時刻に、毎日実行するよう指定すると良いでしょう(画面は省略)。

  • 実行ロール

最初に確認/作成したものを使います。タイムアウトの時間も延長しておきます。
curator-log-rotate-3.png

  • ネットワーク

環境に合わせます。VPC を使う場合は、ALB の元記事を参考にしてください。

※実行時、まだ削除対象のログ(INDEX)がない場合はエラーが発生しますが、異常ではありません。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away