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