DynamoDBにテーブルを作成する – AWS

DynamoDBにテーブルを作成する – AWS

https://console.aws.amazon.com/dynamodb/homeから以下画面にアクセスします。

DynamoDBにテーブルを作成する - AWS

「テーブルの作成」をクリックします。

「DynamoDB テーブルの作成」画面が表示されます。

DynamoDBにテーブルを作成する - AWS

テーブル名、プライマリキー名を入力し、「作成」をクリックします。

これでテーブルが作成されます。

インデックスの作成

次にインデックスを作成してみます。

DynamoDBにテーブルを作成する - AWS

「インデックスの作成」をクリックします。

DynamoDBにテーブルを作成する - AWS

インデックスのプライマリキーをnameにし、射影される属性に「datetime」を含めます。

これで、nameをキーにしてクエリーを発行することができるようになります。

この際、もともとのテーブルのプライマリキー、レンジキーとnameと射影される属性に含んだdatetimeが検索対象になります。

「インデックスの作成」をクリックします。

DynamoDBにテーブルを作成する - AWS

インデックスが作成されていることが確認できます。また、属性で検索対象が確認できます。

以下のような2レコードあるテーブルをインデックスで検索してみます。

DynamoDBにテーブルを作成する - AWS

queryの引数は以下のようにオブジェクトで渡します。

let params = {
  TableName: 'sample',
  IndexName: 'name-index',
  KeyConditionExpression: ' #name = :value ',
  ExpressionAttributeNames: {
    '#name': 'name'
  },
  ExpressionAttributeValues: {
    ':value': 'jiro'
  }
};

全コードは以下のとおりです。

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件だけ取得できます。

{
  "Items": [
    {
      "datetime": "20171013",
      "sortkey": "2",
      "id": "1",
      "name": "jiro"
    }
  ],
  "Count": 1,
  "ScannedCount": 1
}

コメント

タイトルとURLをコピーしました