99x / 99x/serverless-dynamodb-local

UnexpectedParameter: Unexpected key 'TimeToLiveSpecification'

Open
#156 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
JavaScript
Stars
621
Forks
232
PR merge metrics
No merged PRs in 30d

Description

**Actual Behaviour**

When running with the following serverless config for Dynamo:
```
TodosDynamoDbTable:
Type: 'AWS::DynamoDB::Table'
DeletionPolicy: Delete
Properties:
AttributeDefinitions:
-
AttributeName: eviSessionId
AttributeType: S
KeySchema:
-
AttributeName: eviSessionId
KeyType: HASH
ProvisionedThroughput:
ReadCapacityUnits: 50
WriteCapacityUnits: 15
TableName: ${self:provider.environment.DYNAMODB_TABLE}
TimeToLiveSpecification:
AttributeName: expiresOn
Enabled: true
```

I get this error as a result of the `TimeToLiveSpecification` field:

```
UnexpectedParameter: Unexpected key 'TimeToLiveSpecification' found in params
at ParamValidator.fail (/Users/lilith.saer/Projects/session-access-cache/node_modules/aws-sdk/lib/param_validator.js:50:37)
at ParamValidator.validateStructure (/Users/lilith.saer/Projects/session-access-cache/node_modules/aws-sdk/lib/param_validator.js:77:14)
at ParamValidator.validateMember (/Users/lilith.saer/Projects/session-access-cache/node_modules/aws-sdk/lib/param_validator.js:88:21)
at ParamValidator.validate (/Users/lilith.saer/Projects/session-access-cache/node_modules/aws-sdk/lib/param_validator.js:34:10)
at Request.VALIDATE_PARAMETERS (/Users/lilith.saer/Projects/session-access-cache/node_modules/aws-sdk/lib/event_listeners.js:125:42)
at Request.callListeners (/Users/lilith.saer/Projects/session-access-cache/node_modules/aws-sdk/lib/sequential_executor.js:105:20)
at callNextListener (/Users/lilith.saer/Projects/session-access-cache/node_modules/aws-sdk/lib/sequential_executor.js:95:12)
at /Users/lilith.saer/Projects/session-access-cache/node_modules/aws-sdk/lib/event_listeners.js:85:9
at finish (/Users/lilith.saer/Projects/session-access-cache/node_modules/aws-sdk/lib/config.js:320:7)
at /Users/lilith.saer/Projects/session-access-cache/node_modules/aws-sdk/lib/config.js:338:9
at Credentials.get (/Users/lilith.saer/Projects/session-access-cache/node_modules/aws-sdk/lib/credentials.js:126:7)
at getAsyncCredentials (/Users/lilith.saer/Projects/session-access-cache/node_modules/aws-sdk/lib/config.js:332:24)
at Config.getCredentials (/Users/lilith.saer/Projects/session-access-cache/node_modules/aws-sdk/lib/config.js:352:9)
at Request.VALIDATE_CREDENTIALS (/Users/lilith.saer/Projects/session-access-cache/node_modules/aws-sdk/lib/event_listeners.js:80:26)
at Request.callListeners (/Users/lilith.saer/Projects/session-access-cache/node_modules/aws-sdk/lib/sequential_executor.js:101:18)
at Request.emit (/Users/lilith.saer/Projects/session-access-cache/node_modules/aws-sdk/lib/sequential_executor.js:77:10)
at Request.emit (/Users/lilith.saer/Projects/session-access-cache/node_modules/aws-sdk/lib/request.js:683:14)
at Request.transition (/Users/lilith.saer/Projects/session-access-cache/node_modules/aws-sdk/lib/request.js:22:10)
at AcceptorStateMachine.runTo (/Users/lilith.saer/Projects/session-access-cache/node_modules/aws-sdk/lib/state_machine.js:14:12)
at Request.runTo (/Users/lilith.saer/Projects/session-access-cache/node_modules/aws-sdk/lib/request.js:403:15)
at Request.send (/Users/lilith.saer/Projects/session-access-cache/node_modules/aws-sdk/lib/request.js:367:10)
at makeRequest (/Users/lilith.saer/Projects/session-access-cache/node_modules/aws-sdk/lib/service.js:193:27)
at svc.(anonymous function) [as createTable] (/Users/lilith.saer/Projects/session-access-cache/node_modules/aws-sdk/lib/service.js:499:23)
at BbPromise (/Users/lilith.saer/Projects/session-access-cache/node_modules/serverless-dynamodb-local/index.js:200:26)
at ServerlessDynamodbLocal.createTable (/Users/lilith.saer/Projects/session-access-cache/node_modules/serverless-dynamodb-local/index.js:199:16)
at BbPromise.each (/Users/lilith.saer/Projects/session-access-cache/node_modules/serverless-dynamodb-local/index.js:122:55)
From previous event:
at ServerlessDynamodbLocal.migrateHandler (/Users/lilith.saer/Projects/session-access-cache/node_modules/serverless-dynamodb-local/index.js:122:26)
at BbPromise.resolve.then (/Users/lilith.saer/Projects/session-access-cache/node_modules/serverless-dynamodb-local/index.js:157:45)
From previous event:
at ServerlessDynamodbLocal.startHandler (/Users/lilith.saer/Projects/session-access-cache/node_modules/serverless-dynamodb-local/index.js:157:10)
at BbPromise.reduce (/Users/lilith.saer/Projects/session-access-cache/node_modules/serverless/lib/classes/PluginManager.js:372:55)
From previous event:
at PluginManager.invoke (/Users/lilith.saer/Projects/session-access-cache/node_modules/serverless/lib/classes/PluginManager.js:372:22)
at PluginManager.run (/Users/lilith.saer/Projects/session-access-cache/node_modules/serverless/lib/classes/PluginManager.js:403:17)
at variables.populateService.then (/Users/lilith.saer/Projects/session-access-cache/node_modules/serverless/lib/Serverless.js:102:33)
at runCallback (timers.js:666:20)
at tryOnImmediate (timers.js:639:5)
at processImmediate [as _immediateCallback] (timers.js:611:5)
From previous event:
at Serverless.run (/Users/lilith.saer/Projects/session-access-cache/node_modules/serverless/lib/Serverless.js:89:74)
at serverless.init.then (/Users/lilith.saer/Projects/session-access-cache/node_modules/serverless/bin/serverless:42:50)
```

**Expected Behaviour**

This should start up without issue.

**Steps to reproduce it**

Run `npm start` with the following field included in the DynamoDB specs:
```
TimeToLiveSpecification:
AttributeName: expiresOn
Enabled: true
```

**Would you like to work on the issue?**

I would like to work on resolving this myself, but do not know where to start. If someone can point me in the right direction I would not mind taking the time to attempt a resolution.

Contributor guide

Open the contributing guide

Research direction

Start at serverless-dynamodb-local/index.js around the createTable call shown in the stack trace, then reproduce the issue with npm start and the TimeToLiveSpecification field. Done means the local DynamoDB table starts successfully with that configuration and the UnexpectedParameter error no longer occurs.

Written by the indexing model from the issue text.

Assessment

Tech stack
aws, javascript
Domain
database
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.