def describe_instances(StackId=None, LayerId=None, InstanceIds=None):
    """
    Requests a description of a set of instances.
    See also: AWS API Documentation
    
    
    :example: response = client.describe_instances(
        StackId='string',
        LayerId='string',
        InstanceIds=[
            'string',
        ]
    )
    
    
    :type StackId: string
    :param StackId: A stack ID. If you use this parameter, DescribeInstances returns descriptions of the instances associated with the specified stack.

    :type LayerId: string
    :param LayerId: A layer ID. If you use this parameter, DescribeInstances returns descriptions of the instances associated with the specified layer.

    :type InstanceIds: list
    :param InstanceIds: An array of instance IDs to be described. If you use this parameter, DescribeInstances returns a description of the specified instances. Otherwise, it returns a description of every instance.
            (string) --
            

    :rtype: dict
    :return: {
        'Instances': [
            {
                'AgentVersion': 'string',
                'AmiId': 'string',
                'Architecture': 'x86_64'|'i386',
                'AutoScalingType': 'load'|'timer',
                'AvailabilityZone': 'string',
                'BlockDeviceMappings': [
                    {
                        'DeviceName': 'string',
                        'NoDevice': 'string',
                        'VirtualName': 'string',
                        'Ebs': {
                            'SnapshotId': 'string',
                            'Iops': 123,
                            'VolumeSize': 123,
                            'VolumeType': 'gp2'|'io1'|'standard',
                            'DeleteOnTermination': True|False
                        }
                    },
                ],
                'CreatedAt': 'string',
                'EbsOptimized': True|False,
                'Ec2InstanceId': 'string',
                'EcsClusterArn': 'string',
                'EcsContainerInstanceArn': 'string',
                'ElasticIp': 'string',
                'Hostname': 'string',
                'InfrastructureClass': 'string',
                'InstallUpdatesOnBoot': True|False,
                'InstanceId': 'string',
                'InstanceProfileArn': 'string',
                'InstanceType': 'string',
                'LastServiceErrorId': 'string',
                'LayerIds': [
                    'string',
                ],
                'Os': 'string',
                'Platform': 'string',
                'PrivateDns': 'string',
                'PrivateIp': 'string',
                'PublicDns': 'string',
                'PublicIp': 'string',
                'RegisteredBy': 'string',
                'ReportedAgentVersion': 'string',
                'ReportedOs': {
                    'Family': 'string',
                    'Name': 'string',
                    'Version': 'string'
                },
                'RootDeviceType': 'ebs'|'instance-store',
                'RootDeviceVolumeId': 'string',
                'SecurityGroupIds': [
                    'string',
                ],
                'SshHostDsaKeyFingerprint': 'string',
                'SshHostRsaKeyFingerprint': 'string',
                'SshKeyName': 'string',
                'StackId': 'string',
                'Status': 'string',
                'SubnetId': 'string',
                'Tenancy': 'string',
                'VirtualizationType': 'paravirtual'|'hvm'
            },
        ]
    }
    
    
    :returns: 
    (string) --
    
    """
    pass
