- 책 또는 웹사이트의 내용을 복제하여 다른 곳에 게시하는 것을 금지합니다.
- 책 또는 웹사이트의 내용을 발췌, 요약하여 강의 자료, 발표 자료, 블로그 포스팅 등으로 만드는 것을 금지합니다.
AWS API, CLI 활용하기
이재홍 http://www.pyrasis.com 2014.03.24 ~ 2014.06.30
DynamoDB
DynamoDB 테이블에 아이템을 저장하는 방법은 다음과 같습니다.
- Item: 저장할 아이템을 정의합니다. 각 속성의 자료형을 구분해줘야 합니다. 아이템이 있으면 내용을 업데이트하고, 없으면 새로 생성합니다.
- S, SS: 문자열, 문자열 배열(String Set)입니다.
- N, NS: 숫자, 숫자 배열(Number Set)입니다. 단, JavaScript 상에서는 문자열 형태로 값을 설정해야 합니다.
- B, BS: 바이너리, 바이너리 배열(Binary Set)입니다. Buffer 형태로 설정합니다.
- TableName: 아이템을 저장할 테이블 이름을 설정합니다.
DynamoDB를 사용하는 방법은 '14장 확장 가능한 NoSQL 분산 데이터베이스를 제공하는 DynamoDB'를 참조하기 바랍니다.
var AWS = require('aws-sdk');
AWS.config.loadFromPath('./config.json');
dynamodb = new AWS.DynamoDB();
var params = {
Item: { // 필수
someKey1: {
S: 'Hello String'
},
someKey2: {
SS: [ 'Hello String 1', 'Hello String 2' ]
},
someKey3: {
N: '1'
},
someKey4: {
NS: [ '1', '2' ]
},
someKey5: {
B: new Buffer([1, 2, 3])
},
someKey6: {
BS: [ new Buffer([1, 2, 3]), new Buffer([4, 5, 6]) ]
}
},
TableName: 'ExampleTable' // 필수
};
dynamodb.putItem(params, function (err, data) {
if (err)
console.log(err, err.stack);
else
console.log(data);
});
저장할 아이템을 JSON 형태로 작성합니다.
{
"someKey1": {
"S": "Hello String"
},
"someKey2": {
"SS": [ "Hello String 1", "Hello String 2" ]
},
"someKey3": {
"N": "1"
},
"someKey4": {
"NS": [ "1", "2" ]
}
}
--item 옵션에 작성한 JSON을 한 줄로 만들고 ' '(작은 따옴표)로 묶어서 설정합니다.
$ aws dynamodb put-item --table-name ExampleTable --item '{ "someKey1": { "S": "Hello String" }, "someKey2": { "SS": [ "Hello String 1", "Hello String 2" ] }, "someKey3": { "N": "1" }, "someKey4": { "NS": [ "1", "2" ] } }'
DynamoDB 테이블에 아이템을 업데이트하는 방법은 다음과 같습니다.
- Key: 업데이트할 아이템의 검색 키를 설정합니다. 문자열뿐만 아니라 문자열 배열, 숫자, 숫자 배열, 바이너리, 바이너리 배열도 설정할 수 있습니다.
- TableName: 아이템을 업데이트할 테이블 이름을 설정합니다.
- AttributeUpdates: 업데이트할 속성 및 값을 설정합니다.
- Action: 속성 업데이트 동작입니다.
- PUT: 아이템이 있으면 내용을 교체하고, 없으면 새로 생성합니다.
- ADD: 숫자, 숫자 배열만 사용할 수 있습니다. 숫자이고 아이템이 있으면 값을 더합니다. 숫자 배열이고 아이템이 있으면 배열에 원소를 추가합니다. 아이템이 없으면 새로 생성합니다.
- DELETE: 속성을 삭제합니다.
- Action: 속성 업데이트 동작입니다.
- Value: 문자열, 문자열 배열, 숫자, 숫자 배열, 바이너리, 바이너리 배열을 사용할 수 있습니다.
var AWS = require('aws-sdk');
AWS.config.loadFromPath('./config.json');
dynamodb = new AWS.DynamoDB();
var params = {
Key: { // 필수
someKey1: {
S: 'Hello String'
}
},
TableName: 'ExampleTable', // 필수
AttributeUpdates: { // 필수
someKey2: {
Action: 'PUT',
Value: {
SS: [ 'Hello String 10', 'Hello String 20' ]
}
},
someKey3: {
Action: 'ADD',
Value: {
N: '10'
}
},
someKey4: {
Action: 'DELETE'
},
someKey5: {
Action: 'PUT',
Value: {
B: new Buffer([10, 20, 30])
}
},
someKey6: {
Action: 'DELETE'
}
}
};
dynamodb.updateItem(params, function (err, data) {
if (err)
console.log(err, err.stack);
else
console.log(data);
});
검색할 키를 JSON 형태로 작성합니다.
{
"someKey1": {
"S": "Hello String"
}
}
업데이트할 아이템을 JSON 형태로 작성합니다.
{
"someKey2": {
"Action": "PUT",
"Value": {
"SS": [ "Hello String 10", "Hello String 20" ]
}
},
"someKey3": {
"Action": "ADD",
"Value": {
"N": "10"
}
},
"someKey4": {
"Action": "DELETE"
}
}
--key, --attribute-updates 옵션에 작성한 JSON을 한 줄로 만들고 ' '(작은 따옴표)로 묶어서 설정합니다.
$ aws dynamodb update-item --table-name ExampleTable --key '{ "someKey1": { "S": "Hello String" } }' --attribute-updates '{ "someKey2": { "Action": "PUT", "Value": { "SS": [ "Hello String 10", "Hello String 20" ] } }, "someKey3": { "Action": "ADD", "Value": { "N": "10" } }, "someKey4": { "Action": "DELETE" } }'
DynamoDB 테이블에 여러 아이템 저장, 업데이트하는 방법은 다음과 같습니다.
- RequestItems: 저장, 업데이트할 아이템 목록입니다. 테이블 이름을 키로 설정합니다.
- DeleteRequest: 조건에 맞는 아이템을 삭제합니다.
- Key: 삭제할 아이템의 검색 키입니다. 문자열뿐만 아니라 문자열 배열, 숫자, 숫자 배열, 바이너리, 바이너리 배열도 설정할 수 있습니다.
- PutRequest: 아이템을 저장합니다. 키에 맞는 아이템이 있으면 업데이트하고, 없으면 새로 생성합니다.
- Item: 저장할 아이템을 설정합니다. 문자열뿐만 아니라 문자열 배열, 숫자, 숫자 배열, 바이너리, 바이너리 배열도 설정할 수 있습니다.
- DeleteRequest: 조건에 맞는 아이템을 삭제합니다.
var AWS = require('aws-sdk');
AWS.config.loadFromPath('./config.json');
dynamodb = new AWS.DynamoDB();
var params = {
RequestItems: { // 필수
'ExampleTable': [
{
DeleteRequest: {
Key: { // 필수
someKey1: {
S: 'Hello String'
}
}
}
},
{
PutRequest: {
Item: { // 필수
someKey1: {
S: 'World String'
}
}
}
}
]
}
};
dynamodb.batchWriteItem(params, function (err, data) {
if (err)
console.log(err, err.stack);
else
console.log(data);
});
저장, 업데이트할 아이템을 JSON 형태로 작성합니다.
{
"ExampleTable": [
{
"DeleteRequest": {
"Key": {
"someKey1": {
"S": "Hello String"
}
}
}
},
{
"PutRequest": {
"Item": {
"someKey1": {
"S": "World String"
}
}
}
}
]
}
--request-items 옵션에 작성한 JSON을 한 줄로 만들고 ' '(작은 따옴표)로 묶어서 설정합니다.
$ aws dynamodb batch-write-item --request-items '{ "ExampleTable": [ { "DeleteRequest": { "Key": { "someKey1": { "S": "Hello String" } } } }, { "PutRequest": { "Item": { "someKey1": { "S": "World String" } } } } ] }'
DynamoDB 테이블에서 아이템을 가져오는 방법은 다음과 같습니다.
- Key: 가져올 아이템의 검색 키를 설정합니다. 문자열뿐만 아니라 문자열 배열, 숫자, 숫자 배열, 바이너리, 바이너리 배열도 설정할 수 있습니다.
- TableName: 아이템을 가져올 테이블 이름을 설정합니다.
- ConsistentRead: Strongly Consistent Read를 사용합니다. false로 설정하거나 이 옵션을 설정하지 않으면 Eventually Consistent Read를 사용합니다.
var AWS = require('aws-sdk');
AWS.config.loadFromPath('./config.json');
dynamodb = new AWS.DynamoDB();
var params = {
Key: { // 필수
someKey1: {
S: 'Hello String'
}
},
TableName: 'ExampleTable', // 필수
ConsistentRead: true
};
dynamodb.getItem(params, function (err, data) {
if (err)
console.log(err, err.stack);
else
console.log(data);
});
다음과 같이 가져올 아이템의 검색 키를 JSON 형태로 작성합니다.
{
"someKey1": {
"S": "Hello String"
}
}
--key 옵션에 작성한 JSON을 한 줄로 만들고 ' '(작은 따옴표)로 묶어서 설정합니다.
$ aws dynamodb get-item --table-name ExampleTable --key '{ "someKey1": { "S": "Hello String" } }' --no-consistent-read
$ aws dynamodb get-item --table-name ExampleTable --key '{ "someKey1": { "S": "Hello String" } }' --consistent-read
DynamoDB 테이블에서 여러 아이템을 가져오는 방법은 다음과 같습니다.
- RequestItems: 가져올 아이템 목록입니다. 테이블 이름을 키로 설정합니다.
- Keys: 가져올 아이템의 검색 키를 배열 형태로 설정합니다. 문자열뿐만 아니라 문자열 배열, 숫자, 숫자 배열, 바이너리, 바이너리 배열도 설정할 수 있습니다.
- ConsistentRead: Strongly Consistent Read를 사용합니다. false로 설정하거나 이 옵션을 설정하지 않으면 Eventually Consistent Read를 사용합니다.
var AWS = require('aws-sdk');
AWS.config.loadFromPath('./config.json');
dynamodb = new AWS.DynamoDB();
var params = {
RequestItems: { // 필수
'ExampleTable': {
Keys: [ // 필수
{
someKey1: {
S: 'Hello String'
}
},
{
someKey1: {
S: 'World String'
}
}
],
ConsistentRead: true
}
}
};
dynamodb.batchGetItem(params, function (err, data) {
if (err)
console.log(err, err.stack);
else
console.log(data);
});
가져올 아이템의 검색 키 목록을 JSON 형태로 작성합니다.
{
"ExampleTable": {
"Keys": [
{
"someKey1": {
"S": "Hello String"
}
},
{
"someKey1": {
"S": "World String"
}
}
],
"ConsistentRead": "true"
}
}
--request-items 옵션에 작성한 JSON을 한 줄로 만들고 ' '(작은 따옴표)로 묶어서 설정합니다.
$ aws dynamodb batch-get-item --request-items '{ "ExampleTable": { "Keys": [ { "someKey1": { "S": "Hello String" } }, { "someKey1": { "S": "World String" } } ], "ConsistentRead": "true" } }'
DynamoDB 테이블에 쿼리하는 방법은 다음과 같습니다.
- KeyConditions: 검색할 키를 정의합니다.
- ComparisonOperator: 검색 조건이며 EQ, NE, IN, LE, LT, GE, GT, BETWEEN, NOT_NULL, NULL, CONTAINS, NOT_CONTAINS, BEGINS_WITH이 있습니다. EQ를 제외한 다른 조건들은 범위 키(Range Key)에서 사용할 수 있습니다.
- AttributeValueList: 검색할 키 목록을 배열 형태로 설정합니다.
- TableName: 검색할 테이블의 이름을 설정합니다.
- QueryFilter: 검색 결과를 설정한 조건대로 걸러내는 옵션입니다.
- 검색 조건이며 EQ, NE, IN, LE, LT, GE, GT, BETWEEN, NOT_NULL, NULL, CONTAINS, NOT_CONTAINS, BEGINS_WITH이 있습니다.
- AttributeValueList: 걸러낼 속성 목록을 배열 형태로 설정합니다.
- ConsistentRead: Strongly Consistent Read를 사용합니다. false로 설정하거나 이 옵션을 설정하지 않으면 Eventually Consistent Read를 사용합니다.
var AWS = require('aws-sdk');
AWS.config.loadFromPath('./config.json');
dynamodb = new AWS.DynamoDB();
var params = {
KeyConditions: { // 필수
someKey1: {
ComparisonOperator: 'EQ',
AttributeValueList: [
{
S: 'Hello String'
}
]
}
},
TableName: 'ExampleTable', // 필수
QueryFilter: {
someKey3: {
ComparisonOperator: 'EQ',
AttributeValueList: [
{
N: '1'
}
]
}
},
ConsistentRead: true
};
dynamodb.query(params, function (err, data) {
if (err)
console.log(err, err.stack);
else
console.log(data);
});
검색할 키를 JSON 형태로 작성합니다.
{
"someKey1": {
"ComparisonOperator": "EQ",
"AttributeValueList": [
{
"S": "Hello String"
}
]
}
}
걸러낼 키를 JSON 형태로 작성합니다.
{
"someKey3": {
"ComparisonOperator": "EQ",
"AttributeValueList": [
{
"N": "1"
}
]
}
}
--key-conditions, --query-filter 옵션에 작성한 JSON을 한 줄로 만들고 ' '(작은 따옴표)로 묶어서 설정합니다.
$ aws dynamodb query --table-name ExampleTable --key-conditions '{ "someKey1": { "ComparisonOperator": "EQ", "AttributeValueList": [ { "S": "Hello String" } ] } }' --query-filter '{ "someKey3": { "ComparisonOperator": "EQ", "AttributeValueList": [ { "N": "1" } ] } }' --consistent-read
DynamoDB 테이블에서 스캔하는 방법은 다음과 같습니다.
- TableName: 검색할 테이블의 이름을 설정합니다.
- ScanFilter: 검색 결과를 설정한 조건대로 걸러내는 옵션입니다.
- 검색 조건이며 EQ, NE, IN, LE, LT, GE, GT, BETWEEN, NOT_NULL, NULL, CONTAINS, NOT_CONTAINS, BEGINS_WITH이 있습니다.
- AttributeValueList: 걸러낼 속성 목록을 배열 형태로 설정합니다.
var AWS = require('aws-sdk');
AWS.config.loadFromPath('./config.json');
dynamodb = new AWS.DynamoDB();
var params = {
TableName: 'ExampleTable', // 필수
ScanFilter: {
someKey3: {
ComparisonOperator: 'EQ',
AttributeValueList: [
{
N: '1'
}
]
}
},
};
dynamodb.scan(params, function (err, data) {
if (err)
console.log(err, err.stack);
else
console.log(data);
});
걸러낼 키를 JSON 형태로 작성합니다.
{
"someKey3": {
"ComparisonOperator": "EQ",
"AttributeValueList": [
{
"N": "1"
}
]
}
}
--scan-filter 옵션에 작성한 JSON을 한 줄로 만들고 ' '(작은 따옴표)로 묶어서 설정합니다.
$ aws dynamodb scan --table-name ExampleTable --scan-filter '{ "someKey3": { "ComparisonOperator": "EQ", "AttributeValueList": [ { "N": "1" } ] } }'
다른 함수들의 사용 방법은 다음 링크를 참조하기 바랍니다.
http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html
저작권 안내
이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.- 블로그, 게시판 등에 퍼가는 것을 금지합니다.
- 비공개 포스트에 퍼가는 것을 금지합니다.
- 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
- 링크 및 SNS 공유는 허용합니다.