Class: Fog::AWS::DynamoDB::Real

Inherits:
Object
  • Object
show all
Includes:
CredentialFetcher::ConnectionMethods
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,
lib/fog/aws/requests/dynamodb/batch_write_item.rb

Instance Method Summary collapse

Methods included from CredentialFetcher::ConnectionMethods

#refresh_credentials_if_expired

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



77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/fog/aws/dynamodb.rb', line 77

def initialize(options={})
  @use_iam_profile = options[:use_iam_profile]
  @region = options[:region] || 'us-east-1'

  setup_credentials(options)

  @connection_options     = options[:connection_options] || {}

  @host       = options[:host]        || "dynamodb.#{@region}.amazonaws.com"
  @path       = options[:path]        || '/'
  @persistent = options[:persistent]  || false
  @port       = options[:port]        || '80' #443
  @scheme     = options[: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       => Fog::JSON.encode(body),
    :headers    => {'x-amz-target' => 'DynamoDB_20111205.BatchGetItem'},
    :idempotent => true
  )
end

#batch_put_item(request_items) ⇒ Object



6
7
8
9
# File 'lib/fog/aws/requests/dynamodb/batch_write_item.rb', line 6

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

#batch_write_item(request_items) ⇒ Object

request_items has form:

[{"PutRequest"=>
  {"Item"=>
    {"hash_key"=>{"N"=>"99",
     "range_key"=>"N"=>"99",
     "attribute"=>"S"=>"hi"
     }}}, ... ]}

For more information: docs.amazonwebservices.com/amazondynamodb/latest/developerguide/API_BatchWriteItems.html



21
22
23
24
25
26
27
28
29
30
# File 'lib/fog/aws/requests/dynamodb/batch_write_item.rb', line 21

def batch_write_item(request_items)
  body = {
    'RequestItems' => request_items
  }

  request(
    :body       => Fog::JSON.encode(body),
    :headers    => {'x-amz-target' => 'DynamoDB_20111205.BatchWriteItem'}
  )
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       => Fog::JSON.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



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, options = {})
  body = {
    'Key'               => key,
    'TableName'         => table_name
  }.merge(options)

  request(
    :body       => Fog::JSON.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       => Fog::JSON.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       => Fog::JSON.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, options = {})
  body = {
    'Key'               => key,
    'TableName'         => table_name
  }.merge(options)

  request(
    :body       => Fog::JSON.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(options = {})
  request(
    :body       => Fog::JSON.encode(options),
    :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



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, options = {})
  body = {
    'Item'      => item,
    'TableName' => table_name
  }.merge(options)

  request(
    :body       => Fog::JSON.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, options = {})
  body = {
    'TableName'     => table_name,
    'HashKeyValue'  => hash_key
  }.merge(options)

  request(
    :body     => Fog::JSON.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, options = {})
  body = {
    'TableName'     => table_name
  }.merge(options)

  request(
    :body     => Fog::JSON.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



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, options = {})
  body = {
    'AttributeUpdates'  => attribute_updates,
    'Key'               => key,
    'TableName'         => table_name
  }.merge(options)

  request(
    :body     => Fog::JSON.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       => Fog::JSON.encode(body),
    :headers    => {'x-amz-target' => 'DynamoDB_20111205.UpdateTable'},
    :idempotent => true
  )
end