0
votes

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

2

2 Answers

1
votes

Billing Mode

DynamoDB supports two billing modes:

PROVISIONED - the default mode where the table and global secondary indexes have configured read and write capacity.

PAY_PER_REQUEST - on-demand pricing and scaling. You only pay for what you use and there is no read and write capacity for the table or its global secondary indexes.

see the Billing Mode attribute: cdk docs

0
votes

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 capacity. 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 implement direct cloud formation template jsons from cdk