【Amazon Elasticsearch Service】Lambdaによるインデックスローテーション

AWS運用自動化サービス「Cloud Automator」

こんにちは、技術3課の城です。

以前、【Amazon Elasticsearch Service】CloudTrail、VPC Flowlogsを集約するというブログを書いたのですが、このままだとデータがたまる一方なので、Lambdaを利用したローテーションを実装してみました。
下記のドキュメントほぼそのままなのですが、必要なモジュールやライブラリを含めるなど、Lambdaをあまり利用していなった私にとっては色々と調べつつの実装だったので、記録として残しておきたいと思います。
https://docs.aws.amazon.com/ja_jp/elasticsearch-service/latest/developerguide/curator.html

※Python2.7での実装となっているため、ご注意ください。

開発環境

開発環境としてはAmazonLinux2のEC2インスタンスを利用しました。
Pythonのバージョンは2.7.14です。

pipのインストール

モジュールやライブラリのインストールに必要なので、pipをインストールします。

インストールスクリプトのダウンロード

インストール

Lambbda関数用ディレクトリの作成、及び、移動

Lambda関数を作成するのに利用するディレクトリを作成、移動します。

必要なモジュール、ライブラリのインストール

Curatorを利用するのに必要なモジュールをインストールします。

*.dist-infoの削除

*.dist-infoは不要なので、削除します。

lambda_function.pyの作成

ほぼほぼドキュメントのままですが、下記は30日分のインデックスを保持する内容となります。
保持期間を変更する場合はunit_countの値を変更します。

デプロイパッケージの作成

デプロイパッケージを作成し、ローカルにダウンロードしておきます。

私はWindowsユーザーなので、TeratermのSSH SCPやWinSCPを使ってダウンロードしてます。

IAMロールの作成

Lambda関数が利用するIAM Roleを作成します。

IAMポリシーの作成

先にロールにアタッチするIAMポリシーを作成しておきます。
IAMダッシュボードにて左側サイドバーの[ポリシー]⇒[ポリシー作成]をクリックします。

[JSON]タブをクリックし、下記の内容をエディタに貼り付け、[ポリシーの確認]をクリックします。

[名前]、[説明]を記載し、[ポリシーの作成]をクリックします。

IAMロールの作成

IAMダッシュボードにて左側サイドバーの[ロール]⇒[ロールの作成]をクリックします。

[このロールを使用するサービスを選択]でLambdaを選択し、[次のステップ: アクセス権限]をクリックします。

先ほど作成したポリシー[aes-index-rotation]をチェックし、[次のステップ: タグ]をクリックします。

タグの追加はオプション設定なので、今回はスキップします。
[次のステップ: 確認]をクリックします。

[ロール名]を記入して、[ロールの作成]をクリックします。

Lambda関数の作成

関数の作成

Lambdaダッシュボードにて、左側サイドバーの[関数]⇒[関数の作成]をクリックします。

下記内容を入力し、[関数の作成]をクリックします。
関数名:任意の名前
ランタイム:Python2.7
実行ロール:既存のロールを使用する
既存のロール:前項で作成したロール

デプロイパッケージのアップロード

コードエントリタイプを[.zip ファイルをアップロード]をプルダウンメニューから選択し、アップロードをクリックし、先ほど作成したデプロイパッケージ[aes_rotate.zip]を選択し、[保存]をクリックします。

トリガー(CloudWatch Events)の追加

[+ トリガーを追加]をクリックします。

トリガーの選択欄に[CloudWtatch Events]を選択し、下記内容を入力、[追加]をクリックします。

ルール:新規のルールの作成
ルール名:任意の名前
ルールタイプ:スケジュール式
スケジュール式(例):cron(5 18 * * ? *)

スケジュール式はUTCでの記載となり、上記例では毎日AM3:05に実行となります。
記載方法の詳細については下記ドキュメントをご覧ください。
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/events/ScheduledEvents.html

以上で実装完了となります。

さいごに

ローテーションについてはどうしようかと悩んでいたのですが、ドキュメントを探してみるとあるあたり、さすがAWSだなと感じています。
丁寧に書かれたドキュメントは本当にありがたいものですね。

AWS運用自動化サービス「Cloud Automator」