Last active
January 26, 2023 17:00
-
-
Save martinamps/0518d655390b383126b330ad60be74cd to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { RDSClient, paginateDescribeDBInstances, DescribeDBInstancesCommand } from "@aws-sdk/client-rds" | |
import { writeFileSync } from 'fs' | |
import axios from 'axios' | |
(async () => { | |
const rdsClient = new RDSClient(); | |
const dbs = []; | |
for await (const page of paginateDescribeDBInstances( { client: rdsClient }, {})) { | |
dbs.push(...page.DBInstances); | |
} | |
const outputCSV = []; | |
for (const db of dbs) { | |
const teamTag = db.TagList.find(o => o.Key == 'used_by_team' || o.Key == 'team'); | |
const envTag = db.TagList.find(o => o.Key == 'algo-environment' || o.Key == 'env'); | |
let env = ''; | |
if (envTag) { | |
env = envTag.Value; | |
} else if (/staging|prod/.test(db.DBName)) { | |
env = db.DBName.indexOf('prod') !== -1 ? 'prod' : 'staging' | |
} | |
const opts = { | |
params: { | |
query: `sum:aws.cost.amortized{aws_resource_id:${db.DBInstanceArn}}`, | |
from: Math.floor(+new Date()/1000) - 3600*24*30, | |
to: Math.floor(+new Date()/1000) | |
}, | |
headers: { | |
'DD-API-KEY': process.env.DD_API_KEY, | |
'DD-APPLICATION-KEY': process.env.DD_APP_KEY, | |
} | |
}; | |
const costResp = await axios.get(`https://api.datadoghq.com/api/v1/query`, opts); | |
const points = costResp?.data?.series[0]?.pointlist; | |
const cost = points ? points.reduce((a, b) => a + b[1], 0) : 'unknown'; | |
console.log(db.DBInstanceArn, cost); | |
outputCSV.push({ | |
arn: db.DBInstanceArn, | |
name: db.DBInstanceIdentifier, | |
class: db.DBInstanceClass, | |
engine: db.Engine, | |
team: teamTag ? teamTag.Value.replace(':team:', '') : '', | |
env, | |
'1mo_cost': cost, | |
}); | |
} | |
writeFileSync('dbs.json', JSON.stringify(dbs)); | |
writeFileSync('db_info.csv', convertToCSV(outputCSV)); | |
})(); | |
function convertToCSV(arr) { | |
const array = [Object.keys(arr[0])].concat(arr) | |
return array.map(it => { | |
return Object.values(it).toString() | |
}).join('\n') | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment