Search code examples
amazon-web-servicesdocker-composeamazon-dynamodbcommand-line-interface

UnrecognizedClientException error when I try to enable "time to live" on local DynamoDB


I use local DynamoDB on Docker and I want to set up a time to live (TTL) feature for the table.

To table creates I use:

aws dynamodb create-table \
    --table-name activity \
    --attribute-definitions \
        AttributeName=deviceId,AttributeType=S \
        AttributeName=time,AttributeType=S \
    --key-schema \
        AttributeName=deviceId,KeyType=HASH \
        AttributeName=time,KeyType=RANGE \
    --billing-mode 'PAY_PER_REQUEST' \
    --endpoint-url http://dynamo:8000

And it works as need.

But when I try to enable TTL:

aws dynamodb update-time-to-live \
    --table-name activity \
    --time-to-live-specification Enabled=true,AttributeName=ttl

I got the error: An error occurred (UnrecognizedClientException) when calling the UpdateTimeToLive operation: The security token included in the request is invalid

Dummy credentials for the Docker I sent using docker-compose environment:

AWS_ACCESS_KEY_ID: 0
AWS_SECRET_ACCESS_KEY: 0
AWS_DEFAULT_REGION: eu-central-1

Used Docker images:

  • For DynamoDB - dwmkerr/dynamodb
  • For internal AWS CLI - garland/aws-cli-docker

What is wrong? How can I enable the feature using local Docker? Thanks for any answer.

Best.


Solution

  • After an extra a few hours of failures, I have an answer. I hope it helps somebody save a bit of time:

    • Even if you use a local environment, you should use real AWS credentials (AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY). You can get it here after register.
    • If you use --endpoint-url parameter for creating DB, then you should use it with the same value for update-time-to-live or any other action for the DB.

    Cheers!