lib/dyna/dsl/table.rb in dyna-0.1.9 vs lib/dyna/dsl/table.rb in dyna-0.2.0
- old
+ new
@@ -9,10 +9,12 @@
@table_name = table_name
@context = context
@result = Hashie::Mash.new({
:table_name => table_name,
+ :scalable_targets => [],
+ :scaling_policies => [],
})
instance_eval(&block)
end
def key_schema(hash:, range: nil)
@@ -65,9 +67,38 @@
index = GlobalSecondaryIndex.new
index.instance_eval(&block)
@result.global_secondary_indexes << {
index_name: index_name,
}.merge(index.result.symbolize_keys)
+ end
+
+ def billing_mode(billing_mode)
+ @result.billing_mode = billing_mode
+ end
+
+ def scalable_target(scalable_dimension:, min_capacity:, max_capacity:)
+ @result.scalable_targets << {
+ service_namespace: 'dynamodb',
+ scalable_dimension: scalable_dimension,
+ resource_id: "table/#{@result.table_name}",
+ min_capacity: min_capacity,
+ max_capacity: max_capacity,
+ }
+ end
+
+ def scaling_policy(scalable_dimension:, target_tracking_scaling_policy_configuration:)
+ predefined_metric_type = 'DynamoDBWriteCapacityUtilization'
+ if scalable_dimension == 'dynamodb:table:ReadCapacityUnits'
+ predefined_metric_type = 'DynamoDBReadCapacityUtilization'
+ end
+ @result.scaling_policies << {
+ policy_name: "#{predefined_metric_type}:table/#{@result.table_name}",
+ policy_type: 'TargetTrackingScaling',
+ resource_id: "table/#{@result.table_name}",
+ scalable_dimension: scalable_dimension,
+ service_namespace: 'dynamodb',
+ target_tracking_scaling_policy_configuration: target_tracking_scaling_policy_configuration.merge(predefined_metric_specification: {predefined_metric_type: predefined_metric_type}),
+ }
end
class LocalSecondaryIndex
attr_accessor :result