Class: Fog::AWS::DynamoDB::Real
- Inherits:
-
Object
- Object
- Fog::AWS::DynamoDB::Real
- Defined in:
- lib/fog/aws/dynamodb.rb,
lib/fog/aws/requests/dynamodb/scan.rb,
lib/fog/aws/requests/dynamodb/query.rb,
lib/fog/aws/requests/dynamodb/get_item.rb,
lib/fog/aws/requests/dynamodb/put_item.rb,
lib/fog/aws/requests/dynamodb/delete_item.rb,
lib/fog/aws/requests/dynamodb/list_tables.rb,
lib/fog/aws/requests/dynamodb/update_item.rb,
lib/fog/aws/requests/dynamodb/create_table.rb,
lib/fog/aws/requests/dynamodb/delete_table.rb,
lib/fog/aws/requests/dynamodb/update_table.rb,
lib/fog/aws/requests/dynamodb/batch_get_item.rb,
lib/fog/aws/requests/dynamodb/describe_table.rb
Instance Method Summary collapse
-
#batch_get_item(request_items) ⇒ Object
Get DynamoDB items.
-
#create_table(table_name, key_schema, provisioned_throughput) ⇒ Object
Create DynamoDB table.
-
#delete_item(table_name, key, options = {}) ⇒ Object
Delete DynamoDB item.
-
#delete_table(table_name) ⇒ Object
Delete DynamoDB table.
-
#describe_table(table_name) ⇒ Object
Describe DynamoDB table.
-
#get_item(table_name, key, options = {}) ⇒ Object
Get DynamoDB item.
-
#initialize(options = {}) ⇒ Real
constructor
Initialize connection to DynamoDB.
-
#list_tables(options = {}) ⇒ Object
List DynamoDB tables.
-
#put_item(table_name, item, options = {}) ⇒ Object
Update DynamoDB item.
-
#query(table_name, hash_key, options = {}) ⇒ Object
Query DynamoDB items.
-
#scan(table_name, options = {}) ⇒ Object
Scan DynamoDB items.
-
#update_item(table_name, key, attribute_updates, options = {}) ⇒ Object
Update DynamoDB item.
-
#update_table(table_name, provisioned_throughput) ⇒ Object
Update DynamoDB table throughput.
Constructor Details
#initialize(options = {}) ⇒ Real
Initialize connection to DynamoDB
Notes
options parameter must include values for :aws_access_key_id and :aws_secret_access_key in order to create a connection
Examples
ddb = DynamoDB.new(
:aws_access_key_id => your_aws_access_key_id,
:aws_secret_access_key => your_aws_secret_access_key
)
Parameters
-
options<~Hash> - config arguments for connection. Defaults to {}.
Returns
-
DynamoDB object with connection to aws
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/fog/aws/dynamodb.rb', line 71 def initialize(={}) require 'multi_json' if [:aws_session_token] @aws_access_key_id = [:aws_access_key_id] @aws_secret_access_key = [:aws_secret_access_key] @aws_session_token = [:aws_session_token] else sts = Fog::AWS::STS.new( :aws_access_key_id => [:aws_access_key_id], :aws_secret_access_key => [:aws_secret_access_key] ) session_data = sts.get_session_token.body @aws_access_key_id = session_data['AccessKeyId'] @aws_secret_access_key = session_data['SecretAccessKey'] @aws_session_token = session_data['SessionToken'] end @connection_options = [:connection_options] || {} @hmac = Fog::HMAC.new('sha256', @aws_secret_access_key) [:region] ||= 'us-east-1' @host = [:host] || "dynamodb.#{[:region]}.amazonaws.com" @path = [:path] || '/' @persistent = [:persistent] || false @port = [:port] || '80' #443 @scheme = [:scheme] || 'http' #'https' @connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}#{@path}", @persistent, @connection_options) end |
Instance Method Details
#batch_get_item(request_items) ⇒ Object
Get DynamoDB items
Parameters
-
‘request_items’<~Hash>:
-
‘table_name’<~Hash>:
-
‘Keys’<~Array>: array of keys
-
‘HashKeyElement’<~Hash>: info for primary key
-
‘AttributeType’<~String> - type of attribute
-
‘AttributeName’<~String> - name of attribute
-
-
‘RangeKeyElement’<~Hash>: optional, info for range key
-
‘AttributeType’<~String> - type of attribute
-
‘AttributeName’<~String> - name of attribute
-
-
-
‘AttributesToGet’<~Array> - optional attributes to return, defaults to all
-
-
Returns
-
response<~Excon::Response>:
-
body<~Hash>:
-
‘Responses’<~Hash>:
-
‘table_name’<~Hash>:
-
‘Items’<~Array> - Matching items
-
‘ConsumedCapacityUnits’<~Float> - Capacity units used in read
-
-
-
‘UnprocessedKeys’:<~Hash> - tables and keys in excess of per request limit, pass this to subsequent batch get for pseudo-pagination
-
-
28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/fog/aws/requests/dynamodb/batch_get_item.rb', line 28 def batch_get_item(request_items) body = { 'RequestItems' => request_items } request( :body => MultiJson.encode(body), :headers => {'x-amz-target' => 'DynamoDB_20111205.BatchGetItem'}, :idempotent => true ) end |
#create_table(table_name, key_schema, provisioned_throughput) ⇒ Object
Create DynamoDB table
Parameters
-
‘table_name’<~String> - name of table to create
-
‘key_schema’<~Hash>:
-
‘HashKeyElement’<~Hash>: info for primary key
-
‘AttributeName’<~String> - name of attribute
-
‘AttributeType’<~String> - type of attribute, in %wNS S SS for number, number set, string, string set
-
-
‘RangeKeyElement’<~Hash>: optional, info for range key
-
‘AttributeName’<~String> - name of attribute
-
‘AttributeType’<~String> - type of attribute, in %wNS S SS for number, number set, string, string set
-
-
-
‘provisioned_throughput’<~Hash>:
-
‘ReadCapacityUnits’<~Integer> - read capacity for table, in 5..10000
-
‘WriteCapacityUnits’<~Integer> - write capacity for table, in 5..10000
-
Returns
-
response<~Excon::Response>:
-
body<~Hash>:
-
‘TableDescription’<~Hash>
-
‘CreationDateTime’<~Float> - Unix epoch time of table creation
-
‘KeySchema’<~Hash> - schema for table
-
‘HashKeyElement’<~Hash>: info for primary key
-
‘AttributeName’<~String> - name of attribute
-
‘AttributeType’<~String> - type of attribute, in %wNS S SS for number, number set, string, string set
-
-
‘RangeKeyElement’<~Hash>: optional, info for range key
-
‘AttributeName’<~String> - name of attribute
-
‘AttributeType’<~String> - type of attribute, in %wNS S SS for number, number set, string, string set
-
-
-
‘ProvisionedThroughput’<~Hash>:
-
‘ReadCapacityUnits’<~Integer> - read capacity for table, in 5..10000
-
‘WriteCapacityUnits’<~Integer> - write capacity for table, in 5..10000
-
-
‘TableName’<~String> - name of table
-
‘TableStatus’<~String> - status of table
-
-
-
38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/fog/aws/requests/dynamodb/create_table.rb', line 38 def create_table(table_name, key_schema, provisioned_throughput) body = { 'KeySchema' => key_schema, 'ProvisionedThroughput' => provisioned_throughput, 'TableName' => table_name } request( :body => MultiJson.encode(body), :headers => {'x-amz-target' => 'DynamoDB_20111205.CreateTable'}, :idempotent => true ) end |
#delete_item(table_name, key, options = {}) ⇒ Object
Delete DynamoDB item
Parameters
-
‘table_name’<~String> - name of table for item
-
‘key’<~Hash>:
-
‘HashKeyElement’<~Hash>: info for primary key
-
‘AttributeName’<~String> - name of attribute
-
‘AttributeType’<~String> - type of attribute
-
-
‘RangeKeyElement’<~Hash>: optional, info for range key
-
‘AttributeName’<~String> - name of attribute
-
‘AttributeType’<~String> - type of attribute
-
-
-
‘options’<~Hash>:
-
‘Expected’<~Hash>: data to check against
-
‘AttributeName’<~String> - name of attribute
-
‘Value’<~Hash> - a value to check for the value of
or
-
‘Exists’<~Boolean> - set as false to only allow update if attribute doesn’t exist
-
-
‘ReturnValues’<~String> - data to return in %wALL_OLD NONE UPDATED_NEW UPDATED_OLD, defaults to NONE
-
Returns
-
response<~Excon::Response>:
-
body<~Hash>: varies based on ReturnValues param, see: docs.amazonwebservices.com/amazondynamodb/latest/developerguide/API_UpdateItem.html
-
29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/fog/aws/requests/dynamodb/delete_item.rb', line 29 def delete_item(table_name, key, = {}) body = { 'Key' => key, 'TableName' => table_name }.merge() request( :body => MultiJson.encode(body), :headers => {'x-amz-target' => 'DynamoDB_20111205.DeleteItem'}, :idempotent => true ) end |
#delete_table(table_name) ⇒ Object
Delete DynamoDB table
Parameters
-
‘table_name’<~String> - name of table to delete
Returns
-
response<~Excon::Response>:
-
body<~Hash>:
-
‘TableDescription’<~Hash>
-
‘KeySchema’<~Hash> - schema for table
-
‘HashKeyElement’<~Hash>: info for primary key
-
‘AttributeName’<~String> - name of attribute
-
‘AttributeType’<~String> - type of attribute, in %wNS S SS for number, number set, string, string set
-
-
‘RangeKeyElement’<~Hash>: optional, info for range key
-
‘AttributeName’<~String> - name of attribute
-
‘AttributeType’<~String> - type of attribute, in %wNS S SS for number, number set, string, string set
-
-
-
‘ProvisionedThroughput’<~Hash>:
-
‘ReadCapacityUnits’<~Integer> - read capacity for table, in 5..10000
-
‘WriteCapacityUnits’<~Integer> - write capacity for table, in 5..10000
-
-
‘TableName’<~String> - name of table
-
‘TableStatus’<~String> - status of table
-
-
-
27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/fog/aws/requests/dynamodb/delete_table.rb', line 27 def delete_table(table_name) body = { 'TableName' => table_name } request( :body => MultiJson.encode(body), :headers => {'x-amz-target' => 'DynamoDB_20111205.DeleteTable'}, :idempotent => true ) end |
#describe_table(table_name) ⇒ Object
Describe DynamoDB table
Parameters
-
‘table_name’<~String> - name of table to describe
Returns
-
response<~Excon::Response>:
-
body<~Hash>:
-
‘Table’<~Hash>
-
‘CreationDateTime’<~Float> - Unix epoch time of table creation
-
‘KeySchema’<~Hash> - schema for table
-
‘HashKeyElement’<~Hash>: info for primary key
-
‘AttributeName’<~String> - name of attribute
-
‘AttributeType’<~String> - type of attribute, in %wNS S SS for number, number set, string, string set
-
-
‘RangeKeyElement’<~Hash>: optional, info for range key
-
‘AttributeName’<~String> - name of attribute
-
‘AttributeType’<~String> - type of attribute, in %wNS S SS for number, number set, string, string set
-
-
-
‘ProvisionedThroughput’<~Hash>:
-
‘ReadCapacityUnits’<~Integer> - read capacity for table, in 5..10000
-
‘WriteCapacityUnits’<~Integer> - write capacity for table, in 5..10000
-
-
‘TableName’<~String> - name of table
-
‘TableSizeBytes’<~Integer> - size of table in bytes
-
‘TableStatus’<~String> - status of table
-
-
-
29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/fog/aws/requests/dynamodb/describe_table.rb', line 29 def describe_table(table_name) body = { 'TableName' => table_name } request( :body => MultiJson.encode(body), :headers => {'x-amz-target' => 'DynamoDB_20111205.DescribeTable'}, :idempotent => true ) end |
#get_item(table_name, key, options = {}) ⇒ Object
Get DynamoDB item
Parameters
-
‘table_name’<~String> - name of table for item
-
‘key’<~Hash>:
-
‘HashKeyElement’<~Hash>: info for primary key
-
‘AttributeType’<~String> - type of attribute
-
‘AttributeName’<~String> - name of attribute
-
-
‘RangeKeyElement’<~Hash>: optional, info for range key
-
‘AttributeType’<~String> - type of attribute
-
‘AttributeName’<~String> - name of attribute
-
-
-
‘options’<~Hash>:
-
‘AttributesToGet’<~Array>: list of array names to return, defaults to returning all
-
‘ConsistentRead’<~Boolean>: whether to wait for updates, defaults to false
-
Returns
-
response<~Excon::Response>:
-
body<~Hash>:
-
‘ConsumedCapacityUnits’<~Float> - Capacity units used in read
-
‘Item’:<~Hash>:
-
‘AttributeName’<~Hash>: in form of “type”:value
-
-
-
27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/fog/aws/requests/dynamodb/get_item.rb', line 27 def get_item(table_name, key, = {}) body = { 'Key' => key, 'TableName' => table_name }.merge() request( :body => MultiJson.encode(body), :headers => {'x-amz-target' => 'DynamoDB_20111205.GetItem'}, :idempotent => true ) end |
#list_tables(options = {}) ⇒ Object
List DynamoDB tables
Parameters
-
‘options’<~Hash> - options, defaults to {}
-
‘ExclusiveStartTableName’<~String> - name of table to begin listing with
-
‘Limit’<~Integer> - limit number of tables to return
-
Returns
-
response<~Excon::Response>:
-
body<~Hash>:
-
‘LastEvaluatedTableName’<~String> - last table name, for pagination
-
‘TableNames’<~Array> - table names
-
-
18 19 20 21 22 23 24 |
# File 'lib/fog/aws/requests/dynamodb/list_tables.rb', line 18 def list_tables( = {}) request( :body => MultiJson.encode(), :headers => {'x-amz-target' => 'DynamoDB_20111205.ListTables'}, :idempotent => true ) end |
#put_item(table_name, item, options = {}) ⇒ Object
Update DynamoDB item
Parameters
-
‘table_name’<~String> - name of table for item
-
‘item’<~Hash>: data to update, must include primary key
-
‘AttributeName’<~String> - Attribute to update
-
‘Value’<~Hash> - formated as => value
-
‘Action’<~String> - action to take if expects matches, in %wDELETE PUT, defaults to PUT
-
-
-
‘options’<~Hash>:
-
‘Expected’<~Hash>: data to check against
-
‘AttributeName’<~String> - name of attribute
-
‘Value’<~Hash> - a value to check for the value of
or
-
‘Exists’<~Boolean> - set as false to only allow update if attribute doesn’t exist
-
-
‘ReturnValues’<~String> - data to return in %wALL_OLD NONE UPDATED_NEW UPDATED_OLD, defaults to NONE
-
Returns
-
response<~Excon::Response>:
-
body<~Hash>: varies based on ReturnValues param, see: docs.amazonwebservices.com/amazondynamodb/latest/developerguide/API_UpdateItem.html
-
26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/fog/aws/requests/dynamodb/put_item.rb', line 26 def put_item(table_name, item, = {}) body = { 'Item' => item, 'TableName' => table_name }.merge() request( :body => MultiJson.encode(body), :headers => {'x-amz-target' => 'DynamoDB_20111205.PutItem'} ) end |
#query(table_name, hash_key, options = {}) ⇒ Object
Query DynamoDB items
Parameters
-
‘table_name’<~String> - name of table to query
-
‘hash_key’<~Hash> - hash key to query
-
options<~Hash>:
-
‘AttributesToGet’<~Array> - Array of attributes to get for each item, defaults to all
-
‘ConsistentRead’<~Boolean> - Whether to wait for consistency, defaults to false
-
‘Count’<~Boolean> - If true, returns only a count of such items rather than items themselves, defaults to false
-
‘Limit’<~Integer> - limit of total items to return
-
‘RangeKeyCondition’<~Hash>: value to compare against range key
-
‘AttributeValueList’<~Hash>: one or more values to compare against
-
‘ComparisonOperator’<~String>: comparison operator to use with attribute value list, in %wBEGINS_WITH EQ LE LT GE GT
-
-
‘ScanIndexForward’<~Boolean>: Whether to scan from start or end of index, defaults to start
-
‘ExclusiveStartKey’<~Hash>: Key to start listing from, can be taken from LastEvaluatedKey in response
-
Returns
-
response<~Excon::Response>:
-
body<~Hash>:
-
‘ConsumedCapacityUnits’<~Integer> - number of capacity units used for query
-
‘Count’<~Integer> - number of items in response
-
‘Items’<~Array> - array of items returned
-
‘LastEvaluatedKey’<~Hash> - last key scanned, can be passed to ExclusiveStartKey for pagination
-
-
29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/fog/aws/requests/dynamodb/query.rb', line 29 def query(table_name, hash_key, = {}) body = { 'TableName' => table_name, 'HashKeyValue' => hash_key }.merge() request( :body => MultiJson.encode(body), :headers => {'x-amz-target' => 'DynamoDB_20111205.Query'} ) end |
#scan(table_name, options = {}) ⇒ Object
Scan DynamoDB items
Parameters
-
‘table_name’<~String> - name of table to query
-
options<~Hash>:
-
‘AttributesToGet’<~Array> - Array of attributes to get for each item, defaults to all
-
‘ConsistentRead’<~Boolean> - Whether to wait for consistency, defaults to false
-
‘Count’<~Boolean> - If true, returns only a count of such items rather than items themselves, defaults to false
-
‘Limit’<~Integer> - limit of total items to return
-
‘ScanFilter’<~Hash>: value to compare against
-
attribute_name<~Hash>:
-
‘AttributeValueList’<~Hash>: one or more values to compare against
-
‘ComparisonOperator’<~String>: comparison operator to use with attribute value list, in %wBEGINS_WITH EQ LE LT GE GT
-
-
-
‘ScanIndexForward’<~Boolean>: Whether to scan from start or end of index, defaults to start
-
‘ExclusiveStartKey’<~Hash>: Key to start listing from, can be taken from LastEvaluatedKey in response
-
Returns
-
response<~Excon::Response>:
-
body<~Hash>:
-
‘ConsumedCapacityUnits’<~Integer> - number of capacity units used for scan
-
‘Count’<~Integer> - number of items in response
-
‘Items’<~Array> - array of items returned
-
‘LastEvaluatedKey’<~Hash> - last key scanned, can be passed to ExclusiveStartKey for pagination
-
‘ScannedCount’<~Integer> - number of items scanned before applying filters
-
-
30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/fog/aws/requests/dynamodb/scan.rb', line 30 def scan(table_name, = {}) body = { 'TableName' => table_name }.merge() request( :body => MultiJson.encode(body), :headers => {'x-amz-target' => 'DynamoDB_20111205.Scan'}, :idempotent => true ) end |
#update_item(table_name, key, attribute_updates, options = {}) ⇒ Object
Update DynamoDB item
Parameters
-
‘table_name’<~String> - name of table for item
-
‘key’<~Hash>:
-
‘HashKeyElement’<~Hash>: info for primary key
-
‘AttributeName’<~String> - name of attribute
-
‘AttributeType’<~String> - type of attribute
-
-
‘RangeKeyElement’<~Hash>: optional, info for range key
-
‘AttributeName’<~String> - name of attribute
-
‘AttributeType’<~String> - type of attribute
-
-
-
‘attribute_updates’<~Hash>:
-
‘AttributeName’<~String> - Attribute to update
-
‘Value’<~Hash> - formated as => value
-
‘Action’<~String> - action to take if expects matches, in %wDELETE PUT, defaults to PUT
-
-
-
‘options’<~Hash>:
-
‘Expected’<~Hash>: data to check against
-
‘AttributeName’<~String> - name of attribute
-
‘Value’<~Hash> - a value to check for the value of
or
-
‘Exists’<~Boolean> - set as false to only allow update if attribute doesn’t exist
-
-
‘ReturnValues’<~String> - data to return in %wALL_OLD NONE UPDATED_NEW UPDATED_OLD, defaults to NONE
-
Returns
-
response<~Excon::Response>:
-
body<~Hash>: varies based on ReturnValues param, see: docs.amazonwebservices.com/amazondynamodb/latest/developerguide/API_UpdateItem.html
-
33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/fog/aws/requests/dynamodb/update_item.rb', line 33 def update_item(table_name, key, attribute_updates, = {}) body = { 'AttributeUpdates' => attribute_updates, 'Key' => key, 'TableName' => table_name }.merge() request( :body => MultiJson.encode(body), :headers => {'x-amz-target' => 'DynamoDB_20111205.UpdateItem'} ) end |
#update_table(table_name, provisioned_throughput) ⇒ Object
Update DynamoDB table throughput
Parameters
-
‘table_name’<~String> - name of table to describe
-
‘provisioned_throughput’<~Hash>:
-
‘ReadCapacityUnits’<~Integer> - read capacity for table, in 5..10000
-
‘WriteCapacityUnits’<~Integer> - write capacity for table, in 5..10000
-
Returns
-
response<~Excon::Response>:
-
body<~Hash>:
-
‘Table’<~Hash>
-
‘KeySchema’<~Hash> - schema for table
-
‘HashKeyElement’<~Hash>: info for primary key
-
‘AttributeName’<~String> - name of attribute
-
‘AttributeType’<~String> - type of attribute, in %wNS S SS for number, number set, string, string set
-
-
‘RangeKeyElement’<~Hash>: optional, info for range key
-
‘AttributeName’<~String> - name of attribute
-
‘AttributeType’<~String> - type of attribute, in %wNS S SS for number, number set, string, string set
-
-
-
‘ProvisionedThroughput’<~Hash>:
-
‘ReadCapacityUnits’<~Integer> - read capacity for table, in 5..10000
-
‘WriteCapacityUnits’<~Integer> - write capacity for table, in 5..10000
-
-
‘TableName’<~String> - name of table
-
‘TableStatus’<~String> - status of table
-
-
-
30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/fog/aws/requests/dynamodb/update_table.rb', line 30 def update_table(table_name, provisioned_throughput) body = { 'ProvisionedThroughput' => provisioned_throughput, 'TableName' => table_name } request( :body => MultiJson.encode(body), :headers => {'x-amz-target' => 'DynamoDB_20111205.UpdateTable'}, :idempotent => true ) end |