> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tensor9.com/llms.txt
> Use this file to discover all available pages before exploring further.

# EC2 Auto Scaling

> EC2 Auto Scaling APIs with Cloud Adapter.

This page describes how EC2 Auto Scaling maps to services in the environment where the application runs, including backend choices, supported operations and service-specific behavior.

## Supported environments

* Azure
* Google Cloud

Check the operation and capability tables for the behavior your application depends on. A supported environment does not imply that every operation of the origin service is available.

## How the backends compare

Each row compares a capability of EC2 Auto Scaling with its adaptation on each backend.
A dash means this profile does not state the capability for that backend.

### Cloud Adapter

| Capability | EC2 Auto Scaling | Azure | Google Cloud |
| - | - | - | - |
| Fleet size · desired replicas | desired\_capacity | desired replica count; readiness follows allocation and health | desired replica count; readiness follows allocation and health |
| Autoscaling bounds · min / max | min\_size / max\_size | min\_size and max\_size are not applied. The scale set runs at desired\_capacity (or min\_size) instances, and no Azure autoscale setting is created. | With a CPU target-tracking policy, min\_size and max\_size become the autoscaler's replica bounds. Without one, no autoscaler is created and the group runs at desired\_capacity (or min\_size); the bounds are not applied. |
| Per-instance configuration · instance settings | launch template / launch configuration / mixed-instances policy | the standalone-instance mapping | the standalone-instance mapping |
| Zonal spread · multi-AZ | vpc\_zone\_identifier | The scale set is created without availability zones, so it is not zone-redundant. It uses only the first subnet of vpc\_zone\_identifier; the build warns when there are more. | The fleet is a regional managed instance group in the region of the first subnet, and Google spreads replicas across that region's zones. The ASG's own subnet and zone list is not kept. |
| Fleet orchestration · AWS orchestration APIs | lifecycle hooks / instance refresh / warm pools / on-demand-spot split | AWS orchestration APIs not reproduced; native provisioning rollout is backend-specific | AWS orchestration APIs not reproduced; native provisioning rollout is backend-specific |
| API coverage | full | partial | partial |

## On Azure

### Virtual Machine Scale Sets

| Operation | Area | Support | Depth | Notes |
| - | - | - | - | - |
| Scaling policy (target-tracking / step) | Autoscaling | Partial | Most usage | Scaling policies are not applied: no Azure autoscale setting is created, so a CPU target-tracking policy, step and simple (threshold) policies and other metrics do not scale the fleet, and no evaluation or cooldown timing applies. The build warns when a policy or a min-to-max range is declared. |
| min\_size / max\_size | Autoscaling | Partial | Common | min\_size and max\_size are not applied. The scale set runs at desired\_capacity (or min\_size) instances, and no Azure autoscale setting is created. |
| SetDesiredCapacity / runtime scaling-policy mutations | Control plane | Out of scope | Full surface | SetDesiredCapacity and runtime scaling-policy changes are outside this mapping. Set size and bounds through infrastructure-as-code or the owning service's supported lifecycle configuration. The runtime group API separately supports discovery and deletion. |
| Fleet provisioning (aws\_autoscaling\_group) | Fleet lifecycle | Supported | Common | your aws\_autoscaling\_group compiles to an Azure Virtual Machine Scale Set, one managed group whose instances use the same configuration |
| Lifecycle hooks / instance refresh / warm pools / mixed-instances distribution | Fleet orchestration | Out of scope | Full surface | The AWS StartInstanceRefresh API, lifecycle hooks, warm pools and on-demand/Spot distribution are outside this mapping: scheduled actions, lifecycle hooks, notifications and other aws\_autoscaling\_\* resources attached to the group are removed with it. Backend-native rolling replacement during provisioning is separate and follows the backend's documented update policy where supported. |
| desired\_capacity | Fleet sizing | Supported | Common | Sets the desired number of replicas using the same launch configuration. Running and ready capacity converge as allocation, scheduling and health checks complete. |
| Instance blueprint (launch template / launch configuration / mixed-instances policy) | Instance definition | Partial | Common | the ASG's launch template or launch configuration uses the same instance mapping as a standalone Azure Virtual Machine, so every replica gets the machine size, the translated boot image, the root disk and the user data. Launch-template data volumes are not supported. GCP and Azure fleets also refuse explicit root IOPS or throughput. Supported GCP/Azure security groups bind natively, with named platform exceptions and unresolved-rule limits. No compiled replica receives EC2 IMDS or AWS role credentials. A public-IP request stops the build; mixed-instances overrides are not read. |
| Instance metadata + identity on every replica | Metadata + identity | Out of scope | Most usage | Replicas do not get the EC2 instance-metadata API; they see Azure's instance metadata service. |
| Multi-AZ placement (vpc\_zone\_identifier) | Placement | Partial | Most usage | The scale set is created without availability zones, so it is not zone-redundant. It uses only the first subnet of vpc\_zone\_identifier; the build warns when there are more. |

#### How it works

On Azure the Auto Scaling group becomes one Linux Virtual Machine Scale Set (`azurerm_linux_virtual_machine_scale_set`). Azure has no separate template resource: the VM size, boot image, OS disk, network interface and user data are fields of the scale set itself.

`desired_capacity` becomes the scale set's `instances` count. If you set only `min_size` and `max_size`, the scale set starts at `min_size`. That is the number of instances Azure is asked for; how many are running and ready depends on allocation, startup and health. The scale set does not scale automatically, is not spread across availability zones and has no automatic instance repair. The sections below explain each of these.

![On Azure the Auto Scaling group becomes one Virtual Machine Scale Set. The VM settings are part of the scale set, which runs the requested number of instances in one subnet.](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjAwIiB2aWV3Qm94PSIwIDAgODM2IDIwMCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJPbiBBenVyZSB0aGUgQXV0byBTY2FsaW5nIGdyb3VwIGJlY29tZXMgb25lIFZpcnR1YWwgTWFjaGluZSBTY2FsZSBTZXQuIFRoZSBWTSBzZXR0aW5ncyBhcmUgcGFydCBvZiB0aGUgc2NhbGUgc2V0LCB3aGljaCBydW5zIHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIGluc3RhbmNlcyBpbiBvbmUgc3VibmV0LiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6IzMzNDE1NX08L3N0eWxlPgo8dGV4dCB4PSIyMCIgeT0iMjQiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4Ij5BWlVSRSDCtyBPTkUgU0NBTEUgU0VUPC90ZXh0Pgo8cmVjdCB4PSIyMCIgeT0iNDAiIHdpZHRoPSI3OTYiIGhlaWdodD0iMTQ2IiByeD0iMTMiIHN0cm9rZS13aWR0aD0iMS43IiBzdHlsZT0iZmlsbDojZWNmZGY1O3N0cm9rZTojMDQ3ODU3Ii8+Cjx0ZXh0IHg9IjQxOCIgeT0iNjYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3Ij5WaXJ0dWFsIE1hY2hpbmUgU2NhbGUgU2V0PC90ZXh0Pgo8dGV4dCB4PSI0MTgiIHk9Ijg0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3Ij5SZXF1ZXN0ZWQgaW5zdGFuY2UgY291bnQgwrcgb25lIHN1Ym5ldDwvdGV4dD4KPHJlY3QgeD0iNDAiIHk9Ijk2IiB3aWR0aD0iNzU2IiBoZWlnaHQ9IjMwIiByeD0iOCIgc3R5bGU9ImZpbGw6I2ZmZmZmZjtzdHJva2U6I2E3ZjNkMCIvPgo8dGV4dCB4PSI0MTgiIHk9IjExNSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NyI+Vk0gbW9kZWw6IHNpemUgwrcgaW1hZ2UgwrcgT1MgZGlzayDCtyBuZXR3b3JrIMK3IHVzZXIgZGF0YTwvdGV4dD4KPHJlY3QgeD0iNDAiIHk9IjEzNiIgd2lkdGg9IjI0MCIgaGVpZ2h0PSI0MCIgcng9IjgiIHN0eWxlPSJmaWxsOiNmZmZmZmY7c3Ryb2tlOiNhN2YzZDAiLz4KPHJlY3QgeD0iMjk4IiB5PSIxMzYiIHdpZHRoPSIyNDAiIGhlaWdodD0iNDAiIHJ4PSI4IiBzdHlsZT0iZmlsbDojZmZmZmZmO3N0cm9rZTojYTdmM2QwIi8+CjxyZWN0IHg9IjU1NiIgeT0iMTM2IiB3aWR0aD0iMjQwIiBoZWlnaHQ9IjQwIiByeD0iOCIgc3R5bGU9ImZpbGw6I2ZmZmZmZjtzdHJva2U6I2E3ZjNkMCIvPgo8dGV4dCB4PSIxNjAiIHk9IjE2MSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmEiPkluc3RhbmNlPC90ZXh0Pgo8dGV4dCB4PSI0MTgiIHk9IjE2MSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmEiPkluc3RhbmNlPC90ZXh0Pgo8dGV4dCB4PSI2NzYiIHk9IjE2MSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmEiPkluc3RhbmNlPC90ZXh0Pgo8L3N2Zz4=)

![On Azure the Auto Scaling group becomes one Virtual Machine Scale Set. The VM settings are part of the scale set, which runs the requested number of instances in one subnet.](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjAwIiB2aWV3Qm94PSIwIDAgODM2IDIwMCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJPbiBBenVyZSB0aGUgQXV0byBTY2FsaW5nIGdyb3VwIGJlY29tZXMgb25lIFZpcnR1YWwgTWFjaGluZSBTY2FsZSBTZXQuIFRoZSBWTSBzZXR0aW5ncyBhcmUgcGFydCBvZiB0aGUgc2NhbGUgc2V0LCB3aGljaCBydW5zIHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIGluc3RhbmNlcyBpbiBvbmUgc3VibmV0LiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6I2NiZDVlMX08L3N0eWxlPgo8dGV4dCB4PSIyMCIgeT0iMjQiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjNjQ3NDhiIj5BWlVSRSDCtyBPTkUgU0NBTEUgU0VUPC90ZXh0Pgo8cmVjdCB4PSIyMCIgeT0iNDAiIHdpZHRoPSI3OTYiIGhlaWdodD0iMTQ2IiByeD0iMTMiIHN0cm9rZS13aWR0aD0iMS43IiBzdHlsZT0iZmlsbDojMDY0ZTNiO3N0cm9rZTojNmVlN2I3Ii8+Cjx0ZXh0IHg9IjQxOCIgeT0iNjYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNmVlN2I3Ij5WaXJ0dWFsIE1hY2hpbmUgU2NhbGUgU2V0PC90ZXh0Pgo8dGV4dCB4PSI0MTgiIHk9Ijg0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNmVlN2I3Ij5SZXF1ZXN0ZWQgaW5zdGFuY2UgY291bnQgwrcgb25lIHN1Ym5ldDwvdGV4dD4KPHJlY3QgeD0iNDAiIHk9Ijk2IiB3aWR0aD0iNzU2IiBoZWlnaHQ9IjMwIiByeD0iOCIgc3R5bGU9ImZpbGw6IzFlMjkzYjtzdHJva2U6IzA0Nzg1NyIvPgo8dGV4dCB4PSI0MTgiIHk9IjExNSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzZlZTdiNyI+Vk0gbW9kZWw6IHNpemUgwrcgaW1hZ2UgwrcgT1MgZGlzayDCtyBuZXR3b3JrIMK3IHVzZXIgZGF0YTwvdGV4dD4KPHJlY3QgeD0iNDAiIHk9IjEzNiIgd2lkdGg9IjI0MCIgaGVpZ2h0PSI0MCIgcng9IjgiIHN0eWxlPSJmaWxsOiMxZTI5M2I7c3Ryb2tlOiMwNDc4NTciLz4KPHJlY3QgeD0iMjk4IiB5PSIxMzYiIHdpZHRoPSIyNDAiIGhlaWdodD0iNDAiIHJ4PSI4IiBzdHlsZT0iZmlsbDojMWUyOTNiO3N0cm9rZTojMDQ3ODU3Ii8+CjxyZWN0IHg9IjU1NiIgeT0iMTM2IiB3aWR0aD0iMjQwIiBoZWlnaHQ9IjQwIiByeD0iOCIgc3R5bGU9ImZpbGw6IzFlMjkzYjtzdHJva2U6IzA0Nzg1NyIvPgo8dGV4dCB4PSIxNjAiIHk9IjE2MSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNmMWY1ZjkiPkluc3RhbmNlPC90ZXh0Pgo8dGV4dCB4PSI0MTgiIHk9IjE2MSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNmMWY1ZjkiPkluc3RhbmNlPC90ZXh0Pgo8dGV4dCB4PSI2NzYiIHk9IjE2MSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNmMWY1ZjkiPkluc3RhbmNlPC90ZXh0Pgo8L3N2Zz4=)

Your Auto Scaling group becomes one scale set that holds the VM settings and runs the requested number of instances.

#### The VM configuration

The launch settings, from a launch template, a launch configuration or a mixed-instances policy, become the scale set's VM model: the VM size mapped from your instance type, the boot image, the OS disk size and type, the network interface and your user data. If the launch settings do not set a volume type, the OS disk uses `StandardSSD_LRS`, because a scale set requires one. Each instance is a full Azure VM, set up the supported Azure fleet settings. Supported security groups bind natively; launch-template data volumes and explicit root IOPS or throughput remain unsupported.

Because the model is part of the scale set, the settings and the fleet are one resource. After the first deployment, changes to the boot image or to the user data are not applied to the scale set. The scale set is created without a `rolling_upgrade_policy`, in Azure's default manual upgrade mode, so other model changes reach existing instances only when they are upgraded or reimaged.

