Closed
Description
Expected Behavior
When using the Idempotency utility with ddb persistence, the utility should return the result of a previous operation from cache provided that the request is handled by the same execution environment.
Current Behavior
When using ddb persistence the utility doesn't return the correct value from the cache, but instead causes a runtime error. If I revert from v2.1.0 to v1.17.0 the bug goes away.
Code snippet
import { IdempotencyConfig } from "@aws-lambda-powertools/idempotency";
import { DynamoDBPersistenceLayer } from "@aws-lambda-powertools/idempotency/dynamodb";
import { makeHandlerIdempotent } from "@aws-lambda-powertools/idempotency/middleware";
import middy from "@middy/core";
export interface ProcessResult {
processResult: "processed" | "rejected";
}
const getDefaultIdempotencyConfigs = (eventKeyJmesPath = '["correlationId"]') => {
const persistenceStore = new DynamoDBPersistenceLayer({
tableName: process.env.IDEMPOTENCY_TABLE_NAME || "IdempotencyTable",
sortKeyAttr: "sortKey"
});
const idempotencyConfig = new IdempotencyConfig({
throwOnNoIdempotencyKey: true,
eventKeyJmesPath
});
return {
persistenceStore,
idempotencyConfig
};
};
const { persistenceStore, idempotencyConfig } = getDefaultIdempotencyConfigs();
const lambdaHandler = async (event: Record<"string", unknown>): Promise<ProcessResult> => {
console.info("event", event);
const processResult: ProcessResult = {
processResult: "processed"
};
return processResult;
};
export const processLambda = middy(lambdaHandler).use(
makeHandlerIdempotent({
persistenceStore,
config: idempotencyConfig
})
);
Steps to Reproduce
Then run the function with the same event payload, { "correlationId": "abc-123-def-456" }, twice and observe the error (shown below) being thrown at the second execution.
Possible Solution
No response
Powertools for AWS Lambda (TypeScript) version
latest
AWS Lambda function runtime
20.x
Packaging format used
npm
Execution logs
2024-05-10T22:01:01.282Z 8034ee17-fd14-4244-8603-79500af0f7cb ERROR {
"_logLevel": "error",
"msg": "Failed to save in progress record to idempotency store. This error was caused by: Failed to put record for already existing idempotency key: svc-quick-list-name-dev-callListenerNameRules#7Hd4wd4mD/EQSj89aUna6A==.",
"stack": "Error: Failed to save in progress record to idempotency store. This error was caused by: Failed to put record for already existing idempotency key: svc-quick-list-name-dev-callListenerNameRules#7Hd4wd4mD/EQSj89aUna6A==.\n at IdempotencyHandler.<anonymous> (/node_modules/@aws-lambda-powertools/idempotency/lib/esm/IdempotencyHandler.js:92:27)\n at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n at IdempotencyHandler.handleMiddyBefore (/node_modules/@aws-lambda-powertools/idempotency/lib/esm/IdempotencyHandler.js:242:32)\n at runMiddlewares (/node_modules/@middy/core/index.js:160:21)\n at runRequest (/node_modules/@middy/core/index.js:114:9)",
"_tags": []
}
Metadata
Metadata
Assignees
Labels
Type
Projects
Status
Shipped