24
votes

I've seen this site about DynamoDB On-demand and I updated my tables, created by CloudFormation, to On-demand. Now, when I try to update my Stack, I get this error:

One or more parameter values were invalid: Neither ReadCapacityUnits nor WriteCapacityUnits can be specified when BillingMode is PAY_PER_REQUEST

Is there a way to set DynamoDB Read/write capacity mode to On-demand on CloudFormation?

EDIT:

I've updated to On-demand on AWS Console.

EDIT 2:

My template:

DynamoDBUsersTable:
    Type: AWS::DynamoDB::Table
    Description: Users table
    Properties:
      TableName: !Sub ${StackName}-users-table
      AttributeDefinitions:
        - AttributeName: userId
          AttributeType: S
      KeySchema:
        - AttributeName: userId
          KeyType: HASH
      ProvisionedThroughput:
        ReadCapacityUnits: 10
        WriteCapacityUnits: 10

Thank you.

1
Based on the error, it appears you are almost doing what you want, but you are failing to clear the old RCU settings. What does this section of your CFN template look like?Michael - sqlbot
The template is this way: ` ProvisionedThroughput: ReadCapacityUnits: 2 WriteCapacityUnits: 2`. Also, I've tried putting 0 instead 2 and removing ProvisionedThroughput.Pedro Arantes
Removing ProvisionedThroughput is correct, according to docs. Also you'd need to have removed any auto-scaling. What is the error with ProvisionedThroughput removed? It should be different than the one in the question.Michael - sqlbot
@Michael-sqlbot in a table without On-demand, I had this error when I remove ProvisionedThroughput : > Internal FailurePedro Arantes
I think the AWS team is updating CloudFormation. I had this error when I added BillingMode: "Encountered unsupported property BillingMode". I'll wait and try again next days. Thank you @Michael-sqlbotPedro Arantes

1 Answers

53
votes

You need to add BillingMode: PAY_PER_REQUEST to properties and remove ProvisionedThroughput both from table properties and from all GlobalSecondaryIndexes if they specified. So finally your template have to look like:

DynamoDBUsersTable:
    Type: AWS::DynamoDB::Table
    Description: Users table
    Properties:
      TableName: !Sub ${StackName}-users-table
      BillingMode: PAY_PER_REQUEST
      AttributeDefinitions:
        - AttributeName: userId
          AttributeType: S
      KeySchema:
        - AttributeName: userId
          KeyType: HASH