How to set more AWS dynamoDb table properties using AWS CDK

I am very new to AWS and I have been reading the dynamoDb SDK documentation and the properties that you can specify when creating a Table are far more than the properties that you pass when creating a table using AWS CDK.

SDK example:

var AWS = require("aws-sdk");

AWS.config.update({
  region: "us-west-2",
  endpoint: "http://localhost:8000"
});

var dynamodb = new AWS.DynamoDB();

var params = {
    TableName : "Movies",
    KeySchema: [       
        { AttributeName: "year", KeyType: "HASH"},  //Partition key
        { AttributeName: "title", KeyType: "RANGE" }  //Sort key
    ],
    AttributeDefinitions: [       
        { AttributeName: "year", AttributeType: "N" },
        { AttributeName: "title", AttributeType: "S" }
    ],
    ProvisionedThroughput: {       
        ReadCapacityUnits: 10, 
        WriteCapacityUnits: 10
    }
};

dynamodb.createTable(params, function(err, data) {
    if (err) {
        console.error("Unable to create table. Error JSON:", JSON.stringify(err, null, 2));
    } else {
        console.log("Created table. Table description JSON:", JSON.stringify(data, null, 2));
    }
});

CDK example:

import * as dynamodb from '@aws-cdk/aws-dynamodb';


const table = new dynamodb.Table(this, 'Hits', {
    partitionKey: { name: 'path', type: dynamodb.AttributeType.STRING }
});

here are all the props you can set which are more high level table related settings:

https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-dynamodb.Table.html

so for example if I want to set the provision throughput in CDK how do I do it? or set AttributeDefinitions, or indexes?

Do I wait unit table creation is done and then modify the table properties via the SDK UpdateTable call?

https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html#updateTable-property

Answer

Dynamodb is pretty much entirely implemented in CDK, but some of the properties are a bit more difficult to find if you aren’t very familiar with.

Billing Mode is the property for Provisioned or on demand read/write capicity. It is a constant, so it would be used something like

billingMode: aws_dynamodb.BillingMode.PAY_PER_REQUEST

With CDK you often have to dive a little bit into the documentation to find what you want, but for the mainstream services – Lambda, S3, Dynamo – these are fully implemented in CDK.

And in any case, for other services that may not be, you can use any of the functions that start with Cfn as these are escape hatches that allow you to basically impliment direct cloud formation template jsons from cdk