Set lambda timeout in service (#15632)

Some functions keep running without a timeout being thrown. Doing it in
service directly.
This commit is contained in:
Thomas Trompette
2025-11-05 13:43:23 +01:00
committed by GitHub
parent c294af2944
commit f21b862d52
5 changed files with 51 additions and 20 deletions
@@ -27,9 +27,12 @@ import {
} from 'src/engine/core-modules/serverless/drivers/interfaces/serverless-driver.interface';
import { type FileStorageService } from 'src/engine/core-modules/file-storage/file-storage.service';
import { buildEnvVar } from 'src/engine/core-modules/serverless/drivers/utils/build-env-var';
import { buildServerlessFunctionInMemory } from 'src/engine/core-modules/serverless/drivers/utils/build-serverless-function-in-memory';
import { copyAndBuildDependencies } from 'src/engine/core-modules/serverless/drivers/utils/copy-and-build-dependencies';
import { copyExecutor } from 'src/engine/core-modules/serverless/drivers/utils/copy-executor';
import { createZipFile } from 'src/engine/core-modules/serverless/drivers/utils/create-zip-file';
import { formatBuildError } from 'src/engine/core-modules/serverless/drivers/utils/format-build-error';
import {
LambdaBuildDirectoryManager,
NODE_LAYER_SUBFOLDER,
@@ -44,9 +47,6 @@ import {
ServerlessFunctionException,
ServerlessFunctionExceptionCode,
} from 'src/engine/metadata-modules/serverless-function/serverless-function.exception';
import { buildServerlessFunctionInMemory } from 'src/engine/core-modules/serverless/drivers/utils/build-serverless-function-in-memory';
import { formatBuildError } from 'src/engine/core-modules/serverless/drivers/utils/format-build-error';
import { buildEnvVar } from 'src/engine/core-modules/serverless/drivers/utils/build-env-var';
const UPDATE_FUNCTION_DURATION_TIMEOUT_IN_SECONDS = 60;
const CREDENTIALS_DURATION_IN_SECONDS = 60 * 60; // 1h
@@ -280,7 +280,7 @@ export class LambdaDriver implements ServerlessDriver {
Handler: 'index.handler',
Role: this.options.lambdaRole,
Runtime: serverlessFunction.runtime,
Timeout: serverlessFunction.timeoutSeconds,
Timeout: 900, // timeout is handled by the serverless function service
};
const command = new CreateFunctionCommand(params);
@@ -1,6 +1,6 @@
import { promises as fs } from 'fs';
import { join } from 'path';
import { spawn } from 'node:child_process';
import { join } from 'path';
import {
type ServerlessDriver,
@@ -9,15 +9,15 @@ import {
import { type FileStorageService } from 'src/engine/core-modules/file-storage/file-storage.service';
import { SERVERLESS_TMPDIR_FOLDER } from 'src/engine/core-modules/serverless/drivers/constants/serverless-tmpdir-folder';
import { buildEnvVar } from 'src/engine/core-modules/serverless/drivers/utils/build-env-var';
import { buildServerlessFunctionInMemory } from 'src/engine/core-modules/serverless/drivers/utils/build-serverless-function-in-memory';
import { copyAndBuildDependencies } from 'src/engine/core-modules/serverless/drivers/utils/copy-and-build-dependencies';
import { formatBuildError } from 'src/engine/core-modules/serverless/drivers/utils/format-build-error';
import { ConsoleListener } from 'src/engine/core-modules/serverless/drivers/utils/intercept-console';
import { LambdaBuildDirectoryManager } from 'src/engine/core-modules/serverless/drivers/utils/lambda-build-directory-manager';
import { getServerlessFolder } from 'src/engine/core-modules/serverless/utils/serverless-get-folder.utils';
import { ServerlessFunctionExecutionStatus } from 'src/engine/metadata-modules/serverless-function/dtos/serverless-function-execution-result.dto';
import { type ServerlessFunctionEntity } from 'src/engine/metadata-modules/serverless-function/serverless-function.entity';
import { LambdaBuildDirectoryManager } from 'src/engine/core-modules/serverless/drivers/utils/lambda-build-directory-manager';
import { buildServerlessFunctionInMemory } from 'src/engine/core-modules/serverless/drivers/utils/build-serverless-function-in-memory';
import { formatBuildError } from 'src/engine/core-modules/serverless/drivers/utils/format-build-error';
import { buildEnvVar } from 'src/engine/core-modules/serverless/drivers/utils/build-env-var';
export interface LocalDriverOptions {
fileStorageService: FileStorageService;
@@ -156,7 +156,7 @@ export class LocalDriver implements ServerlessDriver {
runnerPath,
env: buildEnvVar(serverlessFunction),
payload,
timeoutMs: serverlessFunction.timeoutSeconds * 1_000,
timeoutMs: 900_000, // timeout is handled by the serverless function service
});
if (stdout)
@@ -217,7 +217,7 @@ export class LocalDriver implements ServerlessDriver {
const code = `
// Auto-generated. Do not edit.
const { pathToFileURL } = require('node:url');
(async () => {
try {
const builtUrl = pathToFileURL(${JSON.stringify(builtFileAbsPath)});
@@ -225,7 +225,7 @@ export class LocalDriver implements ServerlessDriver {
if (typeof mod.${handlerName} !== 'function') {
throw new Error('Export "${handlerName}" not found in serverless bundle');
}
let payload = undefined;
if (process.send) {
process.on('message', async (msg) => {