[英]How do i get the maximum number of concurrent executions,minimum and average in AWS lambda using boto3
[英]Counting the number of concurrent Lambda function executions
根據AWS文檔的說明,默認情況下,每個帳戶一次可以執行1000個並發Lambda函數。 當然,這是一個軟限制,可以根據請求進行更改。
現在,我的問題是無論如何您如何監視並發的Lambda函數執行?
我假設這應該(使用某種方式)使用CloudWatch完成。 在CloudWatch的“ 指標”部分中,遵循以下路徑:
All > Lambda > Across All Functions
您可以通過名稱ConcurrentExecutions
查找度量。 我敢打賭,但與此同時,我沒有根據我做過的測試得出數字。 在我們到達那里之前,該指標在圖表上顯示的值不是整數,因此我想我在這里遺漏了一些東西。 但這很好。 讓我告訴您我已經進行的測試。
我在這樣的EC2實例上創建了一個簡單的NodeJs腳本:
const AWS = require('aws-sdk');
const https = require('https');
const sslAgent = new https.Agent({
keepAlive: true,
maxSockets: 200,
rejectUnauthorized: true,
});
sslAgent.setMaxListeners(0);
AWS.config.update({
region: 'us-east-1',
httpOptions: {
agent: sslAgent,
},
});
const lambda = new AWS.Lambda();
function call() {
return lambda.invoke({
FunctionName: "test",
Payload: JSON.stringify({
wait: 5000,
}),
}).promise();
}
(async () => {
let start = Date.now();
const promises = [...Array(200).keys()].map(i => {
return call(new Date(Date.now()).toISOString())
.then(data => {
console.log(`Success (${i})`);
})
.catch(err => {
console.log(`Error (${i}): ${err}`);
});
});
await Promise.all(promises);
let end = Date.now();
console.log((new Date(end - start).toISOString()).substr(11, 12));
})();
該腳本將調用Lambda函數(稱為test
)200次,而無需等待單個調用返回。 在服務器端,我在Lambda函數中具有以下代碼:
exports.handler = async (event, context, callback) => {
const response = {
statusCode: 200,
body: JSON.stringify('Hello from Lambda!'),
};
return new Promise((resolve) => {
setTimeout(() => {
callback(null, response);
resolve();
}, event.wait);
});
};
此Lambda函數將使調用者在輸入所經過的時間中保持掛起狀態(在這種情況下為5秒)。 我運行了此測試,並驗證了同時運行200個Lambda函數實例。 我通過轉到CloudWatch並查看生成的日志來驗證了這一點,並生成了200個日志流(每個執行都有一個單獨的日志流)。
但是,當我提到上述Metric時,該圖僅顯示68.7 ,首先顯示的是一個奇異的數字,其次不是200。那么這個數字是什么,我在哪里可以找到200?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.