in syndicate/core/transform/terraform/converter/tf_dynamo_db_converter.py [0:0]
def convert(self, name, resource):
validate_params(name, resource, DYNAMODB_TABLE_REQUIRED_PARAMS)
hash_key_name = resource.get('hash_key_name')
hash_key_type = resource.get('hash_key_type')
sort_key_name = resource.get('sort_key_name')
sort_key_type = resource.get('sort_key_type')
read_capacity = resource.get('read_capacity', 1)
write_capacity = resource.get('write_capacity', 1)
stream_view_type = resource.get('stream_view_type')
global_indexes = resource.get('global_indexes', [])
local_indexes = resource.get('local_indexes', [])
attributes = self._extract_attributes(global_indexes=global_indexes,
local_indexes=local_indexes,
hash_key_type=hash_key_type,
hash_key=hash_key_name,
sort_key_name=sort_key_name,
sort_key_type=sort_key_type)
dynamo_db_template = generate_tf_template_for_dynamo_table(
hash_key=hash_key_name,
range_key=sort_key_name,
read_capacity=read_capacity,
write_capacity=write_capacity,
table_name=name,
stream_view_type=stream_view_type,
attributes=attributes,
global_indexes=global_indexes,
local_indexes=local_indexes)
self.template.add_aws_dynamodb_table(meta=dynamo_db_template)
autoscaling = resource.get('autoscaling', [])
for aut in autoscaling:
validate_params(name, aut, AUTOSCALING_REQUIRED_PARAMS)
max_capacity = str(aut.get('max_capacity'))
min_capacity = str(aut.get('min_capacity'))
dimension = aut.get('dimension')
resource_name = aut.get('resource_name')
role_name = aut.get('role_name')
tf_target_resource_name = build_terraform_resource_name(name,
'scalable_target')
resource_id = DynamoDBResource.build_res_id(dimension=dimension,
resource_name=resource_name,
table_name=name)
target = dynamodb_scalable_target(resource_id=resource_id,
scalable_dimension=dimension,
min_capacity=min_capacity,
max_capacity=max_capacity,
role_name=role_name,
tf_target_resource_name=tf_target_resource_name)
autoscaling_policy = aut.get('config')
if autoscaling_policy:
target_utilization = autoscaling_policy['target_utilization']
scale_in_cooldown = autoscaling_policy.get('scale_in_cooldown')
scale_out_cooldown = autoscaling_policy.get(
'scale_out_cooldown')
metric_type = 'DynamoDBWriteCapacityUtilization' \
if 'Write' in dimension \
else 'DynamoDBReadCapacityUtilization'
tf_resource_name = build_terraform_resource_name(
'dynamodb-test-table_read_policy', resource_name)
target_policy = dynamo_db_autoscaling_target_policy(
target_name=tf_target_resource_name,
target_value=target_utilization,
predefined_metric_type=metric_type,
scale_in_cooldown=scale_in_cooldown,
scale_out_cooldown=scale_out_cooldown,
tf_resource_name=tf_resource_name)
self.template.add_aws_appautoscaling_target(meta=target)
self.template.add_aws_appautoscaling_policy(meta=target_policy)