---
# ----------------------------------------------------------------------------
#
#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***
#
# ----------------------------------------------------------------------------
#
#     This file is automatically generated by Magic Modules and manual
#     changes will be clobbered when the file is regenerated.
#
#     Please read more about how to change this file in
#     .github/CONTRIBUTING.md.
#
# ----------------------------------------------------------------------------
subcategory: "Vertex AI"
description: |-
  Models are deployed into it, and afterwards Endpoint is called to obtain predictions and explanations.
---

# google\_vertex\_ai\_endpoint

Models are deployed into it, and afterwards Endpoint is called to obtain predictions and explanations.


To get more information about Endpoint, see:

* [API documentation](https://cloud.google.com/vertex-ai/docs/reference/rest/v1beta1/projects.locations.endpoints)
* How-to Guides
    * [Official Documentation](https://cloud.google.com/vertex-ai/docs)

## Example Usage - Vertex Ai Endpoint Network


```hcl
resource "google_vertex_ai_endpoint" "endpoint" {
  name         = "endpoint-name"
  display_name = "sample-endpoint"
  description  = "A sample vertex endpoint"
  location     = "us-central1"
  region       = "us-central1"
  labels       = {
    label-one = "value-one"
  }
  network      = "projects/${data.google_project.project.number}/global/networks/${google_compute_network.vertex_network.name}"
  encryption_spec {
    kms_key_name = "kms-name"
  }
  depends_on   = [
    google_service_networking_connection.vertex_vpc_connection
  ]
}

resource "google_service_networking_connection" "vertex_vpc_connection" {
  network                 = google_compute_network.vertex_network.id
  service                 = "servicenetworking.googleapis.com"
  reserved_peering_ranges = [google_compute_global_address.vertex_range.name]
}

resource "google_compute_global_address" "vertex_range" {
  name          = "address-name"
  purpose       = "VPC_PEERING"
  address_type  = "INTERNAL"
  prefix_length = 24
  network       = google_compute_network.vertex_network.id
}

resource "google_compute_network" "vertex_network" {
  name       = "network-name"
}

resource "google_kms_crypto_key_iam_member" "crypto_key" {
  crypto_key_id = "kms-name"
  role          = "roles/cloudkms.cryptoKeyEncrypterDecrypter"
  member        = "serviceAccount:service-${data.google_project.project.number}@gcp-sa-aiplatform.iam.gserviceaccount.com"
}

data "google_project" "project" {}
```

## Argument Reference

The following arguments are supported:


* `name` -
  (Required)
  The resource name of the Endpoint. The name must be numeric with no leading zeros and can be at most 10 digits.

* `display_name` -
  (Required)
  Required. The display name of the Endpoint. The name can be up to 128 characters long and can consist of any UTF-8 characters.

* `location` -
  (Required)
  The location for the resource


- - -


* `description` -
  (Optional)
  The description of the Endpoint.

* `labels` -
  (Optional)
  The labels with user-defined metadata to organize your Endpoints. Label keys and values can be no longer than 64 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. See https://goo.gl/xmQnxf for more information and examples of labels.
  **Note**: This field is non-authoritative, and will only manage the labels present in your configuration.
  Please refer to the field `effective_labels` for all of the labels present on the resource.

* `encryption_spec` -
  (Optional)
  Customer-managed encryption key spec for an Endpoint. If set, this Endpoint and all sub-resources of this Endpoint will be secured by this key.
  Structure is [documented below](#nested_encryption_spec).

* `network` -
  (Optional)
  The full name of the Google Compute Engine [network](https://cloud.google.com//compute/docs/networks-and-firewalls#networks) to which the Endpoint should be peered. Private services access must already be configured for the network. If left unspecified, the Endpoint is not peered with any network. Only one of the fields, network or enable_private_service_connect, can be set. [Format](https://cloud.google.com/compute/docs/reference/rest/v1/networks/insert): `projects/{project}/global/networks/{network}`. Where `{project}` is a project number, as in `12345`, and `{network}` is network name.

* `region` -
  (Optional)
  The region for the resource

* `project` - (Optional) The ID of the project in which the resource belongs.
    If it is not provided, the provider project is used.


<a name="nested_encryption_spec"></a>The `encryption_spec` block supports:

* `kms_key_name` -
  (Required)
  Required. The Cloud KMS resource identifier of the customer managed encryption key used to protect a resource. Has the form: `projects/my-project/locations/my-region/keyRings/my-kr/cryptoKeys/my-key`. The key needs to be in the same region as where the compute resource is created.

## Attributes Reference

In addition to the arguments listed above, the following computed attributes are exported:

* `id` - an identifier for the resource with format `projects/{{project}}/locations/{{location}}/endpoints/{{name}}`

* `deployed_models` -
  Output only. The models deployed in this Endpoint. To add or remove DeployedModels use EndpointService.DeployModel and EndpointService.UndeployModel respectively. Models can also be deployed and undeployed using the [Cloud Console](https://console.cloud.google.com/vertex-ai/).
  Structure is [documented below](#nested_deployed_models).

* `etag` -
  Used to perform consistent read-modify-write updates. If not set, a blind "overwrite" update happens.

* `create_time` -
  Output only. Timestamp when this Endpoint was created.

* `update_time` -
  Output only. Timestamp when this Endpoint was last updated.

* `model_deployment_monitoring_job` -
  Output only. Resource name of the Model Monitoring job associated with this Endpoint if monitoring is enabled by CreateModelDeploymentMonitoringJob. Format: `projects/{project}/locations/{location}/modelDeploymentMonitoringJobs/{model_deployment_monitoring_job}`

* `terraform_labels` -
  The combination of labels configured directly on the resource
   and default labels configured on the provider.

* `effective_labels` -
  All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Terraform, other clients and services.


<a name="nested_deployed_models"></a>The `deployed_models` block contains:

* `dedicated_resources` -
  (Output)
  A description of resources that are dedicated to the DeployedModel, and that need a higher degree of manual configuration.
  Structure is [documented below](#nested_dedicated_resources).

* `automatic_resources` -
  (Output)
  A description of resources that to large degree are decided by Vertex AI, and require only a modest additional configuration.
  Structure is [documented below](#nested_automatic_resources).

* `id` -
  (Output)
  The ID of the DeployedModel. If not provided upon deployment, Vertex AI will generate a value for this ID. This value should be 1-10 characters, and valid characters are /[0-9]/.

* `model` -
  (Output)
  The name of the Model that this is the deployment of. Note that the Model may be in a different location than the DeployedModel's Endpoint.

* `model_version_id` -
  (Output)
  Output only. The version ID of the model that is deployed.

* `display_name` -
  (Output)
  The display name of the DeployedModel. If not provided upon creation, the Model's display_name is used.

* `create_time` -
  (Output)
  Output only. Timestamp when the DeployedModel was created.

* `service_account` -
  (Output)
  The service account that the DeployedModel's container runs as. Specify the email address of the service account. If this service account is not specified, the container runs as a service account that doesn't have access to the resource project. Users deploying the Model must have the `iam.serviceAccounts.actAs` permission on this service account.

* `enable_access_logging` -
  (Output)
  These logs are like standard server access logs, containing information like timestamp and latency for each prediction request. Note that Stackdriver logs may incur a cost, especially if your project receives prediction requests at a high queries per second rate (QPS). Estimate your costs before enabling this option.

* `private_endpoints` -
  (Output)
  Output only. Provide paths for users to send predict/explain/health requests directly to the deployed model services running on Cloud via private services access. This field is populated if network is configured.
  Structure is [documented below](#nested_private_endpoints).

* `shared_resources` -
  (Output)
  The resource name of the shared DeploymentResourcePool to deploy on. Format: projects/{project}/locations/{location}/deploymentResourcePools/{deployment_resource_pool}

* `enable_container_logging` -
  (Output)
  If true, the container of the DeployedModel instances will send `stderr` and `stdout` streams to Stackdriver Logging. Only supported for custom-trained Models and AutoML Tabular Models.


<a name="nested_dedicated_resources"></a>The `dedicated_resources` block contains:

* `machine_spec` -
  (Output)
  The specification of a single machine used by the prediction.
  Structure is [documented below](#nested_machine_spec).

* `min_replica_count` -
  (Output)
  The minimum number of machine replicas this DeployedModel will be always deployed on. This value must be greater than or equal to 1. If traffic against the DeployedModel increases, it may dynamically be deployed onto more replicas, and as traffic decreases, some of these extra replicas may be freed.

* `max_replica_count` -
  (Output)
  The maximum number of replicas this DeployedModel may be deployed on when the traffic against it increases. If the requested value is too large, the deployment will error, but if deployment succeeds then the ability to scale the model to that many replicas is guaranteed (barring service outages). If traffic against the DeployedModel increases beyond what its replicas at maximum may handle, a portion of the traffic will be dropped. If this value is not provided, will use min_replica_count as the default value. The value of this field impacts the charge against Vertex CPU and GPU quotas. Specifically, you will be charged for max_replica_count * number of cores in the selected machine type) and (max_replica_count * number of GPUs per replica in the selected machine type).

* `autoscaling_metric_specs` -
  (Output)
  The metric specifications that overrides a resource utilization metric (CPU utilization, accelerator's duty cycle, and so on) target value (default to 60 if not set). At most one entry is allowed per metric. If machine_spec.accelerator_count is above 0, the autoscaling will be based on both CPU utilization and accelerator's duty cycle metrics and scale up when either metrics exceeds its target value while scale down if both metrics are under their target value. The default target value is 60 for both metrics. If machine_spec.accelerator_count is 0, the autoscaling will be based on CPU utilization metric only with default target value 60 if not explicitly set. For example, in the case of Online Prediction, if you want to override target CPU utilization to 80, you should set autoscaling_metric_specs.metric_name to `aiplatform.googleapis.com/prediction/online/cpu/utilization` and autoscaling_metric_specs.target to `80`.
  Structure is [documented below](#nested_autoscaling_metric_specs).


<a name="nested_machine_spec"></a>The `machine_spec` block contains:

* `machine_type` -
  (Output)
  The type of the machine. See the [list of machine types supported for prediction](https://cloud.google.com/vertex-ai/docs/predictions/configure-compute#machine-types) See the [list of machine types supported for custom training](https://cloud.google.com/vertex-ai/docs/training/configure-compute#machine-types). For DeployedModel this field is optional, and the default value is `n1-standard-2`. For BatchPredictionJob or as part of WorkerPoolSpec this field is required. TODO(rsurowka): Try to better unify the required vs optional.

* `accelerator_type` -
  (Output)
  The type of accelerator(s) that may be attached to the machine as per accelerator_count. See possible values [here](https://cloud.google.com/vertex-ai/docs/reference/rest/v1/MachineSpec#AcceleratorType).

* `accelerator_count` -
  (Output)
  The number of accelerators to attach to the machine.

<a name="nested_autoscaling_metric_specs"></a>The `autoscaling_metric_specs` block contains:

* `metric_name` -
  (Output)
  The resource metric name. Supported metrics: * For Online Prediction: * `aiplatform.googleapis.com/prediction/online/accelerator/duty_cycle` * `aiplatform.googleapis.com/prediction/online/cpu/utilization`

* `target` -
  (Output)
  The target resource utilization in percentage (1% - 100%) for the given metric; once the real usage deviates from the target by a certain percentage, the machine replicas change. The default value is 60 (representing 60%) if not provided.

<a name="nested_automatic_resources"></a>The `automatic_resources` block contains:

* `min_replica_count` -
  (Output)
  The minimum number of replicas this DeployedModel will be always deployed on. If traffic against it increases, it may dynamically be deployed onto more replicas up to max_replica_count, and as traffic decreases, some of these extra replicas may be freed. If the requested value is too large, the deployment will error.

* `max_replica_count` -
  (Output)
  The maximum number of replicas this DeployedModel may be deployed on when the traffic against it increases. If the requested value is too large, the deployment will error, but if deployment succeeds then the ability to scale the model to that many replicas is guaranteed (barring service outages). If traffic against the DeployedModel increases beyond what its replicas at maximum may handle, a portion of the traffic will be dropped. If this value is not provided, a no upper bound for scaling under heavy traffic will be assume, though Vertex AI may be unable to scale beyond certain replica number.

<a name="nested_private_endpoints"></a>The `private_endpoints` block contains:

* `predict_http_uri` -
  (Output)
  Output only. Http(s) path to send prediction requests.

* `explain_http_uri` -
  (Output)
  Output only. Http(s) path to send explain requests.

* `health_http_uri` -
  (Output)
  Output only. Http(s) path to send health check requests.

* `service_attachment` -
  (Output)
  Output only. The name of the service attachment resource. Populated if private service connect is enabled.

## Timeouts

This resource provides the following
[Timeouts](https://developer.hashicorp.com/terraform/plugin/sdkv2/resources/retries-and-customizable-timeouts) configuration options:

- `create` - Default is 20 minutes.
- `update` - Default is 20 minutes.
- `delete` - Default is 20 minutes.

## Import


Endpoint can be imported using any of these accepted formats:

* `projects/{{project}}/locations/{{location}}/endpoints/{{name}}`
* `{{project}}/{{location}}/{{name}}`
* `{{location}}/{{name}}`


In Terraform v1.5.0 and later, use an [`import` block](https://developer.hashicorp.com/terraform/language/import) to import Endpoint using one of the formats above. For example:

```tf
import {
  id = "projects/{{project}}/locations/{{location}}/endpoints/{{name}}"
  to = google_vertex_ai_endpoint.default
}
```

When using the [`terraform import` command](https://developer.hashicorp.com/terraform/cli/commands/import), Endpoint can be imported using one of the formats above. For example:

```
$ terraform import google_vertex_ai_endpoint.default projects/{{project}}/locations/{{location}}/endpoints/{{name}}
$ terraform import google_vertex_ai_endpoint.default {{project}}/{{location}}/{{name}}
$ terraform import google_vertex_ai_endpoint.default {{location}}/{{name}}
```

## User Project Overrides

This resource supports [User Project Overrides](https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/provider_reference#user_project_override).
