123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- // Copyright 2021 Google LLC
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- syntax = "proto3";
- package google.bigtable.admin.v2;
- import "google/api/field_behavior.proto";
- import "google/api/resource.proto";
- import "google/bigtable/admin/v2/common.proto";
- option csharp_namespace = "Google.Cloud.Bigtable.Admin.V2";
- option go_package = "google.golang.org/genproto/googleapis/bigtable/admin/v2;admin";
- option java_multiple_files = true;
- option java_outer_classname = "InstanceProto";
- option java_package = "com.google.bigtable.admin.v2";
- option php_namespace = "Google\\Cloud\\Bigtable\\Admin\\V2";
- option ruby_package = "Google::Cloud::Bigtable::Admin::V2";
- option (google.api.resource_definition) = {
- type: "cloudkms.googleapis.com/CryptoKey"
- pattern: "projects/{project}/locations/{location}/keyRings/{key_ring}/cryptoKeys/{crypto_key}"
- };
- // A collection of Bigtable [Tables][google.bigtable.admin.v2.Table] and
- // the resources that serve them.
- // All tables in an instance are served from all
- // [Clusters][google.bigtable.admin.v2.Cluster] in the instance.
- message Instance {
- option (google.api.resource) = {
- type: "bigtable.googleapis.com/Instance"
- pattern: "projects/{project}/instances/{instance}"
- };
- // Possible states of an instance.
- enum State {
- // The state of the instance could not be determined.
- STATE_NOT_KNOWN = 0;
- // The instance has been successfully created and can serve requests
- // to its tables.
- READY = 1;
- // The instance is currently being created, and may be destroyed
- // if the creation process encounters an error.
- CREATING = 2;
- }
- // The type of the instance.
- enum Type {
- // The type of the instance is unspecified. If set when creating an
- // instance, a `PRODUCTION` instance will be created. If set when updating
- // an instance, the type will be left unchanged.
- TYPE_UNSPECIFIED = 0;
- // An instance meant for production use. `serve_nodes` must be set
- // on the cluster.
- PRODUCTION = 1;
- // The instance is meant for development and testing purposes only; it has
- // no performance or uptime guarantees and is not covered by SLA.
- // After a development instance is created, it can be upgraded by
- // updating the instance to type `PRODUCTION`. An instance created
- // as a production instance cannot be changed to a development instance.
- // When creating a development instance, `serve_nodes` on the cluster must
- // not be set.
- DEVELOPMENT = 2;
- }
- // The unique name of the instance. Values are of the form
- // `projects/{project}/instances/[a-z][a-z0-9\\-]+[a-z0-9]`.
- string name = 1 [(google.api.field_behavior) = OUTPUT_ONLY];
- // Required. The descriptive name for this instance as it appears in UIs.
- // Can be changed at any time, but should be kept globally unique
- // to avoid confusion.
- string display_name = 2 [(google.api.field_behavior) = REQUIRED];
- // (`OutputOnly`)
- // The current state of the instance.
- State state = 3;
- // The type of the instance. Defaults to `PRODUCTION`.
- Type type = 4;
- // Labels are a flexible and lightweight mechanism for organizing cloud
- // resources into groups that reflect a customer's organizational needs and
- // deployment strategies. They can be used to filter resources and aggregate
- // metrics.
- //
- // * Label keys must be between 1 and 63 characters long and must conform to
- // the regular expression: `[\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62}`.
- // * Label values must be between 0 and 63 characters long and must conform to
- // the regular expression: `[\p{Ll}\p{Lo}\p{N}_-]{0,63}`.
- // * No more than 64 labels can be associated with a given resource.
- // * Keys and values must both be under 128 bytes.
- map<string, string> labels = 5;
- }
- // A resizable group of nodes in a particular cloud location, capable
- // of serving all [Tables][google.bigtable.admin.v2.Table] in the parent
- // [Instance][google.bigtable.admin.v2.Instance].
- message Cluster {
- option (google.api.resource) = {
- type: "bigtable.googleapis.com/Cluster"
- pattern: "projects/{project}/instances/{instance}/clusters/{cluster}"
- };
- // Cloud Key Management Service (Cloud KMS) settings for a CMEK-protected
- // cluster.
- message EncryptionConfig {
- // Describes the Cloud KMS encryption key that will be used to protect the
- // destination Bigtable cluster. The requirements for this key are:
- // 1) The Cloud Bigtable service account associated with the project that
- // contains this cluster must be granted the
- // `cloudkms.cryptoKeyEncrypterDecrypter` role on the CMEK key.
- // 2) Only regional keys can be used and the region of the CMEK key must
- // match the region of the cluster.
- // 3) All clusters within an instance must use the same CMEK key.
- string kms_key_name = 1 [(google.api.resource_reference) = {
- type: "cloudkms.googleapis.com/CryptoKey"
- }];
- }
- // Possible states of a cluster.
- enum State {
- // The state of the cluster could not be determined.
- STATE_NOT_KNOWN = 0;
- // The cluster has been successfully created and is ready to serve requests.
- READY = 1;
- // The cluster is currently being created, and may be destroyed
- // if the creation process encounters an error.
- // A cluster may not be able to serve requests while being created.
- CREATING = 2;
- // The cluster is currently being resized, and may revert to its previous
- // node count if the process encounters an error.
- // A cluster is still capable of serving requests while being resized,
- // but may exhibit performance as if its number of allocated nodes is
- // between the starting and requested states.
- RESIZING = 3;
- // The cluster has no backing nodes. The data (tables) still
- // exist, but no operations can be performed on the cluster.
- DISABLED = 4;
- }
- // The unique name of the cluster. Values are of the form
- // `projects/{project}/instances/{instance}/clusters/[a-z][-a-z0-9]*`.
- string name = 1 [(google.api.field_behavior) = OUTPUT_ONLY];
- // (`CreationOnly`)
- // The location where this cluster's nodes and storage reside. For best
- // performance, clients should be located as close as possible to this
- // cluster. Currently only zones are supported, so values should be of the
- // form `projects/{project}/locations/{zone}`.
- string location = 2 [(google.api.resource_reference) = {
- type: "locations.googleapis.com/Location"
- }];
- // The current state of the cluster.
- State state = 3 [(google.api.field_behavior) = OUTPUT_ONLY];
- // Required. The number of nodes allocated to this cluster. More nodes enable
- // higher throughput and more consistent performance.
- int32 serve_nodes = 4 [(google.api.field_behavior) = REQUIRED];
- // (`CreationOnly`)
- // The type of storage used by this cluster to serve its
- // parent instance's tables, unless explicitly overridden.
- StorageType default_storage_type = 5;
- // Immutable. The encryption configuration for CMEK-protected clusters.
- EncryptionConfig encryption_config = 6
- [(google.api.field_behavior) = IMMUTABLE];
- }
- // A configuration object describing how Cloud Bigtable should treat traffic
- // from a particular end user application.
- message AppProfile {
- option (google.api.resource) = {
- type: "bigtable.googleapis.com/AppProfile"
- pattern: "projects/{project}/instances/{instance}/appProfiles/{app_profile}"
- };
- // Read/write requests are routed to the nearest cluster in the instance, and
- // will fail over to the nearest cluster that is available in the event of
- // transient errors or delays. Clusters in a region are considered
- // equidistant. Choosing this option sacrifices read-your-writes consistency
- // to improve availability.
- message MultiClusterRoutingUseAny {}
- // Unconditionally routes all read/write requests to a specific cluster.
- // This option preserves read-your-writes consistency but does not improve
- // availability.
- message SingleClusterRouting {
- // The cluster to which read/write requests should be routed.
- string cluster_id = 1;
- // Whether or not `CheckAndMutateRow` and `ReadModifyWriteRow` requests are
- // allowed by this app profile. It is unsafe to send these requests to
- // the same table/row/column in multiple clusters.
- bool allow_transactional_writes = 2;
- }
- // (`OutputOnly`)
- // The unique name of the app profile. Values are of the form
- // `projects/{project}/instances/{instance}/appProfiles/[_a-zA-Z0-9][-_.a-zA-Z0-9]*`.
- string name = 1;
- // Strongly validated etag for optimistic concurrency control. Preserve the
- // value returned from `GetAppProfile` when calling `UpdateAppProfile` to
- // fail the request if there has been a modification in the mean time. The
- // `update_mask` of the request need not include `etag` for this protection
- // to apply.
- // See [Wikipedia](https://en.wikipedia.org/wiki/HTTP_ETag) and
- // [RFC 7232](https://tools.ietf.org/html/rfc7232#section-2.3) for more
- // details.
- string etag = 2;
- // Optional long form description of the use case for this AppProfile.
- string description = 3;
- // The routing policy for all read/write requests that use this app profile.
- // A value must be explicitly set.
- oneof routing_policy {
- // Use a multi-cluster routing policy.
- MultiClusterRoutingUseAny multi_cluster_routing_use_any = 5;
- // Use a single-cluster routing policy.
- SingleClusterRouting single_cluster_routing = 6;
- }
- }
|