code: def get_resource_id(prefix, *data):
      
      parts = flatten(data)
      for part in parts:
          if type(part) not in (str, int, float):
              raise ValueError('Supported data types: int, float, list, tuple, str. Got: {}'.format(type(part)))
  
      return '{}-{}'.format(
          prefix,
          get_hash('-'.join(sorted(map(str, parts))))[-16:]
      )
docs: Returns a unique ID based on the SHA256 hash of the provided data. The input data is flattened and sorted to
      ensure identical hashes are generated regardless of the order of the input. Values must be of types `str`, `int` or
      `float`, any other input type will raise a `ValueError`
  
      >>> get_resource_id('ec2', 'lots', 'of', 'data')
      'ec2-1d21940125214123'
      >>> get_resource_id('ecs', 'foo', ['more', 'data', 'here', 2, 3])
      'ecs-e536b036ea6fd463'
      >>> get_resource_id('ecs', ['more'], 'data', 'here', [[2], 3], 'foo')
      'ecs-e536b036ea6fd463'
  
      Args:
          prefix (`str`): Key prefix
          *data (`str`, `int`, `float`, `list`, `tuple`): Data used to generate a unique ID
  
      Returns:
          `str`