https://console.aws.amazon.com/dynamodb/homeから以下画面にアクセスします。
「テーブルの作成」をクリックします。
「DynamoDB テーブルの作成」画面が表示されます。
テーブル名、プライマリキー名を入力し、「作成」をクリックします。
これでテーブルが作成されます。
インデックスの作成
次にインデックスを作成してみます。
「インデックスの作成」をクリックします。
インデックスのプライマリキーをnameにし、射影される属性に「datetime」を含めます。
これで、nameをキーにしてクエリーを発行することができるようになります。
この際、もともとのテーブルのプライマリキー、レンジキーとnameと射影される属性に含んだdatetimeが検索対象になります。
「インデックスの作成」をクリックします。
インデックスが作成されていることが確認できます。また、属性で検索対象が確認できます。
以下のような2レコードあるテーブルをインデックスで検索してみます。
queryの引数は以下のようにオブジェクトで渡します。
1 2 3 4 5 6 7 8 9 10 11 |
let params = { TableName: 'sample', IndexName: 'name-index', KeyConditionExpression: ' #name = :value ', ExpressionAttributeNames: { '#name': 'name' }, ExpressionAttributeValues: { ':value': 'jiro' } }; |
全コードは以下のとおりです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
var AWS = require('aws-sdk'); var dynamo = new AWS.DynamoDB.DocumentClient(); let params = { TableName: 'sample', IndexName: 'name-index', KeyConditionExpression: ' #name = :value ', ExpressionAttributeNames: { '#name': 'name' }, ExpressionAttributeValues: { ':value': 'jiro' } }; exports.handler = (event, context, callback) => { dynamo.query(params, function(err, data) { if (err) { context.fail(err); // エラー時 } else { context.succeed(data); // 正常時 } }); }; |
このLambda関数を実行してみます。
結果は以下のように1件だけ取得できます。
1 2 3 4 5 6 7 8 9 10 11 12 |
{ "Items": [ { "datetime": "20171013", "sortkey": "2", "id": "1", "name": "jiro" } ], "Count": 1, "ScannedCount": 1 } |
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^