![The Auto Scaling group's launch settings, from a launch template, a launch configuration or a mixed-instances policy, become the VM model inside the scale set. There is no separate template; every instance starts from that model.](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTg4IiB2aWV3Qm94PSIwIDAgODM2IDE4OCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJUaGUgQXV0byBTY2FsaW5nIGdyb3VwJ3MgbGF1bmNoIHNldHRpbmdzLCBmcm9tIGEgbGF1bmNoIHRlbXBsYXRlLCBhIGxhdW5jaCBjb25maWd1cmF0aW9uIG9yIGEgbWl4ZWQtaW5zdGFuY2VzIHBvbGljeSwgYmVjb21lIHRoZSBWTSBtb2RlbCBpbnNpZGUgdGhlIHNjYWxlIHNldC4gVGhlcmUgaXMgbm8gc2VwYXJhdGUgdGVtcGxhdGU7IGV2ZXJ5IGluc3RhbmNlIHN0YXJ0cyBmcm9tIHRoYXQgbW9kZWwuIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojMzM0MTU1fTwvc3R5bGU+CjxkZWZzPjxtYXJrZXIgaWQ9ImF6YmxhaCIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNi41IiBtYXJrZXJIZWlnaHQ9IjYuNSIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgc3R5bGU9ImZpbGw6Izk0YTNiOCIvPjwvbWFya2VyPjwvZGVmcz4KPHRleHQgeD0iMjAiIHk9IjI0IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDojMDQ3ODU3Ij5MQVVOQ0ggU0VUVElOR1Mg4oaSIFBBUlQgT0YgVEhFIFNDQUxFIFNFVDwvdGV4dD4KPHJlY3QgeD0iMjAiIHk9IjQwIiB3aWR0aD0iMjA2IiBoZWlnaHQ9IjEzMiIgcng9IjEyIiBzdHJva2Utd2lkdGg9IjEuNCIgc3Ryb2tlLWRhc2hhcnJheT0iNSA1IiBzdHlsZT0iZmlsbDojZjhmYWZjO3N0cm9rZTojY2JkNWUxIi8+Cjx0ZXh0IHg9IjEyMyIgeT0iNjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiOyBmb250LXNpemU6MTBweCI+WW91ciBsYXVuY2ggc2V0dGluZ3M8L3RleHQ+CjxyZWN0IHg9IjM0IiB5PSI3NCIgd2lkdGg9IjE3OCIgaGVpZ2h0PSIyNiIgcng9IjciIHN0eWxlPSJmaWxsOiNmZmZmZmY7c3Ryb2tlOiNjYmQ1ZTEiLz4KPHRleHQgeD0iMTIzIiB5PSI5MSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICMzMzQxNTU7IGZvbnQtc2l6ZTo5LjVweCI+bGF1bmNoIHRlbXBsYXRlPC90ZXh0Pgo8cmVjdCB4PSIzNCIgeT0iMTA2IiB3aWR0aD0iMTc4IiBoZWlnaHQ9IjI2IiByeD0iNyIgc3R5bGU9ImZpbGw6I2ZmZmZmZjtzdHJva2U6I2NiZDVlMSIvPgo8dGV4dCB4PSIxMjMiIHk9IjEyMyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICMzMzQxNTU7IGZvbnQtc2l6ZTo5LjVweCI+bGF1bmNoIGNvbmZpZ3VyYXRpb248L3RleHQ+CjxyZWN0IHg9IjM0IiB5PSIxMzgiIHdpZHRoPSIxNzgiIGhlaWdodD0iMjYiIHJ4PSI3IiBzdHlsZT0iZmlsbDojZmZmZmZmO3N0cm9rZTojY2JkNWUxIi8+Cjx0ZXh0IHg9IjEyMyIgeT0iMTU1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzMzNDE1NTsgZm9udC1zaXplOjkuNXB4Ij5taXhlZC1pbnN0YW5jZXMgcG9saWN5PC90ZXh0Pgo8bGluZSB4MT0iMjI4IiB5MT0iMTA2IiB4Mj0iMjc0IiB5Mj0iMTA2IiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhemJsYWgpIiBzdHlsZT0ic3Ryb2tlOiM5NGEzYjgiLz4KPHRleHQgeD0iMjUxIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM2NDc0OGI7IGZvbnQtc2l6ZTo4LjVweCI+YmVjb21lczwvdGV4dD4KPHJlY3QgeD0iMjc4IiB5PSI0MCIgd2lkdGg9IjUzOCIgaGVpZ2h0PSIxMzIiIHJ4PSIxMyIgc3Ryb2tlLXdpZHRoPSIxLjciIHN0eWxlPSJmaWxsOiNlY2ZkZjU7c3Ryb2tlOiMwNDc4NTciLz4KPHRleHQgeD0iNTQ3IiB5PSI2NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtc2l6ZToxMXB4Ij5WaXJ0dWFsIE1hY2hpbmUgU2NhbGUgU2V0PC90ZXh0Pgo8cmVjdCB4PSIyOTIiIHk9Ijc4IiB3aWR0aD0iNTEwIiBoZWlnaHQ9IjM0IiByeD0iOCIgc3Ryb2tlLXdpZHRoPSIxLjMiIHN0eWxlPSJmaWxsOiNmZmZmZmY7c3Ryb2tlOiNhN2YzZDAiLz4KPHRleHQgeD0iNTQ3IiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC1zaXplOjEwcHgiPlZNIG1vZGVsIMK3IHNpemUgwrcgaW1hZ2UgwrcgT1MgZGlzayDCtyBuZXR3b3JrIMK3IHVzZXIgZGF0YTwvdGV4dD4KPHJlY3QgeD0iMjkyIiB5PSIxMjIiIHdpZHRoPSIxNjAiIGhlaWdodD0iMzgiIHJ4PSI3IiBzdHlsZT0iZmlsbDojZmZmZmZmO3N0cm9rZTojYTdmM2QwIi8+CjxyZWN0IHg9IjQ2NiIgeT0iMTIyIiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM4IiByeD0iNyIgc3R5bGU9ImZpbGw6I2ZmZmZmZjtzdHJva2U6I2E3ZjNkMCIvPgo8cmVjdCB4PSI2NDAiIHk9IjEyMiIgd2lkdGg9IjE2MiIgaGVpZ2h0PSIzOCIgcng9IjciIHN0eWxlPSJmaWxsOiNmZmZmZmY7c3Ryb2tlOiNhN2YzZDAiLz4KPHRleHQgeD0iMzcyIiB5PSIxNDYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTBweCI+SW5zdGFuY2U8L3RleHQ+Cjx0ZXh0IHg9IjU0NiIgeT0iMTQ2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjEwcHgiPkluc3RhbmNlPC90ZXh0Pgo8dGV4dCB4PSI3MjEiIHk9IjE0NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMHB4Ij5JbnN0YW5jZTwvdGV4dD4KPC9zdmc+)

![The Auto Scaling group's launch settings, from a launch template, a launch configuration or a mixed-instances policy, become the VM model inside the scale set. There is no separate template; every instance starts from that model.](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTg4IiB2aWV3Qm94PSIwIDAgODM2IDE4OCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJUaGUgQXV0byBTY2FsaW5nIGdyb3VwJ3MgbGF1bmNoIHNldHRpbmdzLCBmcm9tIGEgbGF1bmNoIHRlbXBsYXRlLCBhIGxhdW5jaCBjb25maWd1cmF0aW9uIG9yIGEgbWl4ZWQtaW5zdGFuY2VzIHBvbGljeSwgYmVjb21lIHRoZSBWTSBtb2RlbCBpbnNpZGUgdGhlIHNjYWxlIHNldC4gVGhlcmUgaXMgbm8gc2VwYXJhdGUgdGVtcGxhdGU7IGV2ZXJ5IGluc3RhbmNlIHN0YXJ0cyBmcm9tIHRoYXQgbW9kZWwuIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojY2JkNWUxfTwvc3R5bGU+CjxkZWZzPjxtYXJrZXIgaWQ9ImF6YmxhaCIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNi41IiBtYXJrZXJIZWlnaHQ9IjYuNSIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgc3R5bGU9ImZpbGw6IzY0NzQ4YiIvPjwvbWFya2VyPjwvZGVmcz4KPHRleHQgeD0iMjAiIHk9IjI0IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzY0NzQ4YjsgZmlsbDojNmVlN2I3Ij5MQVVOQ0ggU0VUVElOR1Mg4oaSIFBBUlQgT0YgVEhFIFNDQUxFIFNFVDwvdGV4dD4KPHJlY3QgeD0iMjAiIHk9IjQwIiB3aWR0aD0iMjA2IiBoZWlnaHQ9IjEzMiIgcng9IjEyIiBzdHJva2Utd2lkdGg9IjEuNCIgc3Ryb2tlLWRhc2hhcnJheT0iNSA1IiBzdHlsZT0iZmlsbDojMGYxNzJhO3N0cm9rZTojNDc1NTY5Ii8+Cjx0ZXh0IHg9IjEyMyIgeT0iNjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTRhM2I4OyBmb250LXNpemU6MTBweCI+WW91ciBsYXVuY2ggc2V0dGluZ3M8L3RleHQ+CjxyZWN0IHg9IjM0IiB5PSI3NCIgd2lkdGg9IjE3OCIgaGVpZ2h0PSIyNiIgcng9IjciIHN0eWxlPSJmaWxsOiMxZTI5M2I7c3Ryb2tlOiM0NzU1NjkiLz4KPHRleHQgeD0iMTIzIiB5PSI5MSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjYmQ1ZTE7IGZvbnQtc2l6ZTo5LjVweCI+bGF1bmNoIHRlbXBsYXRlPC90ZXh0Pgo8cmVjdCB4PSIzNCIgeT0iMTA2IiB3aWR0aD0iMTc4IiBoZWlnaHQ9IjI2IiByeD0iNyIgc3R5bGU9ImZpbGw6IzFlMjkzYjtzdHJva2U6IzQ3NTU2OSIvPgo8dGV4dCB4PSIxMjMiIHk9IjEyMyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjYmQ1ZTE7IGZvbnQtc2l6ZTo5LjVweCI+bGF1bmNoIGNvbmZpZ3VyYXRpb248L3RleHQ+CjxyZWN0IHg9IjM0IiB5PSIxMzgiIHdpZHRoPSIxNzgiIGhlaWdodD0iMjYiIHJ4PSI3IiBzdHlsZT0iZmlsbDojMWUyOTNiO3N0cm9rZTojNDc1NTY5Ii8+Cjx0ZXh0IHg9IjEyMyIgeT0iMTU1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2NiZDVlMTsgZm9udC1zaXplOjkuNXB4Ij5taXhlZC1pbnN0YW5jZXMgcG9saWN5PC90ZXh0Pgo8bGluZSB4MT0iMjI4IiB5MT0iMTA2IiB4Mj0iMjc0IiB5Mj0iMTA2IiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhemJsYWgpIiBzdHlsZT0ic3Ryb2tlOiM2NDc0OGIiLz4KPHRleHQgeD0iMjUxIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM5NGEzYjg7IGZvbnQtc2l6ZTo4LjVweCI+YmVjb21lczwvdGV4dD4KPHJlY3QgeD0iMjc4IiB5PSI0MCIgd2lkdGg9IjUzOCIgaGVpZ2h0PSIxMzIiIHJ4PSIxMyIgc3Ryb2tlLXdpZHRoPSIxLjciIHN0eWxlPSJmaWxsOiMwNjRlM2I7c3Ryb2tlOiM2ZWU3YjciLz4KPHRleHQgeD0iNTQ3IiB5PSI2NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2ZWU3Yjc7IGZvbnQtc2l6ZToxMXB4Ij5WaXJ0dWFsIE1hY2hpbmUgU2NhbGUgU2V0PC90ZXh0Pgo8cmVjdCB4PSIyOTIiIHk9Ijc4IiB3aWR0aD0iNTEwIiBoZWlnaHQ9IjM0IiByeD0iOCIgc3Ryb2tlLXdpZHRoPSIxLjMiIHN0eWxlPSJmaWxsOiMxZTI5M2I7c3Ryb2tlOiMwNDc4NTciLz4KPHRleHQgeD0iNTQ3IiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzZlZTdiNzsgZm9udC1zaXplOjEwcHgiPlZNIG1vZGVsIMK3IHNpemUgwrcgaW1hZ2UgwrcgT1MgZGlzayDCtyBuZXR3b3JrIMK3IHVzZXIgZGF0YTwvdGV4dD4KPHJlY3QgeD0iMjkyIiB5PSIxMjIiIHdpZHRoPSIxNjAiIGhlaWdodD0iMzgiIHJ4PSI3IiBzdHlsZT0iZmlsbDojMWUyOTNiO3N0cm9rZTojMDQ3ODU3Ii8+CjxyZWN0IHg9IjQ2NiIgeT0iMTIyIiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM4IiByeD0iNyIgc3R5bGU9ImZpbGw6IzFlMjkzYjtzdHJva2U6IzA0Nzg1NyIvPgo8cmVjdCB4PSI2NDAiIHk9IjEyMiIgd2lkdGg9IjE2MiIgaGVpZ2h0PSIzOCIgcng9IjciIHN0eWxlPSJmaWxsOiMxZTI5M2I7c3Ryb2tlOiMwNDc4NTciLz4KPHRleHQgeD0iMzcyIiB5PSIxNDYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjZjFmNWY5OyBmb250LXNpemU6MTBweCI+SW5zdGFuY2U8L3RleHQ+Cjx0ZXh0IHg9IjU0NiIgeT0iMTQ2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2YxZjVmOTsgZm9udC1zaXplOjEwcHgiPkluc3RhbmNlPC90ZXh0Pgo8dGV4dCB4PSI3MjEiIHk9IjE0NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNmMWY1Zjk7IGZvbnQtc2l6ZToxMHB4Ij5JbnN0YW5jZTwvdGV4dD4KPC9zdmc+)

Your launch settings become the VM model inside the scale set, and every instance starts from it.

#### Scaling

No Azure autoscale setting (`azurerm_monitor_autoscale_setting`) is created, so the scale set runs at its `instances` count and does not scale on its own. Azure autoscale expresses target tracking as a scale-out rule above one CPU threshold and a scale-in rule below another. A single AWS CPU target does not determine both thresholds, and choosing them for you could make the fleet oscillate, so a CPU target-tracking policy is reported as a build warning instead of being translated.

A group with `min_size` and `max_size` but no scaling policy also runs at a fixed count, with a warning: size bounds alone do not create an autoscale setting.

#### Placement and health checks

The scale set uses one subnet. If `vpc_zone_identifier` lists several subnets, every instance joins the first one and the build reports a warning. The scale set is created without availability zones, so it is not zone-redundant even when the Auto Scaling group spanned several zones.

No automatic instance repair policy is set, so an instance that is running but failing a health check is not replaced. The build warns about this whether or not the group set `health_check_type`, because on AWS the default still replaces instances that fail EC2 status checks. Load balancer target groups are not kept either: the scale set has no backend pool, so its instances receive no load-balanced traffic, and the build warns.

#### Limitations

Where Auto Scaling groups differ

* **Automatic scaling is not supported.** No autoscale setting is created. The scale set runs at the desired count, and a CPU target-tracking policy or a size range is reported as a build warning.
* **Zone redundancy is not supported.** The scale set has no availability zones and uses only the first subnet in `vpc_zone_identifier`, so a multi-AZ group is not zone-redundant on Azure.
* **Health-check replacement is not supported.** No automatic instance repair policy is set, so an unhealthy instance that keeps running is not replaced.
* **Load balancer target groups are not supported.** `target_group_arns` and target group attachments are not kept. The scale set has no backend pool, so its instances receive no load-balanced traffic.
* **Image and user-data changes behave differently: they are ignored after the first deployment.** Later changes to the boot image or user data are not applied to the scale set. Other model changes reach existing instances only when they are upgraded, because the scale set uses manual upgrade mode.
* **Scheduled actions, lifecycle hooks and warm pools are not supported.** Scheduled actions, lifecycle hooks and notifications are removed with the group, and warm pools have no scale set equivalent. The AWS `StartInstanceRefresh` API is not supported either.
* **Spot and mixed instance types are not supported.** Every instance uses one VM size at regular priority. A mixed-instances policy's instance types and on-demand/Spot split are not reproduced.
* **Explicit boot-volume IOPS or throughput is not supported.** If the launch settings set IOPS or throughput on the root volume, the build stops with an error, because a scale set's managed OS disk cannot set them separately.
* **Launch-template data disks are not supported.** A launch template or launch configuration with non-root data volumes stops the build. Standalone-instance data-disk support does not extend to fleet replicas. Compiled replicas receive no EC2 metadata endpoint or AWS role credentials.
* **Changing the size through the AWS API at runtime is not supported.** `SetDesiredCapacity` and runtime scaling-policy changes are outside this mapping. Change size and bounds in your infrastructure code. Unsupported settings can be reported during the build; unsupported SDK requests return an error.
* **Groups that provide ECS or EKS capacity are not converted.** A group used by an ECS capacity provider, or whose user data joins its instances to ECS or EKS, does not become a scale set; it is handled as part of the ECS or EKS mapping.

#### Other considerations

* **Read the build warnings.** They list what was not kept for each group: its scaling policy or size range, health checks, extra subnets and target groups.
* **Instances are replaced, not repaired.** Instances can be reimaged or replaced, so keep state that must survive on attached managed disks or in a storage account, not on the OS disk.
* **Costs depend on the running instances.** VM charges follow the instances actually running, including temporary replacement capacity, plus storage, networking and other target cloud charges. Desired-capacity bounds are not an enforced spending cap.

#### Fleet management scope

The fleet runs as an Azure Virtual Machine Scale Set with the autoscale setting's sizing controls. See [fleet lifecycle and runtime management](https://docs.tensor9.com/cloud-adapter-early-access/service-catalog/aws/compute-containers/autoscaling-group.md#fleet-lifecycle-and-runtime-management) for logical group discovery/deletion and higher-level ownership. Desired-capacity and policy changes use infrastructure-as-code or the owning service; native readiness, placement and replacement follow this backend's controls above.

#### Example monthly charges

This Tensor9 Cloud Adapter scenario estimates service charges for the named origin and target services. Adapter hosting and commercial Tensor9 fees need separate allocations. [How Tensor9 estimates costs](https://docs.tensor9.com/cloud-adapter-early-access/costs/overview.md) explains the method and what the estimates include.

##### Autoscaling fleet allocation (EC2 Auto Scaling) · Allocated fleet instance-hours per month

Feature: Autoscaling fleet allocation (EC2 Auto Scaling).

Estimated monthly service charges by Allocated fleet instance-hours per month. Adapter hosting and Tensor9 fees are excluded. Source: us-east-1; target: eastus; currency: USD.

![Autoscaling fleet allocation (EC2 Auto Scaling) · Allocated fleet instance-hours per month: monthly service charges by Allocated fleet instance-hours per month. Exact values are in the following table.](https://docs.tensor9.com/images/cloud-adapter-early-access/diagrams/service-cost/047bb6b2b4da633636d3d9f7424c1d303e316aaacb0584797b30d1b04d62b5bf-light.svg)

![Autoscaling fleet allocation (EC2 Auto Scaling) · Allocated fleet instance-hours per month: monthly service charges by Allocated fleet instance-hours per month. Exact values are in the following table.](https://docs.tensor9.com/images/cloud-adapter-early-access/diagrams/service-cost/161a181dac5f7c54a64bffdab7c4685dee44e89e0bbf98986740ff2b44e318ad-dark.svg)

Comparison pills describe all sampled scale points; amounts beside each service are for the named workload. Costs The Same means within 20% at every point. Costs Depend includes mixed results and unpriced samples.

Sampled monthly charges in USD, rounded to cents. Difference means target minus origin; a positive difference means the target costs more.

| Allocated fleet instance-hours per month (instance-hour/month) | EC2 Auto Scaling | Virtual Machine Scale Sets | Difference |
| -: | -: | -: | -: |
| 0 | 0.00 | 0.00 | 0.00 |
| 730 | 73.58 | 70.08 | -3.50 |
| 2,190 | 220.75 | 210.24 | -10.51 |
| 7,300 | 735.84 | 700.80 | -35.04 |
| 73,000 | 7,358.40 | 7,008.00 | -350.40 |
| 730,000 | 73,584.00 | 70,080.00 | -3,504.00 |

**Curve assumptions**

| Assumption | Value | Unit |
| - | -: | - |
| Origin list price · Fleet allocated instance hours | 0.1008 | USD/instance-hour |
| Origin list price · Fleet management requests | 0 | USD/Requests |
| Target vCPUs per fleet instance | 2 | vCPU |
| Target RAM per fleet instance | 8 | GiB |
| Target price guess · read | 0 | USD/read |
| Target price guess · write | 0 | USD/write |
| Target price guess · provider operation | 0 | USD/provider operation |
| Target list price · GiB-month | 0.0803 | USD/GiB-month |
| Target price guess · published GiB | 0 | USD/published GiB |
| Target price guess · delivered GiB | 0 | USD/delivered GiB |
| Target list price · network GiB | 0.087 | USD/network GiB |
| Target price guess · replica GiB-month | 0 | USD/replica GiB-month |
| Target list price · vCPU-hour | 0.033 | USD/vCPU-hour |
| Target list price · GiB-hour | 0.00375 | USD/GiB-hour |
| Target price guess · resource-hour | 0 | USD/resource-hour |
| Target price guess · resource-month | 0 | USD/resource-month |
| Target price guess · input token | 0 | USD/input token |
| Target price guess · output token | 0 | USD/output token |
| Target monthly base charge | 0 | USD/month |
| Approximate target service minimum | 0 | USD/month |
| Minimum primary CPU | 2 | vCPU |
| Minimum primary RAM | 8 | GiB |
| Minimum primary disk | 100 | GiB |
| Additional full-price standby copy | 0 | 0 or 1 |
| Allocated share of provisioned cost | 1 | fraction |
| Read/write work per vCPU-second | 1,500 | operations/vCPU-second |
| Planning peak / mean work | 2 | multiplier |
| Planning primary CPU utilization | 0.7 | fraction |
| Resident state reserved in RAM | 0.1 | fraction |
| Planning disk utilization | 0.8 | fraction |
| Maintenance and log disk reserve | 20 | GiB |
| Staging database CPU unit-price guess | 0.0413 | USD/vCPU-hour |
| Staging database RAM unit-price guess | 0.007 | USD/GiB-hour |
| Staging database disk unit-price guess | 0.17 | USD/GiB-month |
| Dependent object sink storage price guess | 0.023 | USD/GiB-month |
| Dependent object sink write price guess | 0.000005 | USD/write |

* Only this native meter varies; all other source usage and translation assumptions retain the displayed defaults. Other native meters and workload assumptions retain their explicitly displayed default quantities. Workload translation and capacity assumptions are not benchmark measurements.
* Native monthly usage priced at the cited provider list prices; listed target allowances apply where present, excluding invoice credits, taxes and negotiated discounts. Rates as of 2026-10-22: us-east-1 → eastus, USD/month.
* Source prices are reference charges, not an invoice. Target lines cover selected service usage/configuration only; adapter hosting and Tensor9 fees are excluded.
* Samples of explicit prices are not performance measurements or capacity qualification. No interpolation or break-even guarantee is implied.
* Variant assumptions show the first axis sample; any axis-dependent configuration is described by this curve's workload note.
* Rates are cited provider list prices, editable for discounts, commitments or another region. Workload translation and capacity coefficients remain editable planning assumptions, not benchmark measurements or a commercial quote.
* Default-zero rates are explicit assumptions, not evidence that the deployed service or resource is free.
* Provisioned-unit minimums use an editable approximate allocation floor. Modeled target service cost is max(usage/allocation, minimum), with billable network, durable staging and dependent sinks added separately; actual RU/TU sizing, scaling increments and throughput remain unqualified.
* Durable staging is priced once: provisioned targets include adapter state in their selected allocation; native targets add a separate staging allocation when required. Adapter hosting is a separate allocation and must exclude resources already priced as staging, workers or target capacity.
* A declared adapter mapping and cost model do not establish implementation availability or service equivalence.
* This is a declared directed mapping; a planning estimate does not establish deployment or request-serving support.
* Origin unit prices are cited provider list prices; capacity coefficients and translation assumptions are editable authored planning guesses, not measured capacity or a provider quote.
* Management requests do not reveal resource allocation or workload traffic. Provisioned resources and traffic are independent inputs.
* This native fleet resource comparison is separate from the Auto Scaling runtime discovery adapter and its supported operations.
* Instance-hours are priced exactly once as CPU and RAM allocation; management requests add no assumed fleet instances.
* Fleet orchestration is not billed separately: member instance CPU and memory hours bill at the instance rates. Management API counts never create VM-hours. Azure: Dsv5 decomposed against Esv5; Premium SSD v2 disk; internet egress.
* AWS Price List API, AmazonEC2 offer (CSV): [https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AmazonEC2/current/us-east-1/index.csv](https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AmazonEC2/current/us-east-1/index.csv)
* Amazon EC2 Auto Scaling pricing: [https://aws.amazon.com/ec2/autoscaling/pricing/](https://aws.amazon.com/ec2/autoscaling/pricing/)
* Azure Retail Prices API: [https://prices.azure.com/api/retail/prices](https://prices.azure.com/api/retail/prices)

Cost scope: Modeled target native service and explicitly modeled state allocation; hosting and Tensor9 fees only when supplied.

Excluded costs and workload features:

* Instance disks, traffic, licenses, load balancers, spare replacement instances and metric collection.
* Taxes, discounts, credits and free-tier allowances not explicitly listed by this model.
* Unmodeled dependent services, task execution and operations outside the selected workload family.

List prices read: 2026-10-22. Model: `plan-82812da0f423869e63eda34be31dc83ce60055ad` / `2026-10-22.planning.2`. Curve: `workload-1`.

Sources: [AWS Price List API, AmazonEC2 offer (CSV)](https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AmazonEC2/current/us-east-1/index.csv), [Amazon EC2 Auto Scaling pricing](https://aws.amazon.com/ec2/autoscaling/pricing/), [Azure Retail Prices API](https://prices.azure.com/api/retail/prices).

**Autoscaling fleet allocation (EC2 Auto Scaling) → Virtual Machine Scale Sets: Authored native-usage planning example.** Native monthly usage priced at the cited provider list prices; listed target allowances apply where present, excluding invoice credits, taxes and negotiated discounts.

Scenario source region: us-east-1. Scenario target region: eastus. Currency: USD.

| Monthly component | USD |
| - | -: |
| Origin: Fleet allocated instance hours | 220.75 |
| Origin: Fleet management requests | 0.00 |
| Target: Target retained physical data | 0.00 |
| Target: Additional broker replica storage | 0.00 |
| Target: Target native provider operations | 0.00 |
| Target: Execution or worker CPU | 144.54 |
| Target: Execution or worker RAM | 65.70 |
| Target: Selected billable network | 0.00 |
| Target: Independent native resources | 0.00 |
| Target: Independent native resources | 0.00 |
| **Origin service subtotal** | **220.75** |
| **Target service subtotal** | **210.24** |

Unestimated components: Adapter hosting, Tensor9 fees. A modeled adapted total and savings require these costs.

Cost scope: Modeled target native service and explicitly modeled state allocation; hosting and Tensor9 fees only when supplied.

Excluded costs and workload features:

* Instance disks, traffic, licenses, load balancers, spare replacement instances and metric collection.
* Taxes, discounts, credits and free-tier allowances not explicitly listed by this model.
* Unmodeled dependent services, task execution and operations outside the selected workload family.

**Scenario assumptions**

| Input | Value | Unit |
| - | -: | - |
| Origin list price · Fleet allocated instance hours | 0.1008 | USD/instance-hour |
| Origin list price · Fleet management requests | 0 | USD/Requests |
| Target vCPUs per fleet instance | 2 | vCPU |
| Target RAM per fleet instance | 8 | GiB |
| Target price guess · read | 0 | USD/read |
| Target price guess · write | 0 | USD/write |
| Target price guess · provider operation | 0 | USD/provider operation |
| Target list price · GiB-month | 0.0803 | USD/GiB-month |
| Target price guess · published GiB | 0 | USD/published GiB |
| Target price guess · delivered GiB | 0 | USD/delivered GiB |
| Target list price · network GiB | 0.087 | USD/network GiB |
| Target price guess · replica GiB-month | 0 | USD/replica GiB-month |
| Target list price · vCPU-hour | 0.033 | USD/vCPU-hour |
| Target list price · GiB-hour | 0.00375 | USD/GiB-hour |
| Target price guess · resource-hour | 0 | USD/resource-hour |
| Target price guess · resource-month | 0 | USD/resource-month |
| Target price guess · input token | 0 | USD/input token |
| Target price guess · output token | 0 | USD/output token |
| Target monthly base charge | 0 | USD/month |
| Approximate target service minimum | 0 | USD/month |
| Minimum primary CPU | 2 | vCPU |
| Minimum primary RAM | 8 | GiB |
| Minimum primary disk | 100 | GiB |
| Additional full-price standby copy | 0 | 0 or 1 |
| Allocated share of provisioned cost | 1 | fraction |
| Read/write work per vCPU-second | 1,500 | operations/vCPU-second |
| Planning peak / mean work | 2 | multiplier |
| Planning primary CPU utilization | 0.7 | fraction |
| Resident state reserved in RAM | 0.1 | fraction |
| Planning disk utilization | 0.8 | fraction |
| Maintenance and log disk reserve | 20 | GiB |
| Staging database CPU unit-price guess | 0.0413 | USD/vCPU-hour |
| Staging database RAM unit-price guess | 0.007 | USD/GiB-hour |
| Staging database disk unit-price guess | 0.17 | USD/GiB-month |
| Dependent object sink storage price guess | 0.023 | USD/GiB-month |
| Dependent object sink write price guess | 0.000005 | USD/write |
| Fleet allocated instance hours | 2,190 | instance-hour |
| Fleet management requests | 1,000,000 | Requests |

* Translated reads: 0 operations.

* Translated writes: 0 operations.

* Translated resident physical data: 0 GiB-month.

* Native provider operations: 1,000,000 operations.

* Published payload: 0 GiB.

* Delivered payload: 0 GiB.

* Allocated execution CPU: 4,380 vCPU-hour.

* Allocated execution RAM: 17,520 GiB-hour.

* Independent resource allocation: 0 resource-hour.

* Independent inventory: 0 resource-month.

* Input tokens: 0 tokens.

* Output tokens: 0 tokens.

* Billable network: 0 GiB.

* Dependent object sink retained data: 0 GiB-month.

* Dependent object sink writes: 0 writes.

* Rates are cited provider list prices, editable for discounts, commitments or another region. Workload translation and capacity coefficients remain editable planning assumptions, not benchmark measurements or a commercial quote.

* Default-zero rates are explicit assumptions, not evidence that the deployed service or resource is free.

* Provisioned-unit minimums use an editable approximate allocation floor. Modeled target service cost is max(usage/allocation, minimum), with billable network, durable staging and dependent sinks added separately; actual RU/TU sizing, scaling increments and throughput remain unqualified.

* Durable staging is priced once: provisioned targets include adapter state in their selected allocation; native targets add a separate staging allocation when required. Adapter hosting is a separate allocation and must exclude resources already priced as staging, workers or target capacity.

* A declared adapter mapping and cost model do not establish implementation availability or service equivalence.

* This is a declared directed mapping; a planning estimate does not establish deployment or request-serving support.

* Origin unit prices are cited provider list prices; capacity coefficients and translation assumptions are editable authored planning guesses, not measured capacity or a provider quote.

* Management requests do not reveal resource allocation or workload traffic. Provisioned resources and traffic are independent inputs.

* This native fleet resource comparison is separate from the Auto Scaling runtime discovery adapter and its supported operations.

* Instance-hours are priced exactly once as CPU and RAM allocation; management requests add no assumed fleet instances.

* Fleet orchestration is not billed separately: member instance CPU and memory hours bill at the instance rates. Management API counts never create VM-hours. Azure: Dsv5 decomposed against Esv5; Premium SSD v2 disk; internet egress.

List prices read: 2026-10-22. Model: `plan-82812da0f423869e63eda34be31dc83ce60055ad` / `2026-10-22.planning.2`. Scenario: `planning-example`.

Sources: [AWS Price List API, AmazonEC2 offer (CSV)](https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AmazonEC2/current/us-east-1/index.csv), [Amazon EC2 Auto Scaling pricing](https://aws.amazon.com/ec2/autoscaling/pricing/), [Azure Retail Prices API](https://prices.azure.com/api/retail/prices).

## On Google Cloud

### Managed Instance Group

| Operation | Area | Support | Depth | Notes |
| - | - | - | - | - |
| Scaling policy (target-tracking / step) | Autoscaling | Partial | Most usage | Only a target-tracking policy on average CPU utilization is read; it becomes the regional autoscaler's CPU utilization target. Step and simple (threshold) policies, predictive scaling and other metrics are not read, so such a fleet runs at a fixed size. Evaluation windows, cooldowns and scaling timing follow Google's autoscaler. |
| min\_size / max\_size | Autoscaling | Partial | Common | With a CPU target-tracking policy, min\_size and max\_size become the autoscaler's replica bounds. Without one, no autoscaler is created and the group runs at desired\_capacity (or min\_size); the bounds are not applied. |
| SetDesiredCapacity / runtime scaling-policy mutations | Control plane | Out of scope | Full surface | SetDesiredCapacity and runtime scaling-policy changes are outside this mapping. Set size and bounds through infrastructure-as-code or the owning service's supported lifecycle configuration. The runtime group API separately supports discovery and deletion. |
| Fleet provisioning (aws\_autoscaling\_group) | Fleet lifecycle | Supported | Common | your aws\_autoscaling\_group compiles to a Google Compute Engine regional managed instance group, one managed group whose instances use the same configuration |
| Lifecycle hooks / instance refresh / warm pools / mixed-instances distribution | Fleet orchestration | Out of scope | Full surface | The AWS StartInstanceRefresh API, lifecycle hooks, warm pools and on-demand/Spot distribution are outside this mapping: scheduled actions, lifecycle hooks, notifications and other aws\_autoscaling\_\* resources attached to the group are removed with it. Backend-native rolling replacement during provisioning is separate and follows the backend's documented update policy where supported. |
| desired\_capacity | Fleet sizing | Supported | Common | Sets the desired number of replicas using the same launch configuration. Running and ready capacity converge as allocation, scheduling and health checks complete. |
| Instance blueprint (launch template / launch configuration / mixed-instances policy) | Instance definition | Partial | Common | the ASG's launch template or launch configuration uses the same instance mapping as a standalone Compute Engine instance, so every replica gets the machine size, the translated boot image, the root disk size and type, the user data, and the launch template's IAM role as the replica's service account. Launch-template data volumes are not supported. GCP and Azure fleets also refuse explicit root IOPS or throughput. Supported GCP/Azure security groups bind natively, with named platform exceptions and unresolved-rule limits. No compiled replica receives EC2 IMDS or AWS role credentials. A public-IP request stops the build; mixed-instances overrides are not read. |
| Instance metadata + identity on every replica | Metadata + identity | Partial | Most usage | Replicas do not get the EC2 instance-metadata API; they see Google's metadata server. The launch template's IAM role becomes the replicas' Google service account. |
| Multi-AZ placement (vpc\_zone\_identifier) | Placement | Partial | Most usage | The fleet is a regional managed instance group in the region of the first subnet, and Google spreads replicas across that region's zones. The ASG's own subnet and zone list is not kept. |

#### How it works

On AWS one `aws_autoscaling_group` holds both the fleet and, through its launch template, the settings for each instance. On Google Cloud the same fleet becomes three resources: a `google_compute_instance_template` with the settings for each VM, a regional managed instance group (`google_compute_region_instance_group_manager`) that runs the VMs, and, when the group has a CPU target-tracking policy, a `google_compute_region_autoscaler` that resizes the group.

`desired_capacity` becomes the MIG's `target_size`. If you set only `min_size` and `max_size`, the MIG starts at `min_size`. That is the number of VMs the MIG asks for; how many are running and ready depends on capacity, startup and health. The MIG is regional, so Google Cloud spreads its VMs across the zones of the region.

![On Google Cloud the Auto Scaling group becomes an instance template, a regional managed instance group (MIG) that runs the VMs across the region's zones, and, when the group has a CPU target-tracking policy, an autoscaler that resizes the MIG.](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjE0IiB2aWV3Qm94PSIwIDAgODM2IDIxNCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJPbiBHb29nbGUgQ2xvdWQgdGhlIEF1dG8gU2NhbGluZyBncm91cCBiZWNvbWVzIGFuIGluc3RhbmNlIHRlbXBsYXRlLCBhIHJlZ2lvbmFsIG1hbmFnZWQgaW5zdGFuY2UgZ3JvdXAgKE1JRykgdGhhdCBydW5zIHRoZSBWTXMgYWNyb3NzIHRoZSByZWdpb24ncyB6b25lcywgYW5kLCB3aGVuIHRoZSBncm91cCBoYXMgYSBDUFUgdGFyZ2V0LXRyYWNraW5nIHBvbGljeSwgYW4gYXV0b3NjYWxlciB0aGF0IHJlc2l6ZXMgdGhlIE1JRy4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiMzMzQxNTV9PC9zdHlsZT4KPGRlZnM+PG1hcmtlciBpZD0iZ2NwYWgiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgc3R5bGU9ImZpbGw6Izk0YTNiOCIvPjwvbWFya2VyPjwvZGVmcz4KPHRleHQgeD0iMjAiIHk9IjI0IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDojMDQ3ODU3Ij5HT09HTEUgQ0xPVUQgwrcgVEhSRUUgUkVTT1VSQ0VTPC90ZXh0Pgo8cmVjdCB4PSIyMCIgeT0iNTgiIHdpZHRoPSIxNzgiIGhlaWdodD0iMTA0IiByeD0iMTIiIHN0cm9rZS13aWR0aD0iMS40IiBzdHlsZT0iZmlsbDojZmZmZmZmO3N0cm9rZTojYTdmM2QwIi8+Cjx0ZXh0IHg9IjEwOSIgeT0iODYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTAuNXB4Ij5JbnN0YW5jZSB0ZW1wbGF0ZTwvdGV4dD4KPHRleHQgeD0iMTA5IiB5PSIxMDYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTciPlNldHRpbmdzIGZvciBlYWNoIFZNPC90ZXh0Pgo8dGV4dCB4PSIxMDkiIHk9IjEyNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGI7IGZvbnQtc2l6ZTo5LjVweCI+bWFjaGluZSB0eXBlIMK3IGltYWdlPC90ZXh0Pgo8dGV4dCB4PSIxMDkiIHk9IjE0MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGI7IGZvbnQtc2l6ZTo5LjVweCI+ZGlzayDCtyBzdWJuZXQgwrcgaWRlbnRpdHk8L3RleHQ+CjxsaW5lIHgxPSIxOTgiIHkxPSIxMDQiIHgyPSIyNTAiIHkyPSIxMDQiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2djcGFoKSIgc3R5bGU9InN0cm9rZTojOTRhM2I4Ii8+Cjx0ZXh0IHg9IjIyNCIgeT0iOTYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNjQ3NDhiOyBmb250LXNpemU6OC41cHgiPnZlcnNpb248L3RleHQ+CjxyZWN0IHg9IjI1NCIgeT0iNDQiIHdpZHRoPSIzMjgiIGhlaWdodD0iMTQwIiByeD0iMTMiIHN0cm9rZS13aWR0aD0iMS43IiBzdHlsZT0iZmlsbDojZWNmZGY1O3N0cm9rZTojMDQ3ODU3Ii8+Cjx0ZXh0IHg9IjQxOCIgeT0iNzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTJweCI+UmVnaW9uYWwgTUlHPC90ZXh0Pgo8dGV4dCB4PSI0MTgiIHk9Ijg4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6OS41cHgiPkRlc2lyZWQgc2l6ZSDCtyB0aGUgcmVnaW9uJ3Mgem9uZXM8L3RleHQ+CjxyZWN0IHg9IjI2OCIgeT0iMTA0IiB3aWR0aD0iOTYiIGhlaWdodD0iNjIiIHJ4PSI4IiBzdHlsZT0iZmlsbDojZmZmZmZmO3N0cm9rZTojYTdmM2QwIi8+CjxyZWN0IHg9IjM3MCIgeT0iMTA0IiB3aWR0aD0iOTYiIGhlaWdodD0iNjIiIHJ4PSI4IiBzdHlsZT0iZmlsbDojZmZmZmZmO3N0cm9rZTojYTdmM2QwIi8+CjxyZWN0IHg9IjQ3MiIgeT0iMTA0IiB3aWR0aD0iOTYiIGhlaWdodD0iNjIiIHJ4PSI4IiBzdHlsZT0iZmlsbDojZmZmZmZmO3N0cm9rZTojYTdmM2QwIi8+Cjx0ZXh0IHg9IjMxNiIgeT0iMTMyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjEwLjVweCI+Vk08L3RleHQ+Cjx0ZXh0IHg9IjQxOCIgeT0iMTMyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjEwLjVweCI+Vk08L3RleHQ+Cjx0ZXh0IHg9IjUyMCIgeT0iMTMyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjEwLjVweCI+Vk08L3RleHQ+Cjx0ZXh0IHg9IjMxNiIgeT0iMTUwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YjsgZm9udC1zaXplOjkuNXB4Ij56b25lIGE8L3RleHQ+Cjx0ZXh0IHg9IjQxOCIgeT0iMTUwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YjsgZm9udC1zaXplOjkuNXB4Ij56b25lIGI8L3RleHQ+Cjx0ZXh0IHg9IjUyMCIgeT0iMTUwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YjsgZm9udC1zaXplOjkuNXB4Ij56b25lIGM8L3RleHQ+CjxsaW5lIHgxPSI2MjgiIHkxPSIxMDQiIHgyPSI1ODYiIHkyPSIxMDQiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2djcGFoKSIgc3R5bGU9InN0cm9rZTojOTRhM2I4Ii8+Cjx0ZXh0IHg9IjYwNyIgeT0iOTYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNjQ3NDhiOyBmb250LXNpemU6OC41cHgiPnJlc2l6ZXM8L3RleHQ+CjxyZWN0IHg9IjYzMiIgeT0iNTgiIHdpZHRoPSIxODQiIGhlaWdodD0iMTA0IiByeD0iMTIiIHN0cm9rZS13aWR0aD0iMS40IiBzdHlsZT0iZmlsbDojZmZmZmZmO3N0cm9rZTojYTdmM2QwIi8+Cjx0ZXh0IHg9IjcyNCIgeT0iODYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTAuNXB4Ij5BdXRvc2NhbGVyPC90ZXh0Pgo8dGV4dCB4PSI3MjQiIHk9IjEwNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NyI+bWluIOKGlCBtYXggcmVwbGljYXM8L3RleHQ+Cjx0ZXh0IHg9IjcyNCIgeT0iMTI2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YjsgZm9udC1zaXplOjkuNXB4Ij5DUFUgdXRpbGl6YXRpb24gdGFyZ2V0PC90ZXh0Pgo8dGV4dCB4PSI3MjQiIHk9IjE0MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGI7IGZvbnQtc2l6ZTo5LjVweCI+b25seSB3aXRoIGEgQ1BVIHBvbGljeTwvdGV4dD4KPC9zdmc+)

![On Google Cloud the Auto Scaling group becomes an instance template, a regional managed instance group (MIG) that runs the VMs across the region's zones, and, when the group has a CPU target-tracking policy, an autoscaler that resizes the MIG.](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjE0IiB2aWV3Qm94PSIwIDAgODM2IDIxNCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJPbiBHb29nbGUgQ2xvdWQgdGhlIEF1dG8gU2NhbGluZyBncm91cCBiZWNvbWVzIGFuIGluc3RhbmNlIHRlbXBsYXRlLCBhIHJlZ2lvbmFsIG1hbmFnZWQgaW5zdGFuY2UgZ3JvdXAgKE1JRykgdGhhdCBydW5zIHRoZSBWTXMgYWNyb3NzIHRoZSByZWdpb24ncyB6b25lcywgYW5kLCB3aGVuIHRoZSBncm91cCBoYXMgYSBDUFUgdGFyZ2V0LXRyYWNraW5nIHBvbGljeSwgYW4gYXV0b3NjYWxlciB0aGF0IHJlc2l6ZXMgdGhlIE1JRy4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiNjYmQ1ZTF9PC9zdHlsZT4KPGRlZnM+PG1hcmtlciBpZD0iZ2NwYWgiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgc3R5bGU9ImZpbGw6IzY0NzQ4YiIvPjwvbWFya2VyPjwvZGVmcz4KPHRleHQgeD0iMjAiIHk9IjI0IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzY0NzQ4YjsgZmlsbDojNmVlN2I3Ij5HT09HTEUgQ0xPVUQgwrcgVEhSRUUgUkVTT1VSQ0VTPC90ZXh0Pgo8cmVjdCB4PSIyMCIgeT0iNTgiIHdpZHRoPSIxNzgiIGhlaWdodD0iMTA0IiByeD0iMTIiIHN0cm9rZS13aWR0aD0iMS40IiBzdHlsZT0iZmlsbDojMWUyOTNiO3N0cm9rZTojMDQ3ODU3Ii8+Cjx0ZXh0IHg9IjEwOSIgeT0iODYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNmVlN2I3OyBmb250LXNpemU6MTAuNXB4Ij5JbnN0YW5jZSB0ZW1wbGF0ZTwvdGV4dD4KPHRleHQgeD0iMTA5IiB5PSIxMDYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2ZWU3YjciPlNldHRpbmdzIGZvciBlYWNoIFZNPC90ZXh0Pgo8dGV4dCB4PSIxMDkiIHk9IjEyNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5NGEzYjg7IGZvbnQtc2l6ZTo5LjVweCI+bWFjaGluZSB0eXBlIMK3IGltYWdlPC90ZXh0Pgo8dGV4dCB4PSIxMDkiIHk9IjE0MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5NGEzYjg7IGZvbnQtc2l6ZTo5LjVweCI+ZGlzayDCtyBzdWJuZXQgwrcgaWRlbnRpdHk8L3RleHQ+CjxsaW5lIHgxPSIxOTgiIHkxPSIxMDQiIHgyPSIyNTAiIHkyPSIxMDQiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2djcGFoKSIgc3R5bGU9InN0cm9rZTojNjQ3NDhiIi8+Cjx0ZXh0IHg9IjIyNCIgeT0iOTYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjOTRhM2I4OyBmb250LXNpemU6OC41cHgiPnZlcnNpb248L3RleHQ+CjxyZWN0IHg9IjI1NCIgeT0iNDQiIHdpZHRoPSIzMjgiIGhlaWdodD0iMTQwIiByeD0iMTMiIHN0cm9rZS13aWR0aD0iMS43IiBzdHlsZT0iZmlsbDojMDY0ZTNiO3N0cm9rZTojNmVlN2I3Ii8+Cjx0ZXh0IHg9IjQxOCIgeT0iNzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNmVlN2I3OyBmb250LXNpemU6MTJweCI+UmVnaW9uYWwgTUlHPC90ZXh0Pgo8dGV4dCB4PSI0MTgiIHk9Ijg4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNmVlN2I3OyBmb250LXNpemU6OS41cHgiPkRlc2lyZWQgc2l6ZSDCtyB0aGUgcmVnaW9uJ3Mgem9uZXM8L3RleHQ+CjxyZWN0IHg9IjI2OCIgeT0iMTA0IiB3aWR0aD0iOTYiIGhlaWdodD0iNjIiIHJ4PSI4IiBzdHlsZT0iZmlsbDojMWUyOTNiO3N0cm9rZTojMDQ3ODU3Ii8+CjxyZWN0IHg9IjM3MCIgeT0iMTA0IiB3aWR0aD0iOTYiIGhlaWdodD0iNjIiIHJ4PSI4IiBzdHlsZT0iZmlsbDojMWUyOTNiO3N0cm9rZTojMDQ3ODU3Ii8+CjxyZWN0IHg9IjQ3MiIgeT0iMTA0IiB3aWR0aD0iOTYiIGhlaWdodD0iNjIiIHJ4PSI4IiBzdHlsZT0iZmlsbDojMWUyOTNiO3N0cm9rZTojMDQ3ODU3Ii8+Cjx0ZXh0IHg9IjMxNiIgeT0iMTMyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2YxZjVmOTsgZm9udC1zaXplOjEwLjVweCI+Vk08L3RleHQ+Cjx0ZXh0IHg9IjQxOCIgeT0iMTMyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2YxZjVmOTsgZm9udC1zaXplOjEwLjVweCI+Vk08L3RleHQ+Cjx0ZXh0IHg9IjUyMCIgeT0iMTMyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2YxZjVmOTsgZm9udC1zaXplOjEwLjVweCI+Vk08L3RleHQ+Cjx0ZXh0IHg9IjMxNiIgeT0iMTUwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzk0YTNiODsgZm9udC1zaXplOjkuNXB4Ij56b25lIGE8L3RleHQ+Cjx0ZXh0IHg9IjQxOCIgeT0iMTUwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzk0YTNiODsgZm9udC1zaXplOjkuNXB4Ij56b25lIGI8L3RleHQ+Cjx0ZXh0IHg9IjUyMCIgeT0iMTUwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzk0YTNiODsgZm9udC1zaXplOjkuNXB4Ij56b25lIGM8L3RleHQ+CjxsaW5lIHgxPSI2MjgiIHkxPSIxMDQiIHgyPSI1ODYiIHkyPSIxMDQiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2djcGFoKSIgc3R5bGU9InN0cm9rZTojNjQ3NDhiIi8+Cjx0ZXh0IHg9IjYwNyIgeT0iOTYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjOTRhM2I4OyBmb250LXNpemU6OC41cHgiPnJlc2l6ZXM8L3RleHQ+CjxyZWN0IHg9IjYzMiIgeT0iNTgiIHdpZHRoPSIxODQiIGhlaWdodD0iMTA0IiByeD0iMTIiIHN0cm9rZS13aWR0aD0iMS40IiBzdHlsZT0iZmlsbDojMWUyOTNiO3N0cm9rZTojMDQ3ODU3Ii8+Cjx0ZXh0IHg9IjcyNCIgeT0iODYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNmVlN2I3OyBmb250LXNpemU6MTAuNXB4Ij5BdXRvc2NhbGVyPC90ZXh0Pgo8dGV4dCB4PSI3MjQiIHk9IjEwNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzZlZTdiNyI+bWluIOKGlCBtYXggcmVwbGljYXM8L3RleHQ+Cjx0ZXh0IHg9IjcyNCIgeT0iMTI2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzk0YTNiODsgZm9udC1zaXplOjkuNXB4Ij5DUFUgdXRpbGl6YXRpb24gdGFyZ2V0PC90ZXh0Pgo8dGV4dCB4PSI3MjQiIHk9IjE0MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5NGEzYjg7IGZvbnQtc2l6ZTo5LjVweCI+b25seSB3aXRoIGEgQ1BVIHBvbGljeTwvdGV4dD4KPC9zdmc+)

Your Auto Scaling group becomes three Google Cloud resources: an instance template, a regional MIG and, for a CPU policy, an autoscaler.

#### The instance template

The launch settings, whether they come from a launch template, a launch configuration or a mixed-instances policy, become one `google_compute_instance_template`. It sets the machine type mapped from your instance type, the boot image, the boot disk size and type, the subnet, your tags as labels, and your user data in the instance metadata. When the instances have an IAM role, the template runs them as a service account. Each VM uses the supported fleet blueprint settings. GCP binds supported security groups natively, but launch-template data volumes and explicit root IOPS or throughput remain unsupported.

Instance templates are immutable. A change to the launch settings creates a new template, and the MIG switches to that version. The MIG is created without an explicit `update_policy`, so how and when existing VMs move to the new template follows Google Cloud's default update policy for the MIG.

![The Auto Scaling group's launch settings, from a launch template, a launch configuration or a mixed-instances policy, become one instance template with the machine type, boot image, disk, subnet and service account. The regional MIG creates every VM from a version of that template.](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTkwIiB2aWV3Qm94PSIwIDAgODM2IDE5MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJUaGUgQXV0byBTY2FsaW5nIGdyb3VwJ3MgbGF1bmNoIHNldHRpbmdzLCBmcm9tIGEgbGF1bmNoIHRlbXBsYXRlLCBhIGxhdW5jaCBjb25maWd1cmF0aW9uIG9yIGEgbWl4ZWQtaW5zdGFuY2VzIHBvbGljeSwgYmVjb21lIG9uZSBpbnN0YW5jZSB0ZW1wbGF0ZSB3aXRoIHRoZSBtYWNoaW5lIHR5cGUsIGJvb3QgaW1hZ2UsIGRpc2ssIHN1Ym5ldCBhbmQgc2VydmljZSBhY2NvdW50LiBUaGUgcmVnaW9uYWwgTUlHIGNyZWF0ZXMgZXZlcnkgVk0gZnJvbSBhIHZlcnNpb24gb2YgdGhhdCB0ZW1wbGF0ZS4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiMzMzQxNTV9PC9zdHlsZT4KPGRlZnM+PG1hcmtlciBpZD0iZ2NwYmxhaCIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNi41IiBtYXJrZXJIZWlnaHQ9IjYuNSIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgc3R5bGU9ImZpbGw6Izk0YTNiOCIvPjwvbWFya2VyPjwvZGVmcz4KPHRleHQgeD0iMjAiIHk9IjI0IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDojMDQ3ODU3Ij5MQVVOQ0ggU0VUVElOR1Mg4oaSIE9ORSBJTlNUQU5DRSBURU1QTEFURTwvdGV4dD4KPHJlY3QgeD0iMjAiIHk9IjQwIiB3aWR0aD0iMjA2IiBoZWlnaHQ9IjEzMiIgcng9IjEyIiBzdHJva2Utd2lkdGg9IjEuNCIgc3Ryb2tlLWRhc2hhcnJheT0iNSA1IiBzdHlsZT0iZmlsbDojZjhmYWZjO3N0cm9rZTojY2JkNWUxIi8+Cjx0ZXh0IHg9IjEyMyIgeT0iNjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiOyBmb250LXNpemU6MTBweCI+WW91ciBsYXVuY2ggc2V0dGluZ3M8L3RleHQ+CjxyZWN0IHg9IjM0IiB5PSI3NCIgd2lkdGg9IjE3OCIgaGVpZ2h0PSIyNiIgcng9IjciIHN0eWxlPSJmaWxsOiNmZmZmZmY7c3Ryb2tlOiNjYmQ1ZTEiLz4KPHRleHQgeD0iMTIzIiB5PSI5MSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICMzMzQxNTU7IGZvbnQtc2l6ZTo5LjVweCI+bGF1bmNoIHRlbXBsYXRlPC90ZXh0Pgo8cmVjdCB4PSIzNCIgeT0iMTA2IiB3aWR0aD0iMTc4IiBoZWlnaHQ9IjI2IiByeD0iNyIgc3R5bGU9ImZpbGw6I2ZmZmZmZjtzdHJva2U6I2NiZDVlMSIvPgo8dGV4dCB4PSIxMjMiIHk9IjEyMyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICMzMzQxNTU7IGZvbnQtc2l6ZTo5LjVweCI+bGF1bmNoIGNvbmZpZ3VyYXRpb248L3RleHQ+CjxyZWN0IHg9IjM0IiB5PSIxMzgiIHdpZHRoPSIxNzgiIGhlaWdodD0iMjYiIHJ4PSI3IiBzdHlsZT0iZmlsbDojZmZmZmZmO3N0cm9rZTojY2JkNWUxIi8+Cjx0ZXh0IHg9IjEyMyIgeT0iMTU1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzMzNDE1NTsgZm9udC1zaXplOjkuNXB4Ij5taXhlZC1pbnN0YW5jZXMgcG9saWN5PC90ZXh0Pgo8bGluZSB4MT0iMjI4IiB5MT0iMTA2IiB4Mj0iMjc0IiB5Mj0iMTA2IiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNnY3BibGFoKSIgc3R5bGU9InN0cm9rZTojOTRhM2I4Ii8+Cjx0ZXh0IHg9IjI1MSIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNjQ3NDhiOyBmb250LXNpemU6OC41cHgiPmJlY29tZXM8L3RleHQ+CjxyZWN0IHg9IjI3OCIgeT0iNDAiIHdpZHRoPSIzMDAiIGhlaWdodD0iMTMyIiByeD0iMTMiIHN0cm9rZS13aWR0aD0iMS43IiBzdHlsZT0iZmlsbDojZWNmZGY1O3N0cm9rZTojMDQ3ODU3Ii8+Cjx0ZXh0IHg9IjQyOCIgeT0iNjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTAuNXB4Ij5JbnN0YW5jZSB0ZW1wbGF0ZTwvdGV4dD4KPHRleHQgeD0iNDI4IiB5PSI4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NyI+Q2Fubm90IGJlIGVkaXRlZDwvdGV4dD4KPHJlY3QgeD0iMjkyIiB5PSI5NCIgd2lkdGg9IjI3MiIgaGVpZ2h0PSI2NiIgcng9IjgiIHN0eWxlPSJmaWxsOiNmZmZmZmY7c3Ryb2tlOiNhN2YzZDAiLz4KPHRleHQgeD0iNDI4IiB5PSIxMTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiOyBmb250LXNpemU6MTBweCI+bWFjaGluZSB0eXBlIMK3IGJvb3QgaW1hZ2U8L3RleHQ+Cjx0ZXh0IHg9IjQyOCIgeT0iMTMyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YjsgZm9udC1zaXplOjEwcHgiPmRpc2sgwrcgc3VibmV0IMK3IGxhYmVsczwvdGV4dD4KPHRleHQgeD0iNDI4IiB5PSIxNTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiOyBmb250LXNpemU6MTBweCI+c2VydmljZSBhY2NvdW50PC90ZXh0Pgo8bGluZSB4MT0iNTc4IiB5MT0iMTA2IiB4Mj0iNjI0IiB5Mj0iMTA2IiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNnY3BibGFoKSIgc3R5bGU9InN0cm9rZTojOTRhM2I4Ii8+Cjx0ZXh0IHg9IjYwMSIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNjQ3NDhiOyBmb250LXNpemU6OC41cHgiPnZlcnNpb248L3RleHQ+CjxyZWN0IHg9IjYyOCIgeT0iNTIiIHdpZHRoPSIxODgiIGhlaWdodD0iMTA4IiByeD0iMTIiIHN0cm9rZS13aWR0aD0iMS40IiBzdHlsZT0iZmlsbDojZmZmZmZmO3N0cm9rZTojYTdmM2QwIi8+Cjx0ZXh0IHg9IjcyMiIgeT0iODIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTAuNXB4Ij5SZWdpb25hbCBNSUc8L3RleHQ+Cjx0ZXh0IHg9IjcyMiIgeT0iMTAyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3Ij5DcmVhdGVzIGVhY2ggVk08L3RleHQ+Cjx0ZXh0IHg9IjcyMiIgeT0iMTIyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YjsgZm9udC1zaXplOjkuNXB4Ij5mcm9tIGEgdGVtcGxhdGUgdmVyc2lvbjwvdGV4dD4KPHRleHQgeD0iNzIyIiB5PSIxMzgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiOyBmb250LXNpemU6OS41cHgiPmEgZnVsbCBDb21wdXRlIEVuZ2luZSBWTTwvdGV4dD4KPC9zdmc+)

![The Auto Scaling group's launch settings, from a launch template, a launch configuration or a mixed-instances policy, become one instance template with the machine type, boot image, disk, subnet and service account. The regional MIG creates every VM from a version of that template.](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTkwIiB2aWV3Qm94PSIwIDAgODM2IDE5MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJUaGUgQXV0byBTY2FsaW5nIGdyb3VwJ3MgbGF1bmNoIHNldHRpbmdzLCBmcm9tIGEgbGF1bmNoIHRlbXBsYXRlLCBhIGxhdW5jaCBjb25maWd1cmF0aW9uIG9yIGEgbWl4ZWQtaW5zdGFuY2VzIHBvbGljeSwgYmVjb21lIG9uZSBpbnN0YW5jZSB0ZW1wbGF0ZSB3aXRoIHRoZSBtYWNoaW5lIHR5cGUsIGJvb3QgaW1hZ2UsIGRpc2ssIHN1Ym5ldCBhbmQgc2VydmljZSBhY2NvdW50LiBUaGUgcmVnaW9uYWwgTUlHIGNyZWF0ZXMgZXZlcnkgVk0gZnJvbSBhIHZlcnNpb24gb2YgdGhhdCB0ZW1wbGF0ZS4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiNjYmQ1ZTF9PC9zdHlsZT4KPGRlZnM+PG1hcmtlciBpZD0iZ2NwYmxhaCIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNi41IiBtYXJrZXJIZWlnaHQ9IjYuNSIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgc3R5bGU9ImZpbGw6IzY0NzQ4YiIvPjwvbWFya2VyPjwvZGVmcz4KPHRleHQgeD0iMjAiIHk9IjI0IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzY0NzQ4YjsgZmlsbDojNmVlN2I3Ij5MQVVOQ0ggU0VUVElOR1Mg4oaSIE9ORSBJTlNUQU5DRSBURU1QTEFURTwvdGV4dD4KPHJlY3QgeD0iMjAiIHk9IjQwIiB3aWR0aD0iMjA2IiBoZWlnaHQ9IjEzMiIgcng9IjEyIiBzdHJva2Utd2lkdGg9IjEuNCIgc3Ryb2tlLWRhc2hhcnJheT0iNSA1IiBzdHlsZT0iZmlsbDojMGYxNzJhO3N0cm9rZTojNDc1NTY5Ii8+Cjx0ZXh0IHg9IjEyMyIgeT0iNjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTRhM2I4OyBmb250LXNpemU6MTBweCI+WW91ciBsYXVuY2ggc2V0dGluZ3M8L3RleHQ+CjxyZWN0IHg9IjM0IiB5PSI3NCIgd2lkdGg9IjE3OCIgaGVpZ2h0PSIyNiIgcng9IjciIHN0eWxlPSJmaWxsOiMxZTI5M2I7c3Ryb2tlOiM0NzU1NjkiLz4KPHRleHQgeD0iMTIzIiB5PSI5MSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjYmQ1ZTE7IGZvbnQtc2l6ZTo5LjVweCI+bGF1bmNoIHRlbXBsYXRlPC90ZXh0Pgo8cmVjdCB4PSIzNCIgeT0iMTA2IiB3aWR0aD0iMTc4IiBoZWlnaHQ9IjI2IiByeD0iNyIgc3R5bGU9ImZpbGw6IzFlMjkzYjtzdHJva2U6IzQ3NTU2OSIvPgo8dGV4dCB4PSIxMjMiIHk9IjEyMyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjYmQ1ZTE7IGZvbnQtc2l6ZTo5LjVweCI+bGF1bmNoIGNvbmZpZ3VyYXRpb248L3RleHQ+CjxyZWN0IHg9IjM0IiB5PSIxMzgiIHdpZHRoPSIxNzgiIGhlaWdodD0iMjYiIHJ4PSI3IiBzdHlsZT0iZmlsbDojMWUyOTNiO3N0cm9rZTojNDc1NTY5Ii8+Cjx0ZXh0IHg9IjEyMyIgeT0iMTU1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2NiZDVlMTsgZm9udC1zaXplOjkuNXB4Ij5taXhlZC1pbnN0YW5jZXMgcG9saWN5PC90ZXh0Pgo8bGluZSB4MT0iMjI4IiB5MT0iMTA2IiB4Mj0iMjc0IiB5Mj0iMTA2IiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNnY3BibGFoKSIgc3R5bGU9InN0cm9rZTojNjQ3NDhiIi8+Cjx0ZXh0IHg9IjI1MSIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjOTRhM2I4OyBmb250LXNpemU6OC41cHgiPmJlY29tZXM8L3RleHQ+CjxyZWN0IHg9IjI3OCIgeT0iNDAiIHdpZHRoPSIzMDAiIGhlaWdodD0iMTMyIiByeD0iMTMiIHN0cm9rZS13aWR0aD0iMS43IiBzdHlsZT0iZmlsbDojMDY0ZTNiO3N0cm9rZTojNmVlN2I3Ii8+Cjx0ZXh0IHg9IjQyOCIgeT0iNjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNmVlN2I3OyBmb250LXNpemU6MTAuNXB4Ij5JbnN0YW5jZSB0ZW1wbGF0ZTwvdGV4dD4KPHRleHQgeD0iNDI4IiB5PSI4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzZlZTdiNyI+Q2Fubm90IGJlIGVkaXRlZDwvdGV4dD4KPHJlY3QgeD0iMjkyIiB5PSI5NCIgd2lkdGg9IjI3MiIgaGVpZ2h0PSI2NiIgcng9IjgiIHN0eWxlPSJmaWxsOiMxZTI5M2I7c3Ryb2tlOiMwNDc4NTciLz4KPHRleHQgeD0iNDI4IiB5PSIxMTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTRhM2I4OyBmb250LXNpemU6MTBweCI+bWFjaGluZSB0eXBlIMK3IGJvb3QgaW1hZ2U8L3RleHQ+Cjx0ZXh0IHg9IjQyOCIgeT0iMTMyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzk0YTNiODsgZm9udC1zaXplOjEwcHgiPmRpc2sgwrcgc3VibmV0IMK3IGxhYmVsczwvdGV4dD4KPHRleHQgeD0iNDI4IiB5PSIxNTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTRhM2I4OyBmb250LXNpemU6MTBweCI+c2VydmljZSBhY2NvdW50PC90ZXh0Pgo8bGluZSB4MT0iNTc4IiB5MT0iMTA2IiB4Mj0iNjI0IiB5Mj0iMTA2IiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNnY3BibGFoKSIgc3R5bGU9InN0cm9rZTojNjQ3NDhiIi8+Cjx0ZXh0IHg9IjYwMSIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjOTRhM2I4OyBmb250LXNpemU6OC41cHgiPnZlcnNpb248L3RleHQ+CjxyZWN0IHg9IjYyOCIgeT0iNTIiIHdpZHRoPSIxODgiIGhlaWdodD0iMTA4IiByeD0iMTIiIHN0cm9rZS13aWR0aD0iMS40IiBzdHlsZT0iZmlsbDojMWUyOTNiO3N0cm9rZTojMDQ3ODU3Ii8+Cjx0ZXh0IHg9IjcyMiIgeT0iODIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNmVlN2I3OyBmb250LXNpemU6MTAuNXB4Ij5SZWdpb25hbCBNSUc8L3RleHQ+Cjx0ZXh0IHg9IjcyMiIgeT0iMTAyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNmVlN2I3Ij5DcmVhdGVzIGVhY2ggVk08L3RleHQ+Cjx0ZXh0IHg9IjcyMiIgeT0iMTIyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzk0YTNiODsgZm9udC1zaXplOjkuNXB4Ij5mcm9tIGEgdGVtcGxhdGUgdmVyc2lvbjwvdGV4dD4KPHRleHQgeD0iNzIyIiB5PSIxMzgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTRhM2I4OyBmb250LXNpemU6OS41cHgiPmEgZnVsbCBDb21wdXRlIEVuZ2luZSBWTTwvdGV4dD4KPC9zdmc+)

Your launch settings become one instance template, and the MIG creates every VM from a version of it.

#### The regional autoscaler

Scaling is a separate `google_compute_region_autoscaler` that targets the MIG. It is created only when the group has a target-tracking policy on average CPU utilization (`ASGAverageCPUUtilization`). `min_size` and `max_size` become `min_replicas` and `max_replicas`, and your CPU target becomes the autoscaler's CPU utilization target. How often Google Cloud evaluates the metric, and how quickly it scales out and in, follow Google's autoscaler rather than AWS's. With `min_size` equal to `max_size`, the group stays at that size.

A group with only size bounds, or with a policy this mapping does not translate, gets no autoscaler and runs at its desired size. The policy's `target_value` must be a literal number; if it is computed, the build stops with an error naming the group.

![The autoscaler is a separate resource that targets the MIG. It holds the minimum and maximum replica counts and a CPU utilization target, and resizes the MIG between those bounds.](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTcyIiB2aWV3Qm94PSIwIDAgODM2IDE3MiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJUaGUgYXV0b3NjYWxlciBpcyBhIHNlcGFyYXRlIHJlc291cmNlIHRoYXQgdGFyZ2V0cyB0aGUgTUlHLiBJdCBob2xkcyB0aGUgbWluaW11bSBhbmQgbWF4aW11bSByZXBsaWNhIGNvdW50cyBhbmQgYSBDUFUgdXRpbGl6YXRpb24gdGFyZ2V0LCBhbmQgcmVzaXplcyB0aGUgTUlHIGJldHdlZW4gdGhvc2UgYm91bmRzLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6IzMzNDE1NX08L3N0eWxlPgo8ZGVmcz48bWFya2VyIGlkPSJnY3Bhc2FoIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI2LjUiIG1hcmtlckhlaWdodD0iNi41IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBzdHlsZT0iZmlsbDojOTRhM2I4Ii8+PC9tYXJrZXI+PC9kZWZzPgo8dGV4dCB4PSIyMCIgeT0iMjQiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiMwNDc4NTciPlNDQUxJTkcgSVMgQSBTRVBBUkFURSBBVVRPU0NBTEVSPC90ZXh0Pgo8cmVjdCB4PSIyMCIgeT0iNDIiIHdpZHRoPSIzMDAiIGhlaWdodD0iMTE4IiByeD0iMTMiIHN0cm9rZS13aWR0aD0iMS43IiBzdHlsZT0iZmlsbDojZWNmZGY1O3N0cm9rZTojMDQ3ODU3Ii8+Cjx0ZXh0IHg9IjE3MCIgeT0iNjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTFweCI+UmVnaW9uYWwgTUlHPC90ZXh0Pgo8dGV4dCB4PSIxNzAiIHk9Ijg2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3Ij5EZXNpcmVkIHNpemU8L3RleHQ+CjxyZWN0IHg9IjM0IiB5PSIxMDIiIHdpZHRoPSI4NiIgaGVpZ2h0PSI0NCIgcng9IjciIHN0eWxlPSJmaWxsOiNmZmZmZmY7c3Ryb2tlOiNhN2YzZDAiLz4KPHJlY3QgeD0iMTI3IiB5PSIxMDIiIHdpZHRoPSI4NiIgaGVpZ2h0PSI0NCIgcng9IjciIHN0eWxlPSJmaWxsOiNmZmZmZmY7c3Ryb2tlOiNhN2YzZDAiLz4KPHJlY3QgeD0iMjIwIiB5PSIxMDIiIHdpZHRoPSI4NiIgaGVpZ2h0PSI0NCIgcng9IjciIHN0eWxlPSJmaWxsOiNmZmZmZmY7c3Ryb2tlOiNhN2YzZDAiLz4KPHRleHQgeD0iNzciIHk9IjEyOSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZTo5LjVweCI+Vk08L3RleHQ+Cjx0ZXh0IHg9IjE3MCIgeT0iMTI5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjkuNXB4Ij5WTTwvdGV4dD4KPHRleHQgeD0iMjYzIiB5PSIxMjkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6OS41cHgiPlZNPC90ZXh0Pgo8bGluZSB4MT0iNTEyIiB5MT0iMTAxIiB4Mj0iMzI0IiB5Mj0iMTAxIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNnY3Bhc2FoKSIgc3R5bGU9InN0cm9rZTojOTRhM2I4Ii8+Cjx0ZXh0IHg9IjQxOCIgeT0iOTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNjQ3NDhiOyBmb250LXNpemU6OC41cHgiPnJlc2l6ZXM8L3RleHQ+CjxyZWN0IHg9IjUxNiIgeT0iNDIiIHdpZHRoPSIzMDAiIGhlaWdodD0iMTE4IiByeD0iMTIiIHN0cm9rZS13aWR0aD0iMS40IiBzdHlsZT0iZmlsbDojZmZmZmZmO3N0cm9rZTojYTdmM2QwIi8+Cjx0ZXh0IHg9IjY2NiIgeT0iNjYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTBweCI+QXV0b3NjYWxlcjwvdGV4dD4KPHRleHQgeD0iNjY2IiB5PSI4NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NyI+Q3JlYXRlZCBmb3IgYSBDUFUgcG9saWN5PC90ZXh0Pgo8dGV4dCB4PSI2NjYiIHk9IjEwNCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGI7IGZvbnQtc2l6ZTo5LjVweCI+bWluIOKGlCBtYXggcmVwbGljYXM8L3RleHQ+Cjx0ZXh0IHg9IjY2NiIgeT0iMTIyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YjsgZm9udC1zaXplOjkuNXB4Ij5DUFUgdXRpbGl6YXRpb24gdGFyZ2V0PC90ZXh0Pgo8dGV4dCB4PSI2NjYiIHk9IjE0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGI7IGZvbnQtc2l6ZTo5LjVweCI+R29vZ2xlIENsb3VkJ3MgdGltaW5nPC90ZXh0Pgo8L3N2Zz4=)

![The autoscaler is a separate resource that targets the MIG. It holds the minimum and maximum replica counts and a CPU utilization target, and resizes the MIG between those bounds.](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTcyIiB2aWV3Qm94PSIwIDAgODM2IDE3MiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJUaGUgYXV0b3NjYWxlciBpcyBhIHNlcGFyYXRlIHJlc291cmNlIHRoYXQgdGFyZ2V0cyB0aGUgTUlHLiBJdCBob2xkcyB0aGUgbWluaW11bSBhbmQgbWF4aW11bSByZXBsaWNhIGNvdW50cyBhbmQgYSBDUFUgdXRpbGl6YXRpb24gdGFyZ2V0LCBhbmQgcmVzaXplcyB0aGUgTUlHIGJldHdlZW4gdGhvc2UgYm91bmRzLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6I2NiZDVlMX08L3N0eWxlPgo8ZGVmcz48bWFya2VyIGlkPSJnY3Bhc2FoIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI2LjUiIG1hcmtlckhlaWdodD0iNi41IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBzdHlsZT0iZmlsbDojNjQ3NDhiIi8+PC9tYXJrZXI+PC9kZWZzPgo8dGV4dCB4PSIyMCIgeT0iMjQiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjNjQ3NDhiOyBmaWxsOiM2ZWU3YjciPlNDQUxJTkcgSVMgQSBTRVBBUkFURSBBVVRPU0NBTEVSPC90ZXh0Pgo8cmVjdCB4PSIyMCIgeT0iNDIiIHdpZHRoPSIzMDAiIGhlaWdodD0iMTE4IiByeD0iMTMiIHN0cm9rZS13aWR0aD0iMS43IiBzdHlsZT0iZmlsbDojMDY0ZTNiO3N0cm9rZTojNmVlN2I3Ii8+Cjx0ZXh0IHg9IjE3MCIgeT0iNjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNmVlN2I3OyBmb250LXNpemU6MTFweCI+UmVnaW9uYWwgTUlHPC90ZXh0Pgo8dGV4dCB4PSIxNzAiIHk9Ijg2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNmVlN2I3Ij5EZXNpcmVkIHNpemU8L3RleHQ+CjxyZWN0IHg9IjM0IiB5PSIxMDIiIHdpZHRoPSI4NiIgaGVpZ2h0PSI0NCIgcng9IjciIHN0eWxlPSJmaWxsOiMxZTI5M2I7c3Ryb2tlOiMwNDc4NTciLz4KPHJlY3QgeD0iMTI3IiB5PSIxMDIiIHdpZHRoPSI4NiIgaGVpZ2h0PSI0NCIgcng9IjciIHN0eWxlPSJmaWxsOiMxZTI5M2I7c3Ryb2tlOiMwNDc4NTciLz4KPHJlY3QgeD0iMjIwIiB5PSIxMDIiIHdpZHRoPSI4NiIgaGVpZ2h0PSI0NCIgcng9IjciIHN0eWxlPSJmaWxsOiMxZTI5M2I7c3Ryb2tlOiMwNDc4NTciLz4KPHRleHQgeD0iNzciIHk9IjEyOSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNmMWY1Zjk7IGZvbnQtc2l6ZTo5LjVweCI+Vk08L3RleHQ+Cjx0ZXh0IHg9IjE3MCIgeT0iMTI5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2YxZjVmOTsgZm9udC1zaXplOjkuNXB4Ij5WTTwvdGV4dD4KPHRleHQgeD0iMjYzIiB5PSIxMjkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjZjFmNWY5OyBmb250LXNpemU6OS41cHgiPlZNPC90ZXh0Pgo8bGluZSB4MT0iNTEyIiB5MT0iMTAxIiB4Mj0iMzI0IiB5Mj0iMTAxIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNnY3Bhc2FoKSIgc3R5bGU9InN0cm9rZTojNjQ3NDhiIi8+Cjx0ZXh0IHg9IjQxOCIgeT0iOTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjOTRhM2I4OyBmb250LXNpemU6OC41cHgiPnJlc2l6ZXM8L3RleHQ+CjxyZWN0IHg9IjUxNiIgeT0iNDIiIHdpZHRoPSIzMDAiIGhlaWdodD0iMTE4IiByeD0iMTIiIHN0cm9rZS13aWR0aD0iMS40IiBzdHlsZT0iZmlsbDojMWUyOTNiO3N0cm9rZTojMDQ3ODU3Ii8+Cjx0ZXh0IHg9IjY2NiIgeT0iNjYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNmVlN2I3OyBmb250LXNpemU6MTBweCI+QXV0b3NjYWxlcjwvdGV4dD4KPHRleHQgeD0iNjY2IiB5PSI4NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzZlZTdiNyI+Q3JlYXRlZCBmb3IgYSBDUFUgcG9saWN5PC90ZXh0Pgo8dGV4dCB4PSI2NjYiIHk9IjEwNCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5NGEzYjg7IGZvbnQtc2l6ZTo5LjVweCI+bWluIOKGlCBtYXggcmVwbGljYXM8L3RleHQ+Cjx0ZXh0IHg9IjY2NiIgeT0iMTIyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzk0YTNiODsgZm9udC1zaXplOjkuNXB4Ij5DUFUgdXRpbGl6YXRpb24gdGFyZ2V0PC90ZXh0Pgo8dGV4dCB4PSI2NjYiIHk9IjE0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5NGEzYjg7IGZvbnQtc2l6ZTo5LjVweCI+R29vZ2xlIENsb3VkJ3MgdGltaW5nPC90ZXh0Pgo8L3N2Zz4=)

The autoscaler is a separate resource: it holds the size bounds and the CPU target, and resizes the MIG.

#### Placement and health checks

Google Cloud subnets span every zone of a region, and a regional MIG uses one subnet. The VMs therefore join the first subnet in `vpc_zone_identifier`, and Google Cloud spreads them across the region's zones.

The MIG recreates a VM that stops or is deleted outside the group. No health check or autohealing policy is attached, though: the group's `health_check_type` and grace period are not kept, so a VM that keeps running but fails an application or load balancer health check is not replaced.

#### Limitations

Where Auto Scaling groups differ

* **Health-check replacement is not supported.** The MIG has no health check or autohealing policy, so a VM that is running but unhealthy stays in the group.
* **Scaling policies other than CPU target tracking are not supported.** A target-tracking policy on `ASGAverageCPUUtilization` becomes the autoscaler's CPU utilization target. Step and simple policies, and policies on other metrics, are not translated, and the group runs at its desired size.
* **Scheduled actions, lifecycle hooks and warm pools are not supported.** Scheduled actions, lifecycle hooks and notifications are removed with the group, and warm pools have no MIG equivalent. The AWS `StartInstanceRefresh` API is not supported either.
* **Spot and mixed instance types are not supported.** Every VM uses the one machine type mapped from the launch settings, with standard provisioning. A mixed-instances policy's instance types and on-demand/Spot split are not reproduced.
* **Explicit boot-volume IOPS or throughput is not supported.** If the launch settings set IOPS or throughput on the root volume, the build stops with an error, because a Compute Engine persistent boot disk cannot set them separately.
* **Launch-template data disks are not supported.** A launch template or launch configuration with non-root data volumes stops the build. Standalone-instance data-disk support does not extend to fleet replicas. Compiled replicas receive no EC2 metadata endpoint or AWS role credentials.
* **Changing the size through the AWS API at runtime is not supported.** `SetDesiredCapacity` and runtime scaling-policy changes are outside this mapping. Change size and bounds in your infrastructure code. Unsupported settings can be reported during the build; unsupported SDK requests return an error.
* **Groups that provide ECS or EKS capacity are not converted.** A group used by an ECS capacity provider, or whose user data joins its instances to ECS or EKS, does not become a MIG; it is handled as part of the ECS or EKS mapping.

#### Other considerations

* **Instances are replaced, not repaired.** The MIG recreates VMs rather than repairing them, so keep state that must survive on attached persistent disks or in object storage, not on the boot disk.
* **Google Cloud decides when to scale.** The build creates the MIG, its bounds and its CPU target. The autoscaler decides when to add or remove a VM, using Google Cloud's metrics and timing; Tensor9 does not resize the group at runtime.
* **Costs depend on the running instances.** VM charges follow the VMs actually running, including temporary replacement capacity, plus storage, networking and other target cloud charges. Desired-capacity bounds are not an enforced spending cap.

#### Fleet lifecycle and runtime management

A launch template or launch configuration describes each fleet member. The Auto Scaling group sets the desired, minimum and maximum counts, and scaling and health policies decide when members change. The fleet mapping creates the target cloud's instance template, group and autoscaler, rather than treating the template as a standalone VM.

Maximum adaptation supports DescribeAutoScalingGroups, DescribeAutoScalingInstances and DeleteAutoScalingGroup on the groups the adapter manages. Change desired capacity and scaling policies through the owning service's lifecycle configuration or infrastructure as code. When a higher-level service such as EKS owns the node pool itself, that service stays responsible for the pool: the Auto Scaling adapter reads and changes the Auto Scaling group without adding a second controller for the same node pool.

The describe calls report the adapter's managed groups and members. InService and Pending say whether a member's configuration has converged. HealthStatus is reported as Healthy; it does not report native probe results or show that the application is healthy. Check the owning service and the backend's health checks before relying on a member to take traffic. DeleteAutoScalingGroup records a deletion request. A group with nonzero desired capacity or members requires ForceDelete=true, and the instances are removed asynchronously through its owner. Rolling replacement, application health and zone distribution still depend on the selected backend.

#### Example monthly charges

This Tensor9 Cloud Adapter scenario estimates service charges for the named origin and target services. Adapter hosting and commercial Tensor9 fees need separate allocations. [How Tensor9 estimates costs](https://docs.tensor9.com/cloud-adapter-early-access/costs/overview.md) explains the method and what the estimates include.

##### Autoscaling fleet allocation (EC2 Auto Scaling) · Allocated fleet instance-hours per month

Feature: Autoscaling fleet allocation (EC2 Auto Scaling).

Estimated monthly service charges by Allocated fleet instance-hours per month. Adapter hosting and Tensor9 fees are excluded. Source: us-east-1; target: us-central1; currency: USD.

![Autoscaling fleet allocation (EC2 Auto Scaling) · Allocated fleet instance-hours per month: monthly service charges by Allocated fleet instance-hours per month. Exact values are in the following table.](https://docs.tensor9.com/images/cloud-adapter-early-access/diagrams/service-cost/470500e1f82be359dcbb6f9457319ea301262869f0b8ce4a19c5a9e42669ea86-light.svg)

![Autoscaling fleet allocation (EC2 Auto Scaling) · Allocated fleet instance-hours per month: monthly service charges by Allocated fleet instance-hours per month. Exact values are in the following table.](https://docs.tensor9.com/images/cloud-adapter-early-access/diagrams/service-cost/4b140d9e4b48d6edd9dd0dc2ed9e556a353d475bbbe24fae7330c028c9e882fa-dark.svg)

Comparison pills describe all sampled scale points; amounts beside each service are for the named workload. Costs The Same means within 20% at every point. Costs Depend includes mixed results and unpriced samples.

Sampled monthly charges in USD, rounded to cents. Difference means target minus origin; a positive difference means the target costs more.

| Allocated fleet instance-hours per month (instance-hour/month) | EC2 Auto Scaling | Managed Instance Group | Difference |
| -: | -: | -: | -: |
| 0 | 0.00 | 0.00 | 0.00 |
| 730 | 73.58 | 70.90 | -2.69 |
| 2,190 | 220.75 | 212.69 | -8.06 |
| 7,300 | 735.84 | 708.96 | -26.88 |
| 73,000 | 7,358.40 | 7,089.61 | -268.79 |
| 730,000 | 73,584.00 | 70,896.14 | -2,687.86 |

**Curve assumptions**

| Assumption | Value | Unit |
| - | -: | - |
| Origin list price · Fleet allocated instance hours | 0.1008 | USD/instance-hour |
| Origin list price · Fleet management requests | 0 | USD/Requests |
| Target vCPUs per fleet instance | 2 | vCPU |
| Target RAM per fleet instance | 8 | GiB |
| Target price guess · read | 0 | USD/read |
| Target price guess · write | 0 | USD/write |
| Target price guess · provider operation | 0 | USD/provider operation |
| Target list price · GiB-month | 0.1 | USD/GiB-month |
| Target price guess · published GiB | 0 | USD/published GiB |
| Target price guess · delivered GiB | 0 | USD/delivered GiB |
| Target list price · network GiB | 0.12 | USD/network GiB |
| Target price guess · replica GiB-month | 0 | USD/replica GiB-month |
| Target list price · vCPU-hour | 0.031611 | USD/vCPU-hour |
| Target list price · GiB-hour | 0.004237 | USD/GiB-hour |
| Target price guess · resource-hour | 0 | USD/resource-hour |
| Target price guess · resource-month | 0 | USD/resource-month |
| Target price guess · input token | 0 | USD/input token |
| Target price guess · output token | 0 | USD/output token |
| Target monthly base charge | 0 | USD/month |
| Approximate target service minimum | 0 | USD/month |
| Minimum primary CPU | 2 | vCPU |
| Minimum primary RAM | 8 | GiB |
| Minimum primary disk | 100 | GiB |
| Additional full-price standby copy | 0 | 0 or 1 |
| Allocated share of provisioned cost | 1 | fraction |
| Read/write work per vCPU-second | 1,500 | operations/vCPU-second |
| Planning peak / mean work | 2 | multiplier |
| Planning primary CPU utilization | 0.7 | fraction |
| Resident state reserved in RAM | 0.1 | fraction |
| Planning disk utilization | 0.8 | fraction |
| Maintenance and log disk reserve | 20 | GiB |
| Staging database CPU unit-price guess | 0.0413 | USD/vCPU-hour |
| Staging database RAM unit-price guess | 0.007 | USD/GiB-hour |
| Staging database disk unit-price guess | 0.17 | USD/GiB-month |
| Dependent object sink storage price guess | 0.023 | USD/GiB-month |
| Dependent object sink write price guess | 0.000005 | USD/write |

* Only this native meter varies; all other source usage and translation assumptions retain the displayed defaults. Other native meters and workload assumptions retain their explicitly displayed default quantities. Workload translation and capacity assumptions are not benchmark measurements.
* Native monthly usage priced at the cited provider list prices; listed target allowances apply where present, excluding invoice credits, taxes and negotiated discounts. Rates as of 2026-10-22: us-east-1 → us-central1, USD/month.
* Source prices are reference charges, not an invoice. Target lines cover selected service usage/configuration only; adapter hosting and Tensor9 fees are excluded.
* Samples of explicit prices are not performance measurements or capacity qualification. No interpolation or break-even guarantee is implied.
* Variant assumptions show the first axis sample; any axis-dependent configuration is described by this curve's workload note.
* Rates are cited provider list prices, editable for discounts, commitments or another region. Workload translation and capacity coefficients remain editable planning assumptions, not benchmark measurements or a commercial quote.
* Default-zero rates are explicit assumptions, not evidence that the deployed service or resource is free.
* Provisioned-unit minimums use an editable approximate allocation floor. Modeled target service cost is max(usage/allocation, minimum), with billable network, durable staging and dependent sinks added separately; actual RU/TU sizing, scaling increments and throughput remain unqualified.
* Durable staging is priced once: provisioned targets include adapter state in their selected allocation; native targets add a separate staging allocation when required. Adapter hosting is a separate allocation and must exclude resources already priced as staging, workers or target capacity.
* A declared adapter mapping and cost model do not establish implementation availability or service equivalence.
* This is a declared directed mapping; a planning estimate does not establish deployment or request-serving support.
* Origin unit prices are cited provider list prices; capacity coefficients and translation assumptions are editable authored planning guesses, not measured capacity or a provider quote.
* Management requests do not reveal resource allocation or workload traffic. Provisioned resources and traffic are independent inputs.
* This native fleet resource comparison is separate from the Auto Scaling runtime discovery adapter and its supported operations.
* Instance-hours are priced exactly once as CPU and RAM allocation; management requests add no assumed fleet instances.
* Fleet orchestration is not billed separately: member instance CPU and memory hours bill at the instance rates. Management API counts never create VM-hours. Google: N2 predefined vCPU and memory (E2 lists 0.02181159 and 0.00292353); pd-balanced disk; Premium Tier egress.
* AWS Price List API, AmazonEC2 offer (CSV): [https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AmazonEC2/current/us-east-1/index.csv](https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AmazonEC2/current/us-east-1/index.csv)
* Amazon EC2 Auto Scaling pricing: [https://aws.amazon.com/ec2/autoscaling/pricing/](https://aws.amazon.com/ec2/autoscaling/pricing/)
* Compute Engine general-purpose machine pricing: [https://cloud.google.com/products/compute/pricing/general-purpose](https://cloud.google.com/products/compute/pricing/general-purpose)
* Disk and image pricing: [https://cloud.google.com/compute/disks-image-pricing](https://cloud.google.com/compute/disks-image-pricing)
* Network pricing: [https://cloud.google.com/vpc/network-pricing](https://cloud.google.com/vpc/network-pricing)

Cost scope: Modeled target native service and explicitly modeled state allocation; hosting and Tensor9 fees only when supplied.

Excluded costs and workload features:

* Instance disks, traffic, licenses, load balancers, spare replacement instances and metric collection.
* Taxes, discounts, credits and free-tier allowances not explicitly listed by this model.
* Unmodeled dependent services, task execution and operations outside the selected workload family.

List prices read: 2026-10-22. Model: `plan-b9670e638465fc9e05fb9206b711b51ee8d7611e` / `2026-10-22.planning.2`. Curve: `workload-1`.

Sources: [AWS Price List API, AmazonEC2 offer (CSV)](https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AmazonEC2/current/us-east-1/index.csv), [Amazon EC2 Auto Scaling pricing](https://aws.amazon.com/ec2/autoscaling/pricing/), [Compute Engine general-purpose machine pricing](https://cloud.google.com/products/compute/pricing/general-purpose), [Disk and image pricing](https://cloud.google.com/compute/disks-image-pricing), [Network pricing](https://cloud.google.com/vpc/network-pricing).

**Autoscaling fleet allocation (EC2 Auto Scaling) → Managed Instance Group: Authored native-usage planning example.** Native monthly usage priced at the cited provider list prices; listed target allowances apply where present, excluding invoice credits, taxes and negotiated discounts.

Scenario source region: us-east-1. Scenario target region: us-central1. Currency: USD.

| Monthly component | USD |
| - | -: |
| Origin: Fleet allocated instance hours | 220.75 |
| Origin: Fleet management requests | 0.00 |
| Target: Target retained physical data | 0.00 |
| Target: Additional broker replica storage | 0.00 |
| Target: Target native provider operations | 0.00 |
| Target: Execution or worker CPU | 138.46 |
| Target: Execution or worker RAM | 74.23 |
| Target: Selected billable network | 0.00 |
| Target: Independent native resources | 0.00 |
| Target: Independent native resources | 0.00 |
| **Origin service subtotal** | **220.75** |
| **Target service subtotal** | **212.69** |

Unestimated components: Adapter hosting, Tensor9 fees. A modeled adapted total and savings require these costs.

Cost scope: Modeled target native service and explicitly modeled state allocation; hosting and Tensor9 fees only when supplied.

Excluded costs and workload features:

* Instance disks, traffic, licenses, load balancers, spare replacement instances and metric collection.
* Taxes, discounts, credits and free-tier allowances not explicitly listed by this model.
* Unmodeled dependent services, task execution and operations outside the selected workload family.

**Scenario assumptions**

| Input | Value | Unit |
| - | -: | - |
| Origin list price · Fleet allocated instance hours | 0.1008 | USD/instance-hour |
| Origin list price · Fleet management requests | 0 | USD/Requests |
| Target vCPUs per fleet instance | 2 | vCPU |
| Target RAM per fleet instance | 8 | GiB |
| Target price guess · read | 0 | USD/read |
| Target price guess · write | 0 | USD/write |
| Target price guess · provider operation | 0 | USD/provider operation |
| Target list price · GiB-month | 0.1 | USD/GiB-month |
| Target price guess · published GiB | 0 | USD/published GiB |
| Target price guess · delivered GiB | 0 | USD/delivered GiB |
| Target list price · network GiB | 0.12 | USD/network GiB |
| Target price guess · replica GiB-month | 0 | USD/replica GiB-month |
| Target list price · vCPU-hour | 0.031611 | USD/vCPU-hour |
| Target list price · GiB-hour | 0.004237 | USD/GiB-hour |
| Target price guess · resource-hour | 0 | USD/resource-hour |
| Target price guess · resource-month | 0 | USD/resource-month |
| Target price guess · input token | 0 | USD/input token |
| Target price guess · output token | 0 | USD/output token |
| Target monthly base charge | 0 | USD/month |
| Approximate target service minimum | 0 | USD/month |
| Minimum primary CPU | 2 | vCPU |
| Minimum primary RAM | 8 | GiB |
| Minimum primary disk | 100 | GiB |
| Additional full-price standby copy | 0 | 0 or 1 |
| Allocated share of provisioned cost | 1 | fraction |
| Read/write work per vCPU-second | 1,500 | operations/vCPU-second |
| Planning peak / mean work | 2 | multiplier |
| Planning primary CPU utilization | 0.7 | fraction |
| Resident state reserved in RAM | 0.1 | fraction |
| Planning disk utilization | 0.8 | fraction |
| Maintenance and log disk reserve | 20 | GiB |
| Staging database CPU unit-price guess | 0.0413 | USD/vCPU-hour |
| Staging database RAM unit-price guess | 0.007 | USD/GiB-hour |
| Staging database disk unit-price guess | 0.17 | USD/GiB-month |
| Dependent object sink storage price guess | 0.023 | USD/GiB-month |
| Dependent object sink write price guess | 0.000005 | USD/write |
| Fleet allocated instance hours | 2,190 | instance-hour |
| Fleet management requests | 1,000,000 | Requests |

* Translated reads: 0 operations.

* Translated writes: 0 operations.

* Translated resident physical data: 0 GiB-month.

* Native provider operations: 1,000,000 operations.

* Published payload: 0 GiB.

* Delivered payload: 0 GiB.

* Allocated execution CPU: 4,380 vCPU-hour.

* Allocated execution RAM: 17,520 GiB-hour.

* Independent resource allocation: 0 resource-hour.

* Independent inventory: 0 resource-month.

* Input tokens: 0 tokens.

* Output tokens: 0 tokens.

* Billable network: 0 GiB.

* Dependent object sink retained data: 0 GiB-month.

* Dependent object sink writes: 0 writes.

* Rates are cited provider list prices, editable for discounts, commitments or another region. Workload translation and capacity coefficients remain editable planning assumptions, not benchmark measurements or a commercial quote.

* Default-zero rates are explicit assumptions, not evidence that the deployed service or resource is free.

* Provisioned-unit minimums use an editable approximate allocation floor. Modeled target service cost is max(usage/allocation, minimum), with billable network, durable staging and dependent sinks added separately; actual RU/TU sizing, scaling increments and throughput remain unqualified.

* Durable staging is priced once: provisioned targets include adapter state in their selected allocation; native targets add a separate staging allocation when required. Adapter hosting is a separate allocation and must exclude resources already priced as staging, workers or target capacity.

* A declared adapter mapping and cost model do not establish implementation availability or service equivalence.

* This is a declared directed mapping; a planning estimate does not establish deployment or request-serving support.

* Origin unit prices are cited provider list prices; capacity coefficients and translation assumptions are editable authored planning guesses, not measured capacity or a provider quote.

* Management requests do not reveal resource allocation or workload traffic. Provisioned resources and traffic are independent inputs.

* This native fleet resource comparison is separate from the Auto Scaling runtime discovery adapter and its supported operations.

* Instance-hours are priced exactly once as CPU and RAM allocation; management requests add no assumed fleet instances.

* Fleet orchestration is not billed separately: member instance CPU and memory hours bill at the instance rates. Management API counts never create VM-hours. Google: N2 predefined vCPU and memory (E2 lists 0.02181159 and 0.00292353); pd-balanced disk; Premium Tier egress.

List prices read: 2026-10-22. Model: `plan-b9670e638465fc9e05fb9206b711b51ee8d7611e` / `2026-10-22.planning.2`. Scenario: `planning-example`.

Sources: [AWS Price List API, AmazonEC2 offer (CSV)](https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AmazonEC2/current/us-east-1/index.csv), [Amazon EC2 Auto Scaling pricing](https://aws.amazon.com/ec2/autoscaling/pricing/), [Compute Engine general-purpose machine pricing](https://cloud.google.com/products/compute/pricing/general-purpose), [Disk and image pricing](https://cloud.google.com/compute/disks-image-pricing), [Network pricing](https://cloud.google.com/vpc/network-pricing).

## Costs

Estimated monthly service charges for each backend with a published cost model, at one sampled workload from that model's cost curve. Adapter hosting and Tensor9 fees are excluded. [How Tensor9 estimates costs](https://docs.tensor9.com/cloud-adapter-early-access/costs/overview.md) explains the method, what the estimates include and how to read their qualifications.

| Backend | Sampled workload | Price basis | Origin USD/month | Backend USD/month | Difference | Mapping |
| - | - | - | -: | -: | -: | - |
| Managed Instance Group | Allocated fleet instance-hours per month: 7,300 instance-hour/month | Cited list prices, 2026-10-22 | 735.84 | 708.96 | -26.88 | Service adapter |
| Virtual Machine Scale Sets | Allocated fleet instance-hours per month: 7,300 instance-hour/month | Cited list prices, 2026-10-22 | 735.84 | 700.80 | -35.04 | Service adapter |

Difference means backend minus origin; a positive difference means the backend costs more. Workloads and target configurations differ by model, so compare each row's difference at its stated workload rather than charges across rows.
Cost curves across workload sizes, with every assumption and exclusion: [EC2 Auto Scaling costs](https://docs.tensor9.com/cloud-adapter-early-access/costs/additional-services/aws-autoscaling-group).

## Service level agreements

> [!WARNING]
>
> These tables show Tensor9's standard service levels and adapters whose standard terms are still being defined. Your signed agreement determines the SLAs, covered adapters and operations, limits, remedies and support terms that apply to your deployment.

Listed terms cover requests sent through this service adapter. They do not cover direct connections to the target service or replace the cloud provider's own SLA. Each origin-to-target pair has its own terms or an explicit pending status.

See the [SLA tables](https://docs.tensor9.com/cloud-adapter-early-access/support/service-adapter-slas.md), [measurement rules](https://docs.tensor9.com/cloud-adapter-early-access/support/service-levels.md), and [scaling conditions](https://docs.tensor9.com/cloud-adapter-early-access/support/scaling-and-limits.md).

### EC2 Auto Scaling to Virtual Machine Scale Sets

| SLA | Service level | What is covered | Conditions |
| - | - | - | - |
| Fleet configuration and identity reads adapter-added latency | +5 ms monthly p99 | `aws::1.0.0::autoscaling`: `DescribeAutoScalingGroups`, `DescribeLaunchConfigurations` | One fleet; at most 20 zones/templates and at most 100 instances in returned status. |
| Fleet and scaling-policy mutation adapter-added latency | +20 ms monthly p99 | `aws::1.0.0::autoscaling`: `CreateAutoScalingGroup`, `PutScalingPolicy`, `SetDesiredCapacity`, `UpdateAutoScalingGroup` | One fleet and at most 20 policies/hooks; instance readiness separate. |
| Documented adapter behavior | Preserve the supported behavior documented for this adapter | `aws::1.0.0::autoscaling`: `DescribeAutoScalingGroups`, `DescribeLaunchConfigurations`, `CreateAutoScalingGroup`, `PutScalingPolicy`, `SetDesiredCapacity`, `UpdateAutoScalingGroup` | Minimum, maximum and desired capacity remain ordered and bounded. A successful mutation is durable, stale reconciliation cannot overwrite a newer generation, and target policy translation cannot silently change the metric or threshold. Replacement and drain preserve the declared availability policy. |
| Endpoint reachability | 99.9% per calendar month | Adapter endpoint reachability | The agreed production deployment has healthy target connectivity and receives a valid adapter health probe. This measures the adapter endpoint, not the target provider's service. |
| Adapter autoscaling and limits | Automatic scaling within the workload and deployment limits in your agreement | Adapter behavior across requests | Your agreement states the maximum request rate, burst size, request and response sizes, concurrency, and target calls per request. Tensor9 maintains adapter capacity inside that envelope. Target-service quotas and capacity are separate. |

**Adapter-added latency.** A + prefix marks time added by the adapter, not the total time your application waits. Total request time includes adapter processing, backend service time and network time. The backend provider's SLA applies independently. Only separately measured target-service wait may be subtracted, and only when your agreement permits it; internal metadata, coordination and retry processing still count. For one request, 12 ms of adapter processing plus 90 ms waiting for the backend means at least 102 ms total. This example does not add monthly p99 values.

**What Tensor9 covers.** These service levels cover the adapter between the origin API and target API. They do not replace the target provider's SLA.

**How latency is counted.** Adapter work, including metadata and coordination, counts. Only separately measured permitted target waits are excluded.

**Which terms apply.** Your signed agreement names the covered operations, workload limits, remedies, and final service levels for your deployment.

#### What this adapter does

The adapter validates fleet bounds and scaling policy, records desired capacity and reconciles native fleet resources on azure::1.0.0::vmss. Instance boot and provider autoscaler convergence are readiness behavior, while policy translation, durable admission, status collection and response conversion are adapter work.

#### How the latency targets were chosen

**Fleet configuration and identity reads: +5 ms monthly p99 (adapter-added).** `DescribeAutoScalingGroups`, `DescribeLaunchConfigurations`. Bounded desired and observed status lookup.

**Fleet and scaling-policy mutation: +20 ms monthly p99 (adapter-added).** `CreateAutoScalingGroup`, `PutScalingPolicy`, `SetDesiredCapacity`, `UpdateAutoScalingGroup`. Validation, durable generation commit and reconciliation scheduling.

Your signed agreement sets the terms for your deployment. A target does not add an operation or option that the compatibility tables mark unavailable.

#### What counts toward latency

For a request-response row, measure from the agreed ingress boundary to dispatch of the complete response. A row that explicitly names a first response chunk ends at that chunk; its number does not cover the rest of the stream. A long-poll row names the intentional wait and when adapter delay starts. Include parsing, authorization, admission, translation, serialization, adapter-owned storage and coordination, retries and response handling. Subtract only separately measured target-workload waits and external network segments allowed by the measurement rules. The adapter's own response handling and dispatch remain covered. A database used for adapter metadata is still adapter work, even if a cloud provider hosts it.

For concurrent calls, exclude the union of permitted wait intervals, not the sum of overlapping spans. Calculate each request's adapter duration first, then the monthly p99. Do not subtract one service's p99 from another's. Known adapter timeouts are over-budget samples; failed or incomplete requests cannot disappear to improve the percentile. Missing measurements do not become zero latency. An SDK call span alone does not prove how much of its duration can be excluded.

#### Endpoint reachability and request failures

The endpoint-reachability target measures adapter health checks. Correctly forwarding a target quota or permission error is different from producing that error because the adapter sent the wrong request. Adapter-caused failures remain Tensor9's responsibility even when the target is healthy.

Correctness and data-integrity requirements apply to every supported request. Endpoint reachability does not measure request correctness or grant an allowance for incorrect results.

#### Scaling and target-service capacity

Control traffic scales by fleet, not by instance count alone. Reconciliation for one fleet is generation ordered; independent fleets proceed concurrently. Qualification fixes fleet size, zone count, policy count, tag/template size and concurrent scaling events, including a burst that changes desired capacity repeatedly.

Tell Tensor9 the expected steady rate, bursts, concurrency, payload sizes and operation mix. Tensor9 sizes and scales the adapter for the agreed load; you choose and monitor the target service's capacity with Tensor9's help. A latency budget is not a requests-per-second rating. Larger requests and higher rates need explicit terms, not silent inheritance of a small-request SLA.

#### Data and behavior guarantees

Minimum, maximum and desired capacity remain ordered and bounded. A successful mutation is durable, stale reconciliation cannot overwrite a newer generation, and target policy translation cannot silently change the metric or threshold. Replacement and drain preserve the declared availability policy.

#### Example and diagnosis

SetDesiredCapacity from 10 to 20 records generation N+1 within the mutation target. Creating ten instances is provider/fleet convergence, reported separately. Describe-style status must retain the requested generation and cannot claim capacity 20 until observed instances satisfy readiness.

Use `tensor9 explain` and the documented explain headers to understand the selected adapter and its behavior. Correlate available request diagnostics with the target provider's latency, throttling and capacity metrics. An explain report helps diagnose a request; it is not by itself a qualified SLA timing measurement. Share the operation, request shape, timestamps and request identifiers with support, with credentials and customer payloads removed.

### EC2 Auto Scaling to Managed Instance Group

| SLA | Service level | What is covered | Conditions |
| - | - | - | - |
| Fleet configuration and identity reads adapter-added latency | +5 ms monthly p99 | `aws::1.0.0::autoscaling`: `DescribeAutoScalingGroups`, `DescribeAutoScalingInstances`, `DescribeLaunchConfigurations` | One fleet; at most 20 zones/templates and at most 100 instances in returned status. |
| Fleet and scaling-policy mutation adapter-added latency | +20 ms monthly p99 | `aws::1.0.0::autoscaling`: `CreateAutoScalingGroup`, `PutScalingPolicy`, `SetDesiredCapacity`, `UpdateAutoScalingGroup` | One fleet and at most 20 policies/hooks; instance readiness separate. |
| Documented adapter behavior | Preserve the supported behavior documented for this adapter | `aws::1.0.0::autoscaling`: `DescribeAutoScalingGroups`, `DescribeAutoScalingInstances`, `DescribeLaunchConfigurations`, `CreateAutoScalingGroup`, `PutScalingPolicy`, `SetDesiredCapacity`, `UpdateAutoScalingGroup` | Minimum, maximum and desired capacity remain ordered and bounded. A successful mutation is durable, stale reconciliation cannot overwrite a newer generation, and target policy translation cannot silently change the metric or threshold. Replacement and drain preserve the declared availability policy. |
| Endpoint reachability | 99.9% per calendar month | Adapter endpoint reachability | The agreed production deployment has healthy target connectivity and receives a valid adapter health probe. This measures the adapter endpoint, not the target provider's service. |
| Adapter autoscaling and limits | Automatic scaling within the workload and deployment limits in your agreement | Adapter behavior across requests | Your agreement states the maximum request rate, burst size, request and response sizes, concurrency, and target calls per request. Tensor9 maintains adapter capacity inside that envelope. Target-service quotas and capacity are separate. |

**Adapter-added latency.** A + prefix marks time added by the adapter, not the total time your application waits. Total request time includes adapter processing, backend service time and network time. The backend provider's SLA applies independently. Only separately measured target-service wait may be subtracted, and only when your agreement permits it; internal metadata, coordination and retry processing still count. For one request, 12 ms of adapter processing plus 90 ms waiting for the backend means at least 102 ms total. This example does not add monthly p99 values.

**What Tensor9 covers.** These service levels cover the adapter between the origin API and target API. They do not replace the target provider's SLA.

**How latency is counted.** Adapter work, including metadata and coordination, counts. Only separately measured permitted target waits are excluded.

**Which terms apply.** Your signed agreement names the covered operations, workload limits, remedies, and final service levels for your deployment.

#### What this adapter does

The adapter validates fleet bounds and scaling policy, records desired capacity and reconciles native fleet resources on google::1.0.0::compute::instance-group-manager. Instance boot and provider autoscaler convergence are readiness behavior, while policy translation, durable admission, status collection and response conversion are adapter work.

#### How the latency targets were chosen

**Fleet configuration and identity reads: +5 ms monthly p99 (adapter-added).** `DescribeAutoScalingGroups`, `DescribeAutoScalingInstances`, `DescribeLaunchConfigurations`. Bounded desired and observed status lookup.

**Fleet and scaling-policy mutation: +20 ms monthly p99 (adapter-added).** `CreateAutoScalingGroup`, `PutScalingPolicy`, `SetDesiredCapacity`, `UpdateAutoScalingGroup`. Validation, durable generation commit and reconciliation scheduling.

Your signed agreement sets the terms for your deployment. A target does not add an operation or option that the compatibility tables mark unavailable.

#### What counts toward latency

For a request-response row, measure from the agreed ingress boundary to dispatch of the complete response. A row that explicitly names a first response chunk ends at that chunk; its number does not cover the rest of the stream. A long-poll row names the intentional wait and when adapter delay starts. Include parsing, authorization, admission, translation, serialization, adapter-owned storage and coordination, retries and response handling. Subtract only separately measured target-workload waits and external network segments allowed by the measurement rules. The adapter's own response handling and dispatch remain covered. A database used for adapter metadata is still adapter work, even if a cloud provider hosts it.

For concurrent calls, exclude the union of permitted wait intervals, not the sum of overlapping spans. Calculate each request's adapter duration first, then the monthly p99. Do not subtract one service's p99 from another's. Known adapter timeouts are over-budget samples; failed or incomplete requests cannot disappear to improve the percentile. Missing measurements do not become zero latency. An SDK call span alone does not prove how much of its duration can be excluded.

#### Endpoint reachability and request failures

The endpoint-reachability target measures adapter health checks. Correctly forwarding a target quota or permission error is different from producing that error because the adapter sent the wrong request. Adapter-caused failures remain Tensor9's responsibility even when the target is healthy.

Correctness and data-integrity requirements apply to every supported request. Endpoint reachability does not measure request correctness or grant an allowance for incorrect results.

#### Scaling and target-service capacity

Control traffic scales by fleet, not by instance count alone. Reconciliation for one fleet is generation ordered; independent fleets proceed concurrently. Qualification fixes fleet size, zone count, policy count, tag/template size and concurrent scaling events, including a burst that changes desired capacity repeatedly.

Tell Tensor9 the expected steady rate, bursts, concurrency, payload sizes and operation mix. Tensor9 sizes and scales the adapter for the agreed load; you choose and monitor the target service's capacity with Tensor9's help. A latency budget is not a requests-per-second rating. Larger requests and higher rates need explicit terms, not silent inheritance of a small-request SLA.

#### Data and behavior guarantees

Minimum, maximum and desired capacity remain ordered and bounded. A successful mutation is durable, stale reconciliation cannot overwrite a newer generation, and target policy translation cannot silently change the metric or threshold. Replacement and drain preserve the declared availability policy.

#### Example and diagnosis

SetDesiredCapacity from 10 to 20 records generation N+1 within the mutation target. Creating ten instances is provider/fleet convergence, reported separately. Describe-style status must retain the requested generation and cannot claim capacity 20 until observed instances satisfy readiness.

Use `tensor9 explain` and the documented explain headers to understand the selected adapter and its behavior. Correlate available request diagnostics with the target provider's latency, throttling and capacity metrics. An explain report helps diagnose a request; it is not by itself a qualified SLA timing measurement. Share the operation, request shape, timestamps and request identifiers with support, with credentials and customer payloads removed.

## Install and run

The documentation and SLAs are public. Downloading and running the Cloud Adapter binary requires an entitled customer account. Set `T9_API_KEY` as described in [Install and Authenticate](https://docs.tensor9.com/cloud-adapter-early-access/getting-started/install-and-authenticate.md), then list the adapters your account may use with this origin:

```sh theme={null}
tensor9 adapt svc list \
  -origin aws::1.0.0::autoscaling::group
```

The result is limited to directed mappings for this origin that your account is entitled to use. Use a returned backend identifier when configuring the adapter or investigating a request.

Request binary access from [hello@tensor9.com](mailto:hello@tensor9.com) if your account does not yet include this direction.

## Existing data and credentials

Selecting a backend does not copy existing data, credentials or access policies. Plan and verify migration separately before changing an application's endpoint. Do not assume an identifier, credential or encrypted value from the origin service works unchanged on the target.

## Configure, tune and debug

Start with [setup](https://docs.tensor9.com/cloud-adapter-early-access/getting-started/overview.md) and [configuration](https://docs.tensor9.com/cloud-adapter-early-access/configuration/overview.md). Use [tuning](https://docs.tensor9.com/cloud-adapter-early-access/tuning/overview.md) to understand supported request tags, [debugging](https://docs.tensor9.com/cloud-adapter-early-access/debugging/overview.md) to investigate a request, and [High Fidelity Cloud Emulators](https://docs.tensor9.com/cloud-adapter-early-access/local-testing/overview.md) to validate a bounded reproduction.

For requests that go through an entitled service adapter, use [tensor9 explain](https://docs.tensor9.com/cloud-adapter-early-access/debugging/explain.md) and [x-t9-explain](https://docs.tensor9.com/cloud-adapter-early-access/debugging/response-headers.md) to inspect the selected mapping.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.