Я пытаюсь получить информацию о ценах на машины AmazonEC2, используя пакет «@ aws -sdk / client-pricing-node».
Каждый раз я буду отправлять запрос на получение информации о ценах, обрабатывать его и отправлять запрос снова, пока не будет получена вся информация (NextToken больше не будет). Ниже приведен мой код.
const {
PricingClient,
} = require('@aws-sdk/client-pricing-node/PricingClient');
const {
GetProductsCommand,
} = require('@aws-sdk/client-pricing-node/commands/GetProductsCommand');
const agent = new https.Agent({
maxSockets: 30,
keepAlive: true,
});
const pricing = new PricingClient({
region: "us-east-1",
httpOptions: {
timeout: 45000,
connectTimeout: 45000,
agent,
},
maxRetries: 10,
retryDelayOptions: {
base: 500,
},
});
const getProductsCommand = new GetProductsCommand( { ServiceCode: 'AmazonEC2', });
async function sendRequest() {
let result = false;
while (!result) {
try {
const data = await pricing.send(getProductsCommand);
result = await handleReqResults(data);
} catch (error) {
console.error(error);
}
}
}
async function handleReqResults(data) {
// some data handling code here
// ...
//return false when there is "NextToken" in the response data
if (data.NextToken) {
setNextToken(data.NextToken);
return false;
}
return true;
}
Код будет выполняться некоторое время (переменное время), а затем остановится со следующей ошибкой:
{ Error: socket hang up
at createHangUpError (_http_client.js:332:15)
at TLSSocket.socketOnEnd (_http_client.js:435:23)
at TLSSocket.emit (events.js:203:15)
at TLSSocket.EventEmitter.emit (domain.js:448:20)
at endReadableNT (_stream_readable.js:1145:12)
at process._tickCallback (internal/process/next_tick.js:63:19)
code: 'ECONNRESET',
'$metadata': { retries: 0, totalRetryDelay: 0 } }
Я пытался запустить его на экземпляр виртуальной машины GCP, и такой проблемы не было. Но проблема возникает, когда я запускаю его на своем локальном компьютере.
Кто-нибудь знает, как решить эту проблему?
(Кстати: моя версия узла - v10.20.1)