Fix error handling in serverless service (#6442)
- narrowing error handling in aws sdk usage - updating dto to authorize null descriptions
This commit is contained in:
@ -8,6 +8,7 @@ import {
|
|||||||
GetFunctionCommand,
|
GetFunctionCommand,
|
||||||
UpdateFunctionCodeCommand,
|
UpdateFunctionCodeCommand,
|
||||||
DeleteFunctionCommand,
|
DeleteFunctionCommand,
|
||||||
|
ResourceNotFoundException,
|
||||||
} from '@aws-sdk/client-lambda';
|
} from '@aws-sdk/client-lambda';
|
||||||
import { CreateFunctionCommandInput } from '@aws-sdk/client-lambda/dist-types/commands/CreateFunctionCommand';
|
import { CreateFunctionCommandInput } from '@aws-sdk/client-lambda/dist-types/commands/CreateFunctionCommand';
|
||||||
import { UpdateFunctionCodeCommandInput } from '@aws-sdk/client-lambda/dist-types/commands/UpdateFunctionCodeCommand';
|
import { UpdateFunctionCodeCommandInput } from '@aws-sdk/client-lambda/dist-types/commands/UpdateFunctionCodeCommand';
|
||||||
@ -46,15 +47,36 @@ export class LambdaDriver
|
|||||||
this.buildDirectoryManagerService = options.buildDirectoryManagerService;
|
this.buildDirectoryManagerService = options.buildDirectoryManagerService;
|
||||||
}
|
}
|
||||||
|
|
||||||
async delete(serverlessFunction: ServerlessFunctionEntity) {
|
private async checkFunctionExists(
|
||||||
|
serverlessFunctionId: string,
|
||||||
|
): Promise<boolean> {
|
||||||
try {
|
try {
|
||||||
|
const getFunctionCommand = new GetFunctionCommand({
|
||||||
|
FunctionName: serverlessFunctionId,
|
||||||
|
});
|
||||||
|
|
||||||
|
await this.lambdaClient.send(getFunctionCommand);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
} catch (error) {
|
||||||
|
if (error instanceof ResourceNotFoundException) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async delete(serverlessFunction: ServerlessFunctionEntity) {
|
||||||
|
const functionExists = await this.checkFunctionExists(
|
||||||
|
serverlessFunction.id,
|
||||||
|
);
|
||||||
|
|
||||||
|
if (functionExists) {
|
||||||
const deleteFunctionCommand = new DeleteFunctionCommand({
|
const deleteFunctionCommand = new DeleteFunctionCommand({
|
||||||
FunctionName: serverlessFunction.id,
|
FunctionName: serverlessFunction.id,
|
||||||
});
|
});
|
||||||
|
|
||||||
await this.lambdaClient.send(deleteFunctionCommand);
|
await this.lambdaClient.send(deleteFunctionCommand);
|
||||||
} catch {
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -75,19 +97,11 @@ export class LambdaDriver
|
|||||||
|
|
||||||
await createZipFile(sourceTemporaryDir, lambdaZipPath);
|
await createZipFile(sourceTemporaryDir, lambdaZipPath);
|
||||||
|
|
||||||
let existingFunction = true;
|
const functionExists = await this.checkFunctionExists(
|
||||||
|
serverlessFunction.id,
|
||||||
|
);
|
||||||
|
|
||||||
try {
|
if (!functionExists) {
|
||||||
const getFunctionCommand = new GetFunctionCommand({
|
|
||||||
FunctionName: serverlessFunction.id,
|
|
||||||
});
|
|
||||||
|
|
||||||
await this.lambdaClient.send(getFunctionCommand);
|
|
||||||
} catch {
|
|
||||||
existingFunction = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!existingFunction) {
|
|
||||||
const params: CreateFunctionCommandInput = {
|
const params: CreateFunctionCommandInput = {
|
||||||
Code: {
|
Code: {
|
||||||
ZipFile: await fs.promises.readFile(lambdaZipPath),
|
ZipFile: await fs.promises.readFile(lambdaZipPath),
|
||||||
|
|||||||
@ -48,7 +48,7 @@ export class ServerlessFunctionDto {
|
|||||||
name: string;
|
name: string;
|
||||||
|
|
||||||
@IsString()
|
@IsString()
|
||||||
@Field()
|
@Field({ nullable: true })
|
||||||
description: string;
|
description: string;
|
||||||
|
|
||||||
@IsString()
|
@IsString()
|
||||||
|
|||||||
Reference in New Issue
Block a user