| --- |
| # ---------------------------------------------------------------------------- |
| # |
| # *** 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: "Compute Engine" |
| description: |- |
| Represents an Autoscaler resource. |
| --- |
| |
| # google_compute_autoscaler |
| |
| Represents an Autoscaler resource. |
| |
| Autoscalers allow you to automatically scale virtual machine instances in |
| managed instance groups according to an autoscaling policy that you |
| define. |
| |
| |
| To get more information about Autoscaler, see: |
| |
| * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/autoscalers) |
| * How-to Guides |
| * [Autoscaling Groups of Instances](https://cloud.google.com/compute/docs/autoscaler/) |
| |
| <div class = "oics-button" style="float: right; margin: 0 0 -15px"> |
| <a href="https://console.cloud.google.com/cloudshell/open?cloudshell_git_repo=https%3A%2F%2Fgithub.com%2Fterraform-google-modules%2Fdocs-examples.git&cloudshell_image=gcr.io%2Fcloudshell-images%2Fcloudshell%3Alatest&cloudshell_print=.%2Fmotd&cloudshell_tutorial=.%2Ftutorial.md&cloudshell_working_dir=autoscaler_single_instance&open_in_editor=main.tf" target="_blank"> |
| <img alt="Open in Cloud Shell" src="//gstatic.com/cloudssh/images/open-btn.svg" style="max-height: 44px; margin: 32px auto; max-width: 100%;"> |
| </a> |
| </div> |
| ## Example Usage - Autoscaler Single Instance |
| |
| |
| ```hcl |
| resource "google_compute_autoscaler" "default" { |
| provider = google-beta |
| |
| name = "my-autoscaler" |
| zone = "us-central1-f" |
| target = google_compute_instance_group_manager.default.id |
| |
| autoscaling_policy { |
| max_replicas = 5 |
| min_replicas = 1 |
| cooldown_period = 60 |
| |
| metric { |
| name = "pubsub.googleapis.com/subscription/num_undelivered_messages" |
| filter = "resource.type = pubsub_subscription AND resource.label.subscription_id = our-subscription" |
| single_instance_assignment = 65535 |
| } |
| } |
| } |
| |
| resource "google_compute_instance_template" "default" { |
| provider = google-beta |
| |
| name = "my-instance-template" |
| machine_type = "e2-medium" |
| can_ip_forward = false |
| |
| tags = ["foo", "bar"] |
| |
| disk { |
| source_image = data.google_compute_image.debian_9.id |
| } |
| |
| network_interface { |
| network = "default" |
| } |
| |
| metadata = { |
| foo = "bar" |
| } |
| |
| service_account { |
| scopes = ["userinfo-email", "compute-ro", "storage-ro"] |
| } |
| } |
| |
| resource "google_compute_target_pool" "default" { |
| provider = google-beta |
| |
| name = "my-target-pool" |
| } |
| |
| resource "google_compute_instance_group_manager" "default" { |
| provider = google-beta |
| |
| name = "my-igm" |
| zone = "us-central1-f" |
| |
| version { |
| instance_template = google_compute_instance_template.default.id |
| name = "primary" |
| } |
| |
| target_pools = [google_compute_target_pool.default.id] |
| base_instance_name = "autoscaler-sample" |
| } |
| |
| data "google_compute_image" "debian_9" { |
| provider = google-beta |
| |
| family = "debian-11" |
| project = "debian-cloud" |
| } |
| |
| provider "google-beta" { |
| region = "us-central1" |
| zone = "us-central1-a" |
| |
| } |
| ``` |
| <div class = "oics-button" style="float: right; margin: 0 0 -15px"> |
| <a href="https://console.cloud.google.com/cloudshell/open?cloudshell_git_repo=https%3A%2F%2Fgithub.com%2Fterraform-google-modules%2Fdocs-examples.git&cloudshell_image=gcr.io%2Fcloudshell-images%2Fcloudshell%3Alatest&cloudshell_print=.%2Fmotd&cloudshell_tutorial=.%2Ftutorial.md&cloudshell_working_dir=autoscaler_basic&open_in_editor=main.tf" target="_blank"> |
| <img alt="Open in Cloud Shell" src="//gstatic.com/cloudssh/images/open-btn.svg" style="max-height: 44px; margin: 32px auto; max-width: 100%;"> |
| </a> |
| </div> |
| ## Example Usage - Autoscaler Basic |
| |
| |
| ```hcl |
| resource "google_compute_autoscaler" "foobar" { |
| name = "my-autoscaler" |
| zone = "us-central1-f" |
| target = google_compute_instance_group_manager.foobar.id |
| |
| autoscaling_policy { |
| max_replicas = 5 |
| min_replicas = 1 |
| cooldown_period = 60 |
| |
| cpu_utilization { |
| target = 0.5 |
| } |
| } |
| } |
| |
| resource "google_compute_instance_template" "foobar" { |
| name = "my-instance-template" |
| machine_type = "e2-medium" |
| can_ip_forward = false |
| |
| tags = ["foo", "bar"] |
| |
| disk { |
| source_image = data.google_compute_image.debian_9.id |
| } |
| |
| network_interface { |
| network = "default" |
| } |
| |
| metadata = { |
| foo = "bar" |
| } |
| |
| service_account { |
| scopes = ["userinfo-email", "compute-ro", "storage-ro"] |
| } |
| } |
| |
| resource "google_compute_target_pool" "foobar" { |
| name = "my-target-pool" |
| } |
| |
| resource "google_compute_instance_group_manager" "foobar" { |
| name = "my-igm" |
| zone = "us-central1-f" |
| |
| version { |
| instance_template = google_compute_instance_template.foobar.id |
| name = "primary" |
| } |
| |
| target_pools = [google_compute_target_pool.foobar.id] |
| base_instance_name = "foobar" |
| } |
| |
| data "google_compute_image" "debian_9" { |
| family = "debian-11" |
| project = "debian-cloud" |
| } |
| ``` |
| |
| ## Argument Reference |
| |
| The following arguments are supported: |
| |
| |
| * `name` - |
| (Required) |
| Name of the resource. The name must be 1-63 characters long and match |
| the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the |
| first character must be a lowercase letter, and all following |
| characters must be a dash, lowercase letter, or digit, except the last |
| character, which cannot be a dash. |
| |
| * `autoscaling_policy` - |
| (Required) |
| The configuration parameters for the autoscaling algorithm. You can |
| define one or more of the policies for an autoscaler: cpuUtilization, |
| customMetricUtilizations, and loadBalancingUtilization. |
| If none of these are specified, the default will be to autoscale based |
| on cpuUtilization to 0.6 or 60%. |
| Structure is [documented below](#nested_autoscaling_policy). |
| |
| * `target` - |
| (Required) |
| URL of the managed instance group that this autoscaler will scale. |
| |
| |
| <a name="nested_autoscaling_policy"></a>The `autoscaling_policy` block supports: |
| |
| * `min_replicas` - |
| (Required) |
| The minimum number of replicas that the autoscaler can scale down |
| to. This cannot be less than 0. If not provided, autoscaler will |
| choose a default value depending on maximum number of instances |
| allowed. |
| |
| * `max_replicas` - |
| (Required) |
| The maximum number of instances that the autoscaler can scale up |
| to. This is required when creating or updating an autoscaler. The |
| maximum number of replicas should not be lower than minimal number |
| of replicas. |
| |
| * `cooldown_period` - |
| (Optional) |
| The number of seconds that the autoscaler should wait before it |
| starts collecting information from a new instance. This prevents |
| the autoscaler from collecting information when the instance is |
| initializing, during which the collected usage would not be |
| reliable. The default time autoscaler waits is 60 seconds. |
| Virtual machine initialization times might vary because of |
| numerous factors. We recommend that you test how long an |
| instance may take to initialize. To do this, create an instance |
| and time the startup process. |
| |
| * `mode` - |
| (Optional) |
| Defines operating mode for this policy. |
| |
| * `scale_down_control` - |
| (Optional, [Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html)) |
| Defines scale down controls to reduce the risk of response latency |
| and outages due to abrupt scale-in events |
| Structure is [documented below](#nested_scale_down_control). |
| |
| * `scale_in_control` - |
| (Optional) |
| Defines scale in controls to reduce the risk of response latency |
| and outages due to abrupt scale-in events |
| Structure is [documented below](#nested_scale_in_control). |
| |
| * `cpu_utilization` - |
| (Optional) |
| Defines the CPU utilization policy that allows the autoscaler to |
| scale based on the average CPU utilization of a managed instance |
| group. |
| Structure is [documented below](#nested_cpu_utilization). |
| |
| * `metric` - |
| (Optional) |
| Configuration parameters of autoscaling based on a custom metric. |
| Structure is [documented below](#nested_metric). |
| |
| * `load_balancing_utilization` - |
| (Optional) |
| Configuration parameters of autoscaling based on a load balancer. |
| Structure is [documented below](#nested_load_balancing_utilization). |
| |
| * `scaling_schedules` - |
| (Optional) |
| Scaling schedules defined for an autoscaler. Multiple schedules can be set on an autoscaler and they can overlap. |
| Structure is [documented below](#nested_scaling_schedules). |
| |
| |
| <a name="nested_scale_down_control"></a>The `scale_down_control` block supports: |
| |
| * `max_scaled_down_replicas` - |
| (Optional) |
| A nested object resource |
| Structure is [documented below](#nested_max_scaled_down_replicas). |
| |
| * `time_window_sec` - |
| (Optional) |
| How long back autoscaling should look when computing recommendations |
| to include directives regarding slower scale down, as described above. |
| |
| |
| <a name="nested_max_scaled_down_replicas"></a>The `max_scaled_down_replicas` block supports: |
| |
| * `fixed` - |
| (Optional) |
| Specifies a fixed number of VM instances. This must be a positive |
| integer. |
| |
| * `percent` - |
| (Optional) |
| Specifies a percentage of instances between 0 to 100%, inclusive. |
| For example, specify 80 for 80%. |
| |
| <a name="nested_scale_in_control"></a>The `scale_in_control` block supports: |
| |
| * `max_scaled_in_replicas` - |
| (Optional) |
| A nested object resource |
| Structure is [documented below](#nested_max_scaled_in_replicas). |
| |
| * `time_window_sec` - |
| (Optional) |
| How long back autoscaling should look when computing recommendations |
| to include directives regarding slower scale down, as described above. |
| |
| |
| <a name="nested_max_scaled_in_replicas"></a>The `max_scaled_in_replicas` block supports: |
| |
| * `fixed` - |
| (Optional) |
| Specifies a fixed number of VM instances. This must be a positive |
| integer. |
| |
| * `percent` - |
| (Optional) |
| Specifies a percentage of instances between 0 to 100%, inclusive. |
| For example, specify 80 for 80%. |
| |
| <a name="nested_cpu_utilization"></a>The `cpu_utilization` block supports: |
| |
| * `target` - |
| (Required) |
| The target CPU utilization that the autoscaler should maintain. |
| Must be a float value in the range (0, 1]. If not specified, the |
| default is 0.6. |
| If the CPU level is below the target utilization, the autoscaler |
| scales down the number of instances until it reaches the minimum |
| number of instances you specified or until the average CPU of |
| your instances reaches the target utilization. |
| If the average CPU is above the target utilization, the autoscaler |
| scales up until it reaches the maximum number of instances you |
| specified or until the average utilization reaches the target |
| utilization. |
| |
| * `predictive_method` - |
| (Optional) |
| Indicates whether predictive autoscaling based on CPU metric is enabled. Valid values are: |
| - NONE (default). No predictive method is used. The autoscaler scales the group to meet current demand based on real-time metrics. |
| - OPTIMIZE_AVAILABILITY. Predictive autoscaling improves availability by monitoring daily and weekly load patterns and scaling out ahead of anticipated demand. |
| |
| <a name="nested_metric"></a>The `metric` block supports: |
| |
| * `name` - |
| (Required) |
| The identifier (type) of the Stackdriver Monitoring metric. |
| The metric cannot have negative values. |
| The metric must have a value type of INT64 or DOUBLE. |
| |
| * `single_instance_assignment` - |
| (Optional, [Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html)) |
| If scaling is based on a per-group metric value that represents the |
| total amount of work to be done or resource usage, set this value to |
| an amount assigned for a single instance of the scaled group. |
| The autoscaler will keep the number of instances proportional to the |
| value of this metric, the metric itself should not change value due |
| to group resizing. |
| For example, a good metric to use with the target is |
| `pubsub.googleapis.com/subscription/num_undelivered_messages` |
| or a custom metric exporting the total number of requests coming to |
| your instances. |
| A bad example would be a metric exporting an average or median |
| latency, since this value can't include a chunk assignable to a |
| single instance, it could be better used with utilization_target |
| instead. |
| |
| * `target` - |
| (Optional) |
| The target value of the metric that autoscaler should |
| maintain. This must be a positive value. A utilization |
| metric scales number of virtual machines handling requests |
| to increase or decrease proportionally to the metric. |
| For example, a good metric to use as a utilizationTarget is |
| www.googleapis.com/compute/instance/network/received_bytes_count. |
| The autoscaler will work to keep this value constant for each |
| of the instances. |
| |
| * `type` - |
| (Optional) |
| Defines how target utilization value is expressed for a |
| Stackdriver Monitoring metric. |
| Possible values are: `GAUGE`, `DELTA_PER_SECOND`, `DELTA_PER_MINUTE`. |
| |
| * `filter` - |
| (Optional, [Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html)) |
| A filter string to be used as the filter string for |
| a Stackdriver Monitoring TimeSeries.list API call. |
| This filter is used to select a specific TimeSeries for |
| the purpose of autoscaling and to determine whether the metric |
| is exporting per-instance or per-group data. |
| You can only use the AND operator for joining selectors. |
| You can only use direct equality comparison operator (=) without |
| any functions for each selector. |
| You can specify the metric in both the filter string and in the |
| metric field. However, if specified in both places, the metric must |
| be identical. |
| The monitored resource type determines what kind of values are |
| expected for the metric. If it is a gce_instance, the autoscaler |
| expects the metric to include a separate TimeSeries for each |
| instance in a group. In such a case, you cannot filter on resource |
| labels. |
| If the resource type is any other value, the autoscaler expects |
| this metric to contain values that apply to the entire autoscaled |
| instance group and resource label filtering can be performed to |
| point autoscaler at the correct TimeSeries to scale upon. |
| This is called a per-group metric for the purpose of autoscaling. |
| If not specified, the type defaults to gce_instance. |
| You should provide a filter that is selective enough to pick just |
| one TimeSeries for the autoscaled group or for each of the instances |
| (if you are using gce_instance resource type). If multiple |
| TimeSeries are returned upon the query execution, the autoscaler |
| will sum their respective values to obtain its scaling value. |
| |
| <a name="nested_load_balancing_utilization"></a>The `load_balancing_utilization` block supports: |
| |
| * `target` - |
| (Required) |
| Fraction of backend capacity utilization (set in HTTP(s) load |
| balancing configuration) that autoscaler should maintain. Must |
| be a positive float value. If not defined, the default is 0.8. |
| |
| <a name="nested_scaling_schedules"></a>The `scaling_schedules` block supports: |
| |
| * `name` - (Required) The identifier for this object. Format specified above. |
| |
| * `min_required_replicas` - |
| (Required) |
| Minimum number of VM instances that autoscaler will recommend in time intervals starting according to schedule. |
| |
| * `schedule` - |
| (Required) |
| The start timestamps of time intervals when this scaling schedule should provide a scaling signal. This field uses the extended cron format (with an optional year field). |
| |
| * `time_zone` - |
| (Optional) |
| The time zone to be used when interpreting the schedule. The value of this field must be a time zone name from the tz database: http://en.wikipedia.org/wiki/Tz_database. |
| |
| * `duration_sec` - |
| (Required) |
| The duration of time intervals (in seconds) for which this scaling schedule will be running. The minimum allowed value is 300. |
| |
| * `disabled` - |
| (Optional) |
| A boolean value that specifies if a scaling schedule can influence autoscaler recommendations. If set to true, then a scaling schedule has no effect. |
| |
| * `description` - |
| (Optional) |
| A description of a scaling schedule. |
| |
| - - - |
| |
| |
| * `description` - |
| (Optional) |
| An optional description of this resource. |
| |
| * `zone` - |
| (Optional) |
| URL of the zone where the instance group resides. |
| |
| * `project` - (Optional) The ID of the project in which the resource belongs. |
| If it is not provided, the provider project is used. |
| |
| |
| ## 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}}/zones/{{zone}}/autoscalers/{{name}}` |
| |
| * `creation_timestamp` - |
| Creation timestamp in RFC3339 text format. |
| * `self_link` - The URI of the created resource. |
| |
| |
| ## 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 |
| |
| |
| Autoscaler can be imported using any of these accepted formats: |
| |
| * `projects/{{project}}/zones/{{zone}}/autoscalers/{{name}}` |
| * `{{project}}/{{zone}}/{{name}}` |
| * `{{zone}}/{{name}}` |
| * `{{name}}` |
| |
| |
| In Terraform v1.5.0 and later, use an [`import` block](https://developer.hashicorp.com/terraform/language/import) to import Autoscaler using one of the formats above. For example: |
| |
| ```tf |
| import { |
| id = "projects/{{project}}/zones/{{zone}}/autoscalers/{{name}}" |
| to = google_compute_autoscaler.default |
| } |
| ``` |
| |
| When using the [`terraform import` command](https://developer.hashicorp.com/terraform/cli/commands/import), Autoscaler can be imported using one of the formats above. For example: |
| |
| ``` |
| $ terraform import google_compute_autoscaler.default projects/{{project}}/zones/{{zone}}/autoscalers/{{name}} |
| $ terraform import google_compute_autoscaler.default {{project}}/{{zone}}/{{name}} |
| $ terraform import google_compute_autoscaler.default {{zone}}/{{name}} |
| $ terraform import google_compute_autoscaler.default {{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). |