ElasticSearch Cleanup (via serverless)
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