今回はDynamoDBへテーブルを作成します。
なお、前提として以下が行われている事とします。
プログラム言語はNode.jsを使用します。
テーブルの作成
前回作成した 02_sample_app ディレクトリ以下に index.js、TableCreater.jsを作成します。
TableCreater.jsはDynamoDBへテーブルを作成する処理を行います。
const DynamoDbSetter = require("./DynamoDbSetter");
module.exports = class TableCreater extends DynamoDbSetter{
async createTable() {
// 作成するテーブルの内容を設定する。
let 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
}
};
// テーブルを作成する。
return await this.dynamodb.createTable(params).promise();
}
}
前回作成した、DynamoDBの設定を行うDynamoDbSetterを継承しています。故に、DynamoDBの設定は親クラスのDynamoDbSetterが行います。
テーブル名を”Movies”としています。
プライマリーキーを設定します。今回は複合プライマリーキーを指定します。
パーティションキーを”year”、ソートキーを”title”としています。
“year”の属性のタイプは数値(N)、”title”の属性のタイプは文字列(S)を指定しています。
キャパシティのスループットはローカルの場合任意で構いません。
プライマリーキー、属性の説明は以下を参考にして下さい。
キャパシティのスループットは以下を参考にして下さい。
Lambdaの実行関数
index.jsはLambdaを実行すると初めに呼び出される関数になります。
テーブル作成処理を呼び出します。
const TableCreater = require('./TableCreater');
exports.handler = async (event, context) => {
let tableCreater = new TableCreater();
let result = await tableCreater.createTable();
context.succeed({
statusCode: 200,
body: result,
});
};
実行と実行結果
実行
以下のようにローカルのLambda関数を実行します。
curl -d '{}' http://localhost:9001/2015-03-31/functions/sample/invocations
ローカルのLambda関数呼び出しについては以下を参考にして下さい。
実行結果
実行結果は以下の通りです。
{
"statusCode":200,
"body":{
"TableDescription":{
"AttributeDefinitions":[
{"AttributeName":"year","AttributeType":"N"},
{"AttributeName":"title","AttributeType":"S"}
],
"TableName":"Movies",
"KeySchema":[
{"AttributeName":"year","KeyType":"HASH"},
{"AttributeName":"title","KeyType":"RANGE"}
],
"TableStatus":"ACTIVE",
"CreationDateTime":"2021-08-21T00:51:56.225Z",
"ProvisionedThroughput":{
"LastIncreaseDateTime":"1970-01-01T00:00:00.000Z",
"LastDecreaseDateTime":"1970-01-01T00:00:00.000Z",
"NumberOfDecreasesToday":0,
"ReadCapacityUnits":10,
"WriteCapacityUnits":10
},
"TableSizeBytes":0,
"ItemCount":0,
"TableArn":"arn:aws:dynamodb:ddblocal:000000000000:table/Movies"
}
}
}
最後に
今回のDynamoDBへテーブルを作成するプログラムは、ローカル環境だけでなく実際のAWS Lambdaへも利用可能です。
DynamoDBの設定部分を変更するのみで利用できます。