我创建了一个 API,它调用 get cloudWatch AWS API 并返回可以在我的应用程序上绘制的数据点。我对每个包都有单独的路由(如下面的路由代码所示)。此 API 使用 REST MVC 方法。
所以我正在用我的功能做几件事。
从 SQLite3 数据库中读取 EC2 实例数据以获取有关正在运行的实例(IP、instance_id、instance_launchtime)的信息,以便我可以将其放入 AWS 开发工具包中 getMetricStatistics API 所需的参数中。
然后将来自 step1 的数据放入参数数组中(3 个以 3 个不同的度量数据点响应)。这会循环遍历每个参数,将其插入到 getMetricStatistics API(一个接一个,因为 getMetricStatistics 不会一次接受多个指标)以获取该实例的数据点并将它们推送到数组中。
因为我相信数据库是异步的,这就是为什么我对它附加了一个承诺。当我将端点加载到浏览器中时,它只会继续加载并且不会显示任何数据。但是,当我刷新页面时,它会正确显示所有结果...
API的模型:
// Call AWS Cost Explorer API
const AWS = require('aws-sdk');
const config = require('./AWSconfig');
const database = require('./db');
const insightdb = database.insightdb;
AWS.config.update({
accessKeyId: config.accessKeyId,
secretAccessKey: config.secretAccessKey,
region: config.region,
});
//Linking AWS CloudWatch Service
var cloudWatch = new AWS.CloudWatch();
const packageById = (packageId, callback) => {
insightdb.all(
'SELECT * FROM ec2Instance WHERE package_id == ?',
packageId,
(err, rows) => {
if (err) {
callback(err, null);
} else {
callback(null, rows);
}
}
);
};
// Parameter class to feed into the CloudWatch getMetricStatistics function
const CWParams = function(reqDate, metricName,service,launchTime,instanceId) {
(this.EndTime = reqDate) /* required */,
(this.MetricName = metricName) /* required */,
(this.Namespace = service) /* required */,
(this.Period = 3600) /* required */,
(this.StartTime = launchTime) /* ${createDate}`, required */,
(this.Dimensions = [
{
Name: 'InstanceId' /* required */,
Value: instanceId /* required */,
},
]),
(this.Statistics = ['Maximum']);
};
//Exports variables to the controller (so they can be re-used)
module.exports = { cloudWatch, CWParams, packageById };
API 的路径:
module.exports = app => {
const insight = require('../controllers/insight.controller.js');
app.get('/insights/aws/:packageKey', insight.getAnalytics);
};
叮当猫咪
相关分类