ElasticSearch Cleanup (via serverless)

MD
S
Markdown

Serverless framework to cleanup elastic search Check disk space w/ serverless Look for indexes: _cat/indices?v Delete indexes: logstash-2022.02.1* Authorization: BasicAuth

// handler.js #!/usr/bin/env node 'use strict'; const axios = require('axios'); const { format, subDays } = require('date-fns'); module.exports.run = async (event) => { var date = subDays(new Date(), process.env.daysToCleanup || 20); const day = format(date, 'MM.dd'); const year = format(date, 'yyyy'); const uri = ${process.env.elasticEndpoint}/logstash-${year}.${day}*; try { console.log('uri', uri); await axios.delete(uri, { headers: { Authorization: Basic ${process.env.elasticUsernamePassword64}, }, data: { source: day, }, }); return { statusCode: 200, body: JSON.stringify( { message: 'Logs Cleaned!', input: event, }, null, 2 ), }; } catch (err) { return { statusCode: 500, body: JSON.stringify( { message: 'Failed to clean logs!', input: event, }, null, 2 ), }; } };

// package.json { "name": "telemetry-cleanup", "version": "1.0.0", "description": "", "main": "handler.js", "scripts": { "test": "echo "Error: no test specified" && exit 1" }, "author": "", "license": "ISC", "dependencies": { "axios": "^0.19.2", "date-fns": "^2.11.0" } }

// serverless.yaml service: telemetry-cleanup

provider: name: aws runtime: nodejs12.x stage: staging region: eu-west-2 environment: env: STAGING

package: include: - handler.js exclude: - serverless.yml - .gitignore

functions: cron: handler: handler.run events: - schedule: cron(0 8 * * ? *) environment: elasticEndpoint: https://... elasticUsernamePassword64: dGF daysToCleanup: 20

Created on 3/22/2021