faastjs
Version:
Serverless batch computing made simple.
63 lines • 8.51 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.makeTrampoline = exports.INVOCATION_TEST_QUEUE = exports.filename = void 0;
const client_sqs_1 = require("@aws-sdk/client-sqs");
const process_1 = require("process");
const error_1 = require("../error");
const serialize_1 = require("../serialize");
const aws_queue_1 = require("./aws-queue");
const aws_shared_1 = require("./aws-shared");
exports.filename = module.filename;
exports.INVOCATION_TEST_QUEUE = "*test*";
const CallIdAttribute = "callId";
function errorCallback(err) {
if (err.message.match(/SIGKILL/)) {
return new error_1.FaastError({ cause: err, name: error_1.FaastErrorNames.EMEMORY }, "possibly out of memory");
}
return err;
}
function makeTrampoline(wrapper) {
async function trampoline(event, context) {
const startTime = Date.now();
const region = process_1.env.AWS_REGION;
context.callbackWaitsForEmptyEventLoop = false;
const executionId = context.awsRequestId;
const { logGroupName, logStreamName } = context;
const logUrl = (0, aws_shared_1.getExecutionLogUrl)(region, logGroupName, logStreamName);
const callingContext = {
startTime,
logUrl,
executionId,
instanceId: logStreamName
};
if (CallIdAttribute in event) {
const call = event;
const cc = { call, ...callingContext };
await execute(cc, wrapper);
}
else {
const snsEvent = event;
for (const record of snsEvent.Records) {
const call = (0, serialize_1.deserialize)(record.Sns.Message);
const cc = { call, ...callingContext };
await execute(cc, wrapper);
}
}
}
return { trampoline };
}
exports.makeTrampoline = makeTrampoline;
async function execute(cc, wrapper) {
const { call } = cc;
const { ResponseQueueId: Queue } = call;
if (Queue === exports.INVOCATION_TEST_QUEUE) {
return;
}
const region = process_1.env.AWS_REGION;
const sqs = new client_sqs_1.SQS({ apiVersion: "2012-11-05", maxAttempts: 6, region });
await wrapper.execute(cc, {
errorCallback,
onMessage: msg => (0, aws_queue_1.sendResponseQueueMessage)(sqs, Queue, msg, cc)
});
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLXRyYW1wb2xpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzL2F3cy10cmFtcG9saW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLG9EQUEwQztBQUMxQyxxQ0FBOEI7QUFDOUIsb0NBQXVEO0FBQ3ZELDRDQUEyQztBQUUzQywyQ0FBdUQ7QUFDdkQsNkNBQWtEO0FBRXJDLFFBQUEsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7QUFFM0IsUUFBQSxxQkFBcUIsR0FBRyxRQUFRLENBQUM7QUFFOUMsTUFBTSxlQUFlLEdBQTBDLFFBQVEsQ0FBQztBQUV4RSxTQUFTLGFBQWEsQ0FBQyxHQUFVO0lBQzdCLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUU7UUFDOUIsT0FBTyxJQUFJLGtCQUFVLENBQ2pCLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsdUJBQWUsQ0FBQyxPQUFPLEVBQUUsRUFDN0Msd0JBQXdCLENBQzNCLENBQUM7S0FDTDtJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2YsQ0FBQztBQUVELFNBQWdCLGNBQWMsQ0FBQyxPQUFnQjtJQUMzQyxLQUFLLFVBQVUsVUFBVSxDQUFDLEtBQThCLEVBQUUsT0FBZ0I7UUFDdEUsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzdCLE1BQU0sTUFBTSxHQUFHLGFBQUcsQ0FBQyxVQUFXLENBQUM7UUFDL0IsT0FBTyxDQUFDLDhCQUE4QixHQUFHLEtBQUssQ0FBQztRQUMvQyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDO1FBQ3pDLE1BQU0sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQ2hELE1BQU0sTUFBTSxHQUFHLElBQUEsK0JBQWtCLEVBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxhQUFhLENBQUMsQ0FBQztRQUN2RSxNQUFNLGNBQWMsR0FBRztZQUNuQixTQUFTO1lBQ1QsTUFBTTtZQUNOLFdBQVc7WUFDWCxVQUFVLEVBQUUsYUFBYTtTQUM1QixDQUFDO1FBQ0YsSUFBSSxlQUFlLElBQUksS0FBSyxFQUFFO1lBQzFCLE1BQU0sSUFBSSxHQUFHLEtBQXFCLENBQUM7WUFDbkMsTUFBTSxFQUFFLEdBQW1CLEVBQUUsSUFBSSxFQUFFLEdBQUcsY0FBYyxFQUFFLENBQUM7WUFDdkQsTUFBTSxPQUFPLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQzlCO2FBQU07WUFDSCxNQUFNLFFBQVEsR0FBRyxLQUFpQixDQUFDO1lBQ25DLEtBQUssTUFBTSxNQUFNLElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRTtnQkFDbkMsTUFBTSxJQUFJLEdBQWlCLElBQUEsdUJBQVcsRUFBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUMzRCxNQUFNLEVBQUUsR0FBbUIsRUFBRSxJQUFJLEVBQUUsR0FBRyxjQUFjLEVBQUUsQ0FBQztnQkFDdkQsTUFBTSxPQUFPLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQzlCO1NBQ0o7SUFDTCxDQUFDO0lBQ0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQzFCLENBQUM7QUE1QkQsd0NBNEJDO0FBRUQsS0FBSyxVQUFVLE9BQU8sQ0FBQyxFQUFrQixFQUFFLE9BQWdCO0lBQ3ZELE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDcEIsTUFBTSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDeEMsSUFBSSxLQUFLLEtBQUssNkJBQXFCLEVBQUU7UUFDakMsT0FBTztLQUNWO0lBQ0QsTUFBTSxNQUFNLEdBQUcsYUFBRyxDQUFDLFVBQVcsQ0FBQztJQUMvQixNQUFNLEdBQUcsR0FBRyxJQUFJLGdCQUFHLENBQUMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUMxRSxNQUFNLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFO1FBQ3RCLGFBQWE7UUFDYixTQUFTLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFBLG9DQUF3QixFQUFDLEdBQUcsRUFBRSxLQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztLQUNuRSxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU05TRXZlbnQgfSBmcm9tIFwiYXdzLWxhbWJkYS90cmlnZ2VyL3Nuc1wiO1xuaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gXCJhd3MtbGFtYmRhL2hhbmRsZXJcIjtcbmltcG9ydCB7IFNRUyB9IGZyb20gXCJAYXdzLXNkay9jbGllbnQtc3FzXCI7XG5pbXBvcnQgeyBlbnYgfSBmcm9tIFwicHJvY2Vzc1wiO1xuaW1wb3J0IHsgRmFhc3RFcnJvciwgRmFhc3RFcnJvck5hbWVzIH0gZnJvbSBcIi4uL2Vycm9yXCI7XG5pbXBvcnQgeyBkZXNlcmlhbGl6ZSB9IGZyb20gXCIuLi9zZXJpYWxpemVcIjtcbmltcG9ydCB7IENhbGxpbmdDb250ZXh0LCBGdW5jdGlvbkNhbGwsIFdyYXBwZXIgfSBmcm9tIFwiLi4vd3JhcHBlclwiO1xuaW1wb3J0IHsgc2VuZFJlc3BvbnNlUXVldWVNZXNzYWdlIH0gZnJvbSBcIi4vYXdzLXF1ZXVlXCI7XG5pbXBvcnQgeyBnZXRFeGVjdXRpb25Mb2dVcmwgfSBmcm9tIFwiLi9hd3Mtc2hhcmVkXCI7XG5cbmV4cG9ydCBjb25zdCBmaWxlbmFtZSA9IG1vZHVsZS5maWxlbmFtZTtcblxuZXhwb3J0IGNvbnN0IElOVk9DQVRJT05fVEVTVF9RVUVVRSA9IFwiKnRlc3QqXCI7XG5cbmNvbnN0IENhbGxJZEF0dHJpYnV0ZTogRXh0cmFjdDxrZXlvZiBGdW5jdGlvbkNhbGwsIFwiY2FsbElkXCI+ID0gXCJjYWxsSWRcIjtcblxuZnVuY3Rpb24gZXJyb3JDYWxsYmFjayhlcnI6IEVycm9yKSB7XG4gICAgaWYgKGVyci5tZXNzYWdlLm1hdGNoKC9TSUdLSUxMLykpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGYWFzdEVycm9yKFxuICAgICAgICAgICAgeyBjYXVzZTogZXJyLCBuYW1lOiBGYWFzdEVycm9yTmFtZXMuRU1FTU9SWSB9LFxuICAgICAgICAgICAgXCJwb3NzaWJseSBvdXQgb2YgbWVtb3J5XCJcbiAgICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGVycjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VUcmFtcG9saW5lKHdyYXBwZXI6IFdyYXBwZXIpIHtcbiAgICBhc3luYyBmdW5jdGlvbiB0cmFtcG9saW5lKGV2ZW50OiBGdW5jdGlvbkNhbGwgfCBTTlNFdmVudCwgY29udGV4dDogQ29udGV4dCkge1xuICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICBjb25zdCByZWdpb24gPSBlbnYuQVdTX1JFR0lPTiE7XG4gICAgICAgIGNvbnRleHQuY2FsbGJhY2tXYWl0c0ZvckVtcHR5RXZlbnRMb29wID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGV4ZWN1dGlvbklkID0gY29udGV4dC5hd3NSZXF1ZXN0SWQ7XG4gICAgICAgIGNvbnN0IHsgbG9nR3JvdXBOYW1lLCBsb2dTdHJlYW1OYW1lIH0gPSBjb250ZXh0O1xuICAgICAgICBjb25zdCBsb2dVcmwgPSBnZXRFeGVjdXRpb25Mb2dVcmwocmVnaW9uLCBsb2dHcm91cE5hbWUsIGxvZ1N0cmVhbU5hbWUpO1xuICAgICAgICBjb25zdCBjYWxsaW5nQ29udGV4dCA9IHtcbiAgICAgICAgICAgIHN0YXJ0VGltZSxcbiAgICAgICAgICAgIGxvZ1VybCxcbiAgICAgICAgICAgIGV4ZWN1dGlvbklkLFxuICAgICAgICAgICAgaW5zdGFuY2VJZDogbG9nU3RyZWFtTmFtZVxuICAgICAgICB9O1xuICAgICAgICBpZiAoQ2FsbElkQXR0cmlidXRlIGluIGV2ZW50KSB7XG4gICAgICAgICAgICBjb25zdCBjYWxsID0gZXZlbnQgYXMgRnVuY3Rpb25DYWxsO1xuICAgICAgICAgICAgY29uc3QgY2M6IENhbGxpbmdDb250ZXh0ID0geyBjYWxsLCAuLi5jYWxsaW5nQ29udGV4dCB9O1xuICAgICAgICAgICAgYXdhaXQgZXhlY3V0ZShjYywgd3JhcHBlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzbnNFdmVudCA9IGV2ZW50IGFzIFNOU0V2ZW50O1xuICAgICAgICAgICAgZm9yIChjb25zdCByZWNvcmQgb2Ygc25zRXZlbnQuUmVjb3Jkcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhbGw6IEZ1bmN0aW9uQ2FsbCA9IGRlc2VyaWFsaXplKHJlY29yZC5TbnMuTWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgY2M6IENhbGxpbmdDb250ZXh0ID0geyBjYWxsLCAuLi5jYWxsaW5nQ29udGV4dCB9O1xuICAgICAgICAgICAgICAgIGF3YWl0IGV4ZWN1dGUoY2MsIHdyYXBwZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IHRyYW1wb2xpbmUgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZShjYzogQ2FsbGluZ0NvbnRleHQsIHdyYXBwZXI6IFdyYXBwZXIpIHtcbiAgICBjb25zdCB7IGNhbGwgfSA9IGNjO1xuICAgIGNvbnN0IHsgUmVzcG9uc2VRdWV1ZUlkOiBRdWV1ZSB9ID0gY2FsbDtcbiAgICBpZiAoUXVldWUgPT09IElOVk9DQVRJT05fVEVTVF9RVUVVRSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlZ2lvbiA9IGVudi5BV1NfUkVHSU9OITtcbiAgICBjb25zdCBzcXMgPSBuZXcgU1FTKHsgYXBpVmVyc2lvbjogXCIyMDEyLTExLTA1XCIsIG1heEF0dGVtcHRzOiA2LCByZWdpb24gfSk7XG4gICAgYXdhaXQgd3JhcHBlci5leGVjdXRlKGNjLCB7XG4gICAgICAgIGVycm9yQ2FsbGJhY2ssXG4gICAgICAgIG9uTWVzc2FnZTogbXNnID0+IHNlbmRSZXNwb25zZVF1ZXVlTWVzc2FnZShzcXMsIFF1ZXVlISwgbXNnLCBjYylcbiAgICB9KTtcbn1cbiJdfQ==