def describe_elasticsearch_instance_type_limits(DomainName=None,
    InstanceType=None, ElasticsearchVersion=None):
    """
    Describe Elasticsearch Limits for a given InstanceType and ElasticsearchVersion. When modifying existing Domain, specify the ``  DomainName `` to know what Limits are supported for modifying.
    See also: AWS API Documentation
    
    
    :example: response = client.describe_elasticsearch_instance_type_limits(
        DomainName='string',
        InstanceType='m3.medium.elasticsearch'|'m3.large.elasticsearch'|'m3.xlarge.elasticsearch'|'m3.2xlarge.elasticsearch'|'m4.large.elasticsearch'|'m4.xlarge.elasticsearch'|'m4.2xlarge.elasticsearch'|'m4.4xlarge.elasticsearch'|'m4.10xlarge.elasticsearch'|'t2.micro.elasticsearch'|'t2.small.elasticsearch'|'t2.medium.elasticsearch'|'r3.large.elasticsearch'|'r3.xlarge.elasticsearch'|'r3.2xlarge.elasticsearch'|'r3.4xlarge.elasticsearch'|'r3.8xlarge.elasticsearch'|'i2.xlarge.elasticsearch'|'i2.2xlarge.elasticsearch'|'d2.xlarge.elasticsearch'|'d2.2xlarge.elasticsearch'|'d2.4xlarge.elasticsearch'|'d2.8xlarge.elasticsearch'|'c4.large.elasticsearch'|'c4.xlarge.elasticsearch'|'c4.2xlarge.elasticsearch'|'c4.4xlarge.elasticsearch'|'c4.8xlarge.elasticsearch'|'r4.large.elasticsearch'|'r4.xlarge.elasticsearch'|'r4.2xlarge.elasticsearch'|'r4.4xlarge.elasticsearch'|'r4.8xlarge.elasticsearch'|'r4.16xlarge.elasticsearch',
        ElasticsearchVersion='string'
    )
    
    
    :type DomainName: string
    :param DomainName: DomainName represents the name of the Domain that we are trying to modify. This should be present only if we are querying for Elasticsearch `` Limits `` for existing domain.

    :type InstanceType: string
    :param InstanceType: [REQUIRED]
            The instance type for an Elasticsearch cluster for which Elasticsearch `` Limits `` are needed.
            

    :type ElasticsearchVersion: string
    :param ElasticsearchVersion: [REQUIRED]
            Version of Elasticsearch for which `` Limits `` are needed.
            

    :rtype: dict
    :return: {
        'LimitsByRole': {
            'string': {
                'StorageTypes': [
                    {
                        'StorageTypeName': 'string',
                        'StorageSubTypeName': 'string',
                        'StorageTypeLimits': [
                            {
                                'LimitName': 'string',
                                'LimitValues': [
                                    'string',
                                ]
                            },
                        ]
                    },
                ],
                'InstanceLimits': {
                    'InstanceCountLimits': {
                        'MinimumInstanceCount': 123,
                        'MaximumInstanceCount': 123
                    }
                },
                'AdditionalLimits': [
                    {
                        'LimitName': 'string',
                        'LimitValues': [
                            'string',
                        ]
                    },
                ]
            }
        }
    }
    
    
    :returns: 
    Data: If the given InstanceType is used as Data node
    Master: If the given InstanceType is used as Master node
    
    """
    pass
