code: public synchronized BigtableClusterName getClusterName() throws IOException {
      if (this.clusterName == null) {
        try (BigtableClusterUtilities util = new BigtableClusterUtilities(options)) {
          ListClustersResponse clusters = util.getClusters();
          Preconditions.checkState(clusters.getClustersCount() == 1,
            String.format(
              "Project '%s' / Instance '%s' has %d clusters. There must be exactly 1 for this operation to work.",
              options.getProjectId(), options.getInstanceId(), clusters.getClustersCount()));
          clusterName = new BigtableClusterName(clusters.getClusters(0).getName());
        } catch (GeneralSecurityException e) {
          throw new IOException("Could not get cluster Id.", e);
        }
      }
      return clusterName;
    }
docs: Snapshot operations need various aspects of a {@link BigtableClusterName}. This method gets a
  clusterId from either a lookup (projectId and instanceId translate to a single clusterId when
  an instance has only one cluster).