AWS SDK for JavaScript 中不存在同步方法用于获取 AWS 日志分析查询结果,但可使用异步方法来实现同步效果。下面给出一个代码示例:
const AWS = require('aws-sdk');
const insights = new AWS.CloudWatchLogs({apiVersion: '2014-03-28', region: 'us-east-1'});
async function getQueryResults(queryId) {
let response = await insights.getQueryResults({queryId}).promise();
while (response.status === 'Running') {
await new Promise(resolve => setTimeout(resolve, 1000));
response = await insights.getQueryResults({queryId}).promise();
}
return response.results;
}
// 使用示例
(async () => {
const query = 'fields @timestamp, @message\n| sort @timestamp desc\n| limit 20';
const response = await insights.startQuery({logGroupName: '/aws/lambda/my-function', queryString: query}).promise();
const results = await getQueryResults(response.queryId);
console.log(results);
})();
上述代码中,我们使用 CloudWatchLogs 的 startQuery 方法来启动一个查询,返回的 response.queryId 为查询的唯一 ID。接着,我们编写了一个异步函数 getQueryResults,其中使用 getQueryResults 方法获取查询结果,并判断查询是否仍在运行中,如果正在运行,则等待 1 秒后重试。当查询结束后,函数返回查询结果。最后,我们将这两个方法组合起来,实现了同步获取 AWS 日志分析查询结果的效果。