class Fog::AWS::DynamoDB::Real
Public Class Methods
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
# File lib/fog/aws/dynamodb.rb, line 74 def initialize(options={}) @use_iam_profile = options[:use_iam_profile] @region = options[:region] || 'us-east-1' setup_credentials(options) @connection_options = options[:connection_options] || {} @instrumentor = options[:instrumentor] @instrumentor_name = options[:instrumentor_name] || 'fog.aws.dynamodb' @host = options[:host] || "dynamodb.#{@region}.amazonaws.com" @path = options[:path] || '/' @persistent = options[:persistent] || false @port = options[:port] || '443' @scheme = options[:scheme] || 'https' @connection = Fog::XML::Connection.new("#{@scheme}://#{@host}:#{@port}#{@path}", @persistent, @connection_options) end
Public Instance Methods
Get DynamoDB
items
Parameters¶ ↑
-
'request_items'<~Hash>:
-
'table_name'<~Hash>:
-
'Keys'<~Array>: array of keys
-
-
Returns¶ ↑
-
response<~Excon::Response>:
-
body<~Hash>:
-
'Responses'<~Hash>:
-
'table_name'<~Array> - array of all elements
-
-
'UnprocessedKeys':<~Hash> - tables and keys in excess of per request limit, pass this to subsequent batch get for pseudo-pagination
-
'ConsumedCapacity':<~Hash>:
-
'TableName'<~String> - the name of the table
-
'CapacityUnits'<~Float> - Capacity units used in read
-
-
-
See DynamoDB
Documentation: docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_BatchGetItem.html
# File lib/fog/aws/requests/dynamodb/batch_get_item.rb, line 24 def batch_get_item(request_items) body = { 'RequestItems' => request_items } request( :body => Fog::JSON.encode(body), :headers => {'x-amz-target' => 'DynamoDB_20120810.BatchGetItem'}, :idempotent => true ) end
# File lib/fog/aws/requests/dynamodb/batch_write_item.rb, line 5 def batch_put_item(request_items) Fog::Logger.deprecation("batch_put_item is deprecated, use batch_write_item instead") batch_write_item(request_items) end
request_items has form:
{“table_name”=>
[{"PutRequest"=> {"Item"=> {"hi" => {"N" => 99}} } }]
}
See DynamoDB
Documentation: docs.amazonwebservices.com/amazondynamodb/latest/developerguide/API_BatchWriteItems.html
# File lib/fog/aws/requests/dynamodb/batch_write_item.rb, line 22 def batch_write_item(request_items) body = { 'RequestItems' => request_items } request( :body => Fog::JSON.encode(body), :headers => {'x-amz-target' => 'DynamoDB_20120810.BatchWriteItem'} ) end
Create DynamoDB
table
Parameters¶ ↑
-
'table_name'<~String> - name of table to create
-
'key_schema'<~Array>:
* 'AttributeName'<~String> - name of attribute * 'KeyType'<~String> - type of attribute, in %w{N NS 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
-
Returns¶ ↑
-
response<~Excon::Response>:
-
body<~Hash>:
-
'TableDescription'<~Hash>
-
'CreationDateTime'<~Float> - Unix epoch time of table creation
-
'KeySchema'<~Array> - schema for table
* 'AttributeName'<~String> - name of attribute * 'KeyType'<~String> - type of attribute, in %w{N NS 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
-
-
-
See DynamoDB
Documentation: docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_CreateTable.html
# File lib/fog/aws/requests/dynamodb/create_table.rb, line 32 def create_table(table_name, key_schema, provisioned_throughput) body = { 'KeySchema' => key_schema, 'ProvisionedThroughput' => provisioned_throughput, 'TableName' => table_name } request( :body => Fog::JSON.encode(body), :headers => {'x-amz-target' => 'DynamoDB_20120810.CreateTable'}, :idempotent => true ) end
Delete DynamoDB
item
Parameters¶ ↑
-
'table_name'<~String> - name of table for item
-
'key'<~Hash> - hash of attributes
Returns¶ ↑
-
response<~Excon::Response>:
-
body<~Hash>: varies based on ReturnValues param, see: docs.amazonwebservices.com/amazondynamodb/latest/developerguide/API_UpdateItem.html
-
See DynamoDB
Documentation: docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DeleteItem.html
# File lib/fog/aws/requests/dynamodb/delete_item.rb, line 18 def delete_item(table_name, key, options = {}) body = { 'Key' => key, 'TableName' => table_name }.merge(options) request( :body => Fog::JSON.encode(body), :headers => {'x-amz-target' => 'DynamoDB_20120810.DeleteItem'}, :idempotent => true ) end
Delete DynamoDB
table
Parameters¶ ↑
-
'table_name'<~String> - name of table to delete
Returns¶ ↑
-
response<~Excon::Response>:
-
body<~Hash>:
-
'TableDescription'<~Hash>
-
'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
-
-
-
See DynamoDB
Documentation: docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DeleteTable.html
# File lib/fog/aws/requests/dynamodb/delete_table.rb, line 22 def delete_table(table_name) body = { 'TableName' => table_name } request( :body => Fog::JSON.encode(body), :headers => {'x-amz-target' => 'DynamoDB_20120810.DeleteTable'}, :idempotent => true ) end
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'<~Array> - schema for table
-
'AttributeName'<~String> - name of attribute
-
'KeyType'<~String> - type of attribute, in %w{N NS 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
-
-
-
See DynamoDB
Documentation: docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeTable.html
# File lib/fog/aws/requests/dynamodb/describe_table.rb, line 27 def describe_table(table_name) body = { 'TableName' => table_name } request( :body => Fog::JSON.encode(body), :headers => {'x-amz-target' => 'DynamoDB_20120810.DescribeTable'}, :idempotent => true ) end
Get DynamoDB
item
Parameters¶ ↑
-
'table_name'<~String> - name of table for item
-
'key'<~Hash>:
{ "ForumName": { "S": "Amazon DynamoDB" } }
-
'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}
-
-
-
See DynamoDB
Documentation: docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html
# File lib/fog/aws/requests/dynamodb/get_item.rb, line 28 def get_item(table_name, key, options = {}) body = { 'Key' => key, 'TableName' => table_name }.merge(options) request( :body => Fog::JSON.encode(body), :headers => {'x-amz-target' => 'DynamoDB_20120810.GetItem'}, :idempotent => true ) end
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
-
-
See DynamoDB
Documentation: docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ListTables.html
# File lib/fog/aws/requests/dynamodb/list_tables.rb, line 20 def list_tables(options = {}) request( :body => Fog::JSON.encode(options), :headers => {'x-amz-target' => 'DynamoDB_20120810.ListTables'}, :idempotent => true ) end
Update DynamoDB
item
Parameters¶ ↑
-
'table_name'<~String> - name of table for item
-
'item'<~Hash>: data to update, must include primary key {
"LastPostDateTime": {"S": "201303190422"}
}
Returns¶ ↑
-
response<~Excon::Response>:
-
body<~Hash>: varies based on ReturnValues param, see: docs.amazonwebservices.com/amazondynamodb/latest/developerguide/API_UpdateItem.html
-
See DynamoDB
Documentation: docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html
# File lib/fog/aws/requests/dynamodb/put_item.rb, line 21 def put_item(table_name, item, options = {}) body = { 'Item' => item, 'TableName' => table_name }.merge(options) request( :body => Fog::JSON.encode(body), :headers => {'x-amz-target' => 'DynamoDB_20120810.PutItem'} ) end
Query 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
-
'KeyConditionExpression'<~String> - the condition elements need to match
-
'ExpressionAttributeValues'<~Hash> - values to be used in the key condition expression
-
'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
-
-
See DynamoDB
Documentation: docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Query.html
# File lib/fog/aws/requests/dynamodb/query.rb, line 29 def query(table_name, options = {}, hash_key_deprecated = nil) if hash_key_deprecated || (options.keys.length == 1 && [:S, :N, :B].include?(options.keys.first.to_sym)) Fog::Logger.deprecation("The `20111205` API version is deprecated. You need to use `KeyConditionExpression` instead of `HashKey`.") apiVersion = '20111205' hash_key = options options = hash_key_deprecated end body = { 'TableName' => table_name, 'HashKeyValue' => hash_key }.merge(options) request( :body => Fog::JSON.encode(body), :headers => {'x-amz-target' => "DynamoDB_#{apiVersion || '20120810'}.Query"} ) end
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
-
'KeyConditionExpression'<~String> - the condition elements need to match
-
'ExpressionAttributeValues'<~Hash> - values to be used in the key condition expression
-
'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
-
-
See DynamoDB
Documentation: docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateItem.html
# File lib/fog/aws/requests/dynamodb/scan.rb, line 30 def scan(table_name, options = {}) body = { 'TableName' => table_name }.merge(options) request( :body => Fog::JSON.encode(body), :headers => {'x-amz-target' => 'DynamoDB_20120810.Scan'}, :idempotent => true ) end
Update DynamoDB
item
Parameters¶ ↑
-
'table_name'<~String> - name of table for item
-
'key'<~Hash> - list of Key attributes {
"ForumName": {"S": "Amazon DynamoDB"}, "Subject": {"S": "Maximum number of items?"}
}
-
'options'<~Hash>:
-
'UpdateExpression'<~String> - the expression that will update the item
-
'ExpressionAttributeValues'<~Hash> - values to be used in the update expression
-
'ReturnValues'<~String> - data to return in %w{ALL_NEW ALL_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
-
See DynamoDB
Documentation: docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateItem.html
# File lib/fog/aws/requests/dynamodb/update_item.rb, line 28 def update_item(table_name, key, options = {}, deprecated_attribute_updates = nil) if deprecated_attribute_updates raise DeprecatedAttributeUpdates, "The `20111205` DynamoDB API is deprecated. You need to use `ExpressionAttributeValues` instead of `AttributeUpdates`." attribute_updates = options options = deprecated_attribute_updates.merge( 'AttributeUpdates' => attribute_updates, ) end body = { 'Key' => key, 'TableName' => table_name, }.merge(options) request( :body => Fog::JSON.encode(body), :headers => {'x-amz-target' => 'DynamoDB_20120810.UpdateItem'} ) end
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'<~Array> - schema for table
* 'AttributeName'<~String> - name of attribute * 'KeyType'<~String> - type of attribute, in %w{N NS 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
-
-
-
See DynamoDB
Documentation: docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateTable.html
# File lib/fog/aws/requests/dynamodb/update_table.rb, line 28 def update_table(table_name, provisioned_throughput) body = { 'ProvisionedThroughput' => provisioned_throughput, 'TableName' => table_name } request( :body => Fog::JSON.encode(body), :headers => {'x-amz-target' => 'DynamoDB_20120810.UpdateTable'}, :idempotent => true ) end
Private Instance Methods
# File lib/fog/aws/dynamodb.rb, line 137 def _request(params) response = @connection.request(params) unless response.body.empty? response.body = Fog::JSON.decode(response.body) end response end
# File lib/fog/aws/dynamodb.rb, line 104 def reload @connection.reset end
# File lib/fog/aws/dynamodb.rb, line 108 def request(params) refresh_credentials_if_expired # defaults for all dynamodb requests params.merge!({ :expects => 200, :method => :post, :path => '/' }) # setup headers and sign with signature v4 date = Fog::Time.now params[:headers] = { 'Content-Type' => 'application/x-amz-json-1.0', 'Date' => date.to_iso8601_basic, 'Host' => @host, }.merge!(params[:headers]) params[:headers]['x-amz-security-token'] = @aws_session_token if @aws_session_token params[:headers]['Authorization'] = @signer.sign(params, date) if @instrumentor @instrumentor.instrument("#{@instrumentor_name}.request", params) do _request(params) end else _request(params) end end
# File lib/fog/aws/dynamodb.rb, line 95 def setup_credentials(options) @aws_access_key_id = options[:aws_access_key_id] @aws_secret_access_key = options[:aws_secret_access_key] @aws_session_token = options[:aws_session_token] @aws_credentials_expire_at = options[:aws_credentials_expire_at] @signer = Fog::AWS::SignatureV4.new(@aws_access_key_id, @aws_secret_access_key, @region, 'dynamodb') end