Class CreateInstanceRequest


  • public final class CreateInstanceRequest
    extends Object
    Parameters for creating a new Bigtable Instance.

    A Cloud Bigtable instance is mostly just a container for your clusters and nodes, which do all of the real work. Instances come in 2 flavors:

    Production
    A standard instance with either 1 or 2 clusters, as well as 3 or more nodes in each cluster. You cannot downgrade a production instance to a development instance.
    Development
    A low-cost instance for development and testing, with performance limited to the equivalent of a 1-node cluster. Development instances only support a single 1 node cluster. At any point this can be upgraded to a production instance.
    When creating an Instance, you must create at least one cluster in it.

    Examples:

    
     // Small production instance:
     CreateInstanceRequest smallProdInstanceRequest = CreateInstanceRequest.of("my-small-instance")
       .addCluster("cluster1", "us-east1-c", 3, StorageType.SSD);
    
     // Development instance:
     CreateInstanceRequest smallProdInstanceRequest = CreateInstanceRequest.of("my-dev-instance")
       .setType(Type.DEVELOPMENT)
       .addDevelopmentCluster("cluster1", "us-east1-c", StorageType.SSD);
    
     
    See Also:
    For more details
    • Method Detail

      • setDisplayName

        public CreateInstanceRequest setDisplayName​(@Nonnull
                                                    String displayName)
        Sets the friendly display name of the instance. If left unspecified, it will default to the id
      • setType

        public CreateInstanceRequest setType​(@Nonnull
                                             Instance.Type type)
        Sets the type of instance.

        Can be either DEVELOPMENT or PRODUCTION. Defaults to PRODUCTION. Please see class javadoc for details.

      • addCluster

        public CreateInstanceRequest addCluster​(@Nonnull
                                                String clusterId,
                                                @Nonnull
                                                String zone,
                                                int serveNodes,
                                                @Nonnull
                                                StorageType storageType)
        Adds a cluster to the instance request with manual scaling enabled.

        All new instances must have at least one cluster. DEVELOPMENT instances must have exactly one cluster.

        Parameters:
        clusterId - the name of the cluster.
        zone - the zone where the cluster will be created.
        serveNodes - the number of nodes that cluster will contain. DEVELOPMENT instance clusters must have exactly one node.
        storageType - the type of storage used by this cluster to serve its parent instance's tables.
      • addCluster

        public CreateInstanceRequest addCluster​(@Nonnull
                                                String clusterId,
                                                @Nonnull
                                                String zone,
                                                @Nonnull
                                                ClusterAutoscalingConfig clusterAutoscalingConfig,
                                                @Nonnull
                                                StorageType storageType)
        Adds a cluster to the instance request with autoscaling enabled.

        All new instances must have at least one cluster. DEVELOPMENT instances must have exactly one cluster.

        Parameters:
        clusterId - the name of the cluster.
        zone - the zone where the cluster will be created.
        clusterAutoscalingConfig - the autoscaling config that sets the min serve nodes, max serve nodes, and CPU utilization percentage
        storageType - the type of storage used by this cluster to serve its parent instance's tables.
      • addCmekCluster

        public CreateInstanceRequest addCmekCluster​(@Nonnull
                                                    String clusterId,
                                                    @Nonnull
                                                    String zone,
                                                    int serveNodes,
                                                    @Nonnull
                                                    StorageType storageType,
                                                    @Nonnull
                                                    String kmsKeyName)
        Adds a CMEK protected cluster using the specified KMS key name.
        Parameters:
        clusterId - the name of the cluster.
        zone - the zone where the cluster will be created.
        serveNodes - the number of nodes that cluster will contain. DEVELOPMENT instance clusters must have exactly one node.
        storageType - the type of storage used by this cluster to serve its parent instance's tables.
        kmsKeyName - the full name of the KMS key name to use in the format `projects/{key_project_id}/locations/{location}/keyRings/{ring_name}/cryptoKeys/{key_name}`
      • addDevelopmentCluster

        public CreateInstanceRequest addDevelopmentCluster​(@Nonnull
                                                           String clusterId,
                                                           @Nonnull
                                                           String zone,
                                                           @Nonnull
                                                           StorageType storageType)
        Adds a DEVELOPMENT cluster to the instance request.

        This instance will have exactly one node cluster.

        Parameters:
        clusterId - the name of the cluster.
        zone - the zone where the cluster will be created.
        storageType - the type of storage used by this cluster to serve its parent instance's tables.
      • toProto

        @InternalApi
        public CreateInstanceRequest toProto​(String projectId)
        Creates the request protobuf. This method is considered an internal implementation detail and not meant to be used by applications.