def get_gpubsub_publisher(config, metrics, changes_channel, **kw):
    """Get a GPubsubPublisher client.

    A factory function that validates configuration, creates an auth
    and pubsub API client, and returns a Google Pub/Sub Publisher
    provider.

    Args:
        config (dict): Google Cloud Pub/Sub-related configuration.
        metrics (obj): :interface:`IMetricRelay` implementation.
        changes_channel (asyncio.Queue): Queue to publish message to
            make corrections to Cloud DNS.
        kw (dict): Additional keyword arguments to pass to the
            Publisher.
    Returns:
        A :class:`GPubsubPublisher` instance.
    """
    builder = gpubsub_publisher.GPubsubPublisherBuilder(
        config, metrics, changes_channel, **kw)
    return builder.build_publisher()