All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.pulumi.alicloud.ess.kotlin.ScalingGroupArgs.kt Maven / Gradle / Ivy

Go to download

Build cloud applications and infrastructure by combining the safety and reliability of infrastructure as code with the power of the Kotlin programming language.

There is a newer version: 3.62.0.0
Show newest version
@file:Suppress("NAME_SHADOWING", "DEPRECATION")

package com.pulumi.alicloud.ess.kotlin

import com.pulumi.alicloud.ess.ScalingGroupArgs.builder
import com.pulumi.alicloud.ess.kotlin.inputs.ScalingGroupAlbServerGroupArgs
import com.pulumi.alicloud.ess.kotlin.inputs.ScalingGroupAlbServerGroupArgsBuilder
import com.pulumi.alicloud.ess.kotlin.inputs.ScalingGroupLaunchTemplateOverrideArgs
import com.pulumi.alicloud.ess.kotlin.inputs.ScalingGroupLaunchTemplateOverrideArgsBuilder
import com.pulumi.core.Output
import com.pulumi.core.Output.of
import com.pulumi.kotlin.ConvertibleToJava
import com.pulumi.kotlin.PulumiTagMarker
import com.pulumi.kotlin.applySuspend
import kotlin.Boolean
import kotlin.Deprecated
import kotlin.Int
import kotlin.Pair
import kotlin.String
import kotlin.Suppress
import kotlin.Unit
import kotlin.collections.List
import kotlin.collections.Map
import kotlin.jvm.JvmName

/**
 * Provides a ESS scaling group resource which is a collection of ECS instances with the same application scenarios.
 * It defines the maximum and minimum numbers of ECS instances in the group, and their associated Server Load Balancer instances, RDS instances, and other attributes.
 * > **NOTE:** You can launch an ESS scaling group for a VPC network via specifying parameter `vswitch_ids`.
 * For information about ess scaling rule, see [CreateScalingGroup](https://www.alibabacloud.com/help/en/auto-scaling/latest/createscalinggroup).
 * > **NOTE:** Available since v1.39.0.
 * ## Example Usage
 * 
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as alicloud from "@pulumi/alicloud";
 * import * as random from "@pulumi/random";
 * const config = new pulumi.Config();
 * const name = config.get("name") || "terraform-example";
 * const defaultInteger = new random.index.Integer("default", {
 *     min: 10000,
 *     max: 99999,
 * });
 * const myName = `${name}-${defaultInteger.result}`;
 * const default = alicloud.getZones({
 *     availableDiskCategory: "cloud_efficiency",
 *     availableResourceCreation: "VSwitch",
 * });
 * const defaultGetInstanceTypes = _default.then(_default => alicloud.ecs.getInstanceTypes({
 *     availabilityZone: _default.zones?.[0]?.id,
 *     cpuCoreCount: 2,
 *     memorySize: 4,
 * }));
 * const defaultGetImages = alicloud.ecs.getImages({
 *     nameRegex: "^ubuntu_18.*64",
 *     mostRecent: true,
 *     owners: "system",
 * });
 * const defaultNetwork = new alicloud.vpc.Network("default", {
 *     vpcName: myName,
 *     cidrBlock: "172.16.0.0/16",
 * });
 * const defaultSwitch = new alicloud.vpc.Switch("default", {
 *     vpcId: defaultNetwork.id,
 *     cidrBlock: "172.16.0.0/24",
 *     zoneId: _default.then(_default => _default.zones?.[0]?.id),
 *     vswitchName: myName,
 * });
 * const defaultSecurityGroup = new alicloud.ecs.SecurityGroup("default", {
 *     name: myName,
 *     vpcId: defaultNetwork.id,
 * });
 * const defaultSecurityGroupRule = new alicloud.ecs.SecurityGroupRule("default", {
 *     type: "ingress",
 *     ipProtocol: "tcp",
 *     nicType: "intranet",
 *     policy: "accept",
 *     portRange: "22/22",
 *     priority: 1,
 *     securityGroupId: defaultSecurityGroup.id,
 *     cidrIp: "172.16.0.0/24",
 * });
 * const default2 = new alicloud.vpc.Switch("default2", {
 *     vpcId: defaultNetwork.id,
 *     cidrBlock: "172.16.1.0/24",
 *     zoneId: _default.then(_default => _default.zones?.[0]?.id),
 *     vswitchName: `${name}-bar`,
 * });
 * const defaultScalingGroup = new alicloud.ess.ScalingGroup("default", {
 *     minSize: 1,
 *     maxSize: 1,
 *     scalingGroupName: myName,
 *     defaultCooldown: 20,
 *     vswitchIds: [
 *         defaultSwitch.id,
 *         default2.id,
 *     ],
 *     removalPolicies: [
 *         "OldestInstance",
 *         "NewestInstance",
 *     ],
 * });
 * ```
 * ```python
 * import pulumi
 * import pulumi_alicloud as alicloud
 * import pulumi_random as random
 * config = pulumi.Config()
 * name = config.get("name")
 * if name is None:
 *     name = "terraform-example"
 * default_integer = random.index.Integer("default",
 *     min=10000,
 *     max=99999)
 * my_name = f"{name}-{default_integer['result']}"
 * default = alicloud.get_zones(available_disk_category="cloud_efficiency",
 *     available_resource_creation="VSwitch")
 * default_get_instance_types = alicloud.ecs.get_instance_types(availability_zone=default.zones[0].id,
 *     cpu_core_count=2,
 *     memory_size=4)
 * default_get_images = alicloud.ecs.get_images(name_regex="^ubuntu_18.*64",
 *     most_recent=True,
 *     owners="system")
 * default_network = alicloud.vpc.Network("default",
 *     vpc_name=my_name,
 *     cidr_block="172.16.0.0/16")
 * default_switch = alicloud.vpc.Switch("default",
 *     vpc_id=default_network.id,
 *     cidr_block="172.16.0.0/24",
 *     zone_id=default.zones[0].id,
 *     vswitch_name=my_name)
 * default_security_group = alicloud.ecs.SecurityGroup("default",
 *     name=my_name,
 *     vpc_id=default_network.id)
 * default_security_group_rule = alicloud.ecs.SecurityGroupRule("default",
 *     type="ingress",
 *     ip_protocol="tcp",
 *     nic_type="intranet",
 *     policy="accept",
 *     port_range="22/22",
 *     priority=1,
 *     security_group_id=default_security_group.id,
 *     cidr_ip="172.16.0.0/24")
 * default2 = alicloud.vpc.Switch("default2",
 *     vpc_id=default_network.id,
 *     cidr_block="172.16.1.0/24",
 *     zone_id=default.zones[0].id,
 *     vswitch_name=f"{name}-bar")
 * default_scaling_group = alicloud.ess.ScalingGroup("default",
 *     min_size=1,
 *     max_size=1,
 *     scaling_group_name=my_name,
 *     default_cooldown=20,
 *     vswitch_ids=[
 *         default_switch.id,
 *         default2.id,
 *     ],
 *     removal_policies=[
 *         "OldestInstance",
 *         "NewestInstance",
 *     ])
 * ```
 * ```csharp
 * using System.Collections.Generic;
 * using System.Linq;
 * using Pulumi;
 * using AliCloud = Pulumi.AliCloud;
 * using Random = Pulumi.Random;
 * return await Deployment.RunAsync(() =>
 * {
 *     var config = new Config();
 *     var name = config.Get("name") ?? "terraform-example";
 *     var defaultInteger = new Random.Index.Integer("default", new()
 *     {
 *         Min = 10000,
 *         Max = 99999,
 *     });
 *     var myName = $"{name}-{defaultInteger.Result}";
 *     var @default = AliCloud.GetZones.Invoke(new()
 *     {
 *         AvailableDiskCategory = "cloud_efficiency",
 *         AvailableResourceCreation = "VSwitch",
 *     });
 *     var defaultGetInstanceTypes = AliCloud.Ecs.GetInstanceTypes.Invoke(new()
 *     {
 *         AvailabilityZone = @default.Apply(getZonesResult => getZonesResult.Zones[0]?.Id),
 *         CpuCoreCount = 2,
 *         MemorySize = 4,
 *     });
 *     var defaultGetImages = AliCloud.Ecs.GetImages.Invoke(new()
 *     {
 *         NameRegex = "^ubuntu_18.*64",
 *         MostRecent = true,
 *         Owners = "system",
 *     });
 *     var defaultNetwork = new AliCloud.Vpc.Network("default", new()
 *     {
 *         VpcName = myName,
 *         CidrBlock = "172.16.0.0/16",
 *     });
 *     var defaultSwitch = new AliCloud.Vpc.Switch("default", new()
 *     {
 *         VpcId = defaultNetwork.Id,
 *         CidrBlock = "172.16.0.0/24",
 *         ZoneId = @default.Apply(@default => @default.Apply(getZonesResult => getZonesResult.Zones[0]?.Id)),
 *         VswitchName = myName,
 *     });
 *     var defaultSecurityGroup = new AliCloud.Ecs.SecurityGroup("default", new()
 *     {
 *         Name = myName,
 *         VpcId = defaultNetwork.Id,
 *     });
 *     var defaultSecurityGroupRule = new AliCloud.Ecs.SecurityGroupRule("default", new()
 *     {
 *         Type = "ingress",
 *         IpProtocol = "tcp",
 *         NicType = "intranet",
 *         Policy = "accept",
 *         PortRange = "22/22",
 *         Priority = 1,
 *         SecurityGroupId = defaultSecurityGroup.Id,
 *         CidrIp = "172.16.0.0/24",
 *     });
 *     var default2 = new AliCloud.Vpc.Switch("default2", new()
 *     {
 *         VpcId = defaultNetwork.Id,
 *         CidrBlock = "172.16.1.0/24",
 *         ZoneId = @default.Apply(@default => @default.Apply(getZonesResult => getZonesResult.Zones[0]?.Id)),
 *         VswitchName = $"{name}-bar",
 *     });
 *     var defaultScalingGroup = new AliCloud.Ess.ScalingGroup("default", new()
 *     {
 *         MinSize = 1,
 *         MaxSize = 1,
 *         ScalingGroupName = myName,
 *         DefaultCooldown = 20,
 *         VswitchIds = new[]
 *         {
 *             defaultSwitch.Id,
 *             default2.Id,
 *         },
 *         RemovalPolicies = new[]
 *         {
 *             "OldestInstance",
 *             "NewestInstance",
 *         },
 *     });
 * });
 * ```
 * ```go
 * package main
 * import (
 * 	"fmt"
 * 	"github.com/pulumi/pulumi-alicloud/sdk/v3/go/alicloud"
 * 	"github.com/pulumi/pulumi-alicloud/sdk/v3/go/alicloud/ecs"
 * 	"github.com/pulumi/pulumi-alicloud/sdk/v3/go/alicloud/ess"
 * 	"github.com/pulumi/pulumi-alicloud/sdk/v3/go/alicloud/vpc"
 * 	"github.com/pulumi/pulumi-random/sdk/v4/go/random"
 * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
 * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi/config"
 * )
 * func main() {
 * 	pulumi.Run(func(ctx *pulumi.Context) error {
 * 		cfg := config.New(ctx, "")
 * 		name := "terraform-example"
 * 		if param := cfg.Get("name"); param != "" {
 * 			name = param
 * 		}
 * 		defaultInteger, err := random.NewInteger(ctx, "default", &random.IntegerArgs{
 * 			Min: 10000,
 * 			Max: 99999,
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		myName := fmt.Sprintf("%v-%v", name, defaultInteger.Result)
 * 		_default, err := alicloud.GetZones(ctx, &alicloud.GetZonesArgs{
 * 			AvailableDiskCategory:     pulumi.StringRef("cloud_efficiency"),
 * 			AvailableResourceCreation: pulumi.StringRef("VSwitch"),
 * 		}, nil)
 * 		if err != nil {
 * 			return err
 * 		}
 * 		_, err = ecs.GetInstanceTypes(ctx, &ecs.GetInstanceTypesArgs{
 * 			AvailabilityZone: pulumi.StringRef(_default.Zones[0].Id),
 * 			CpuCoreCount:     pulumi.IntRef(2),
 * 			MemorySize:       pulumi.Float64Ref(4),
 * 		}, nil)
 * 		if err != nil {
 * 			return err
 * 		}
 * 		_, err = ecs.GetImages(ctx, &ecs.GetImagesArgs{
 * 			NameRegex:  pulumi.StringRef("^ubuntu_18.*64"),
 * 			MostRecent: pulumi.BoolRef(true),
 * 			Owners:     pulumi.StringRef("system"),
 * 		}, nil)
 * 		if err != nil {
 * 			return err
 * 		}
 * 		defaultNetwork, err := vpc.NewNetwork(ctx, "default", &vpc.NetworkArgs{
 * 			VpcName:   pulumi.String(myName),
 * 			CidrBlock: pulumi.String("172.16.0.0/16"),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		defaultSwitch, err := vpc.NewSwitch(ctx, "default", &vpc.SwitchArgs{
 * 			VpcId:       defaultNetwork.ID(),
 * 			CidrBlock:   pulumi.String("172.16.0.0/24"),
 * 			ZoneId:      pulumi.String(_default.Zones[0].Id),
 * 			VswitchName: pulumi.String(myName),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		defaultSecurityGroup, err := ecs.NewSecurityGroup(ctx, "default", &ecs.SecurityGroupArgs{
 * 			Name:  pulumi.String(myName),
 * 			VpcId: defaultNetwork.ID(),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		_, err = ecs.NewSecurityGroupRule(ctx, "default", &ecs.SecurityGroupRuleArgs{
 * 			Type:            pulumi.String("ingress"),
 * 			IpProtocol:      pulumi.String("tcp"),
 * 			NicType:         pulumi.String("intranet"),
 * 			Policy:          pulumi.String("accept"),
 * 			PortRange:       pulumi.String("22/22"),
 * 			Priority:        pulumi.Int(1),
 * 			SecurityGroupId: defaultSecurityGroup.ID(),
 * 			CidrIp:          pulumi.String("172.16.0.0/24"),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		default2, err := vpc.NewSwitch(ctx, "default2", &vpc.SwitchArgs{
 * 			VpcId:       defaultNetwork.ID(),
 * 			CidrBlock:   pulumi.String("172.16.1.0/24"),
 * 			ZoneId:      pulumi.String(_default.Zones[0].Id),
 * 			VswitchName: pulumi.Sprintf("%v-bar", name),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		_, err = ess.NewScalingGroup(ctx, "default", &ess.ScalingGroupArgs{
 * 			MinSize:          pulumi.Int(1),
 * 			MaxSize:          pulumi.Int(1),
 * 			ScalingGroupName: pulumi.String(myName),
 * 			DefaultCooldown:  pulumi.Int(20),
 * 			VswitchIds: pulumi.StringArray{
 * 				defaultSwitch.ID(),
 * 				default2.ID(),
 * 			},
 * 			RemovalPolicies: pulumi.StringArray{
 * 				pulumi.String("OldestInstance"),
 * 				pulumi.String("NewestInstance"),
 * 			},
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		return nil
 * 	})
 * }
 * ```
 * ```java
 * package generated_program;
 * import com.pulumi.Context;
 * import com.pulumi.Pulumi;
 * import com.pulumi.core.Output;
 * import com.pulumi.random.integer;
 * import com.pulumi.random.IntegerArgs;
 * import com.pulumi.alicloud.AlicloudFunctions;
 * import com.pulumi.alicloud.inputs.GetZonesArgs;
 * import com.pulumi.alicloud.ecs.EcsFunctions;
 * import com.pulumi.alicloud.ecs.inputs.GetInstanceTypesArgs;
 * import com.pulumi.alicloud.ecs.inputs.GetImagesArgs;
 * import com.pulumi.alicloud.vpc.Network;
 * import com.pulumi.alicloud.vpc.NetworkArgs;
 * import com.pulumi.alicloud.vpc.Switch;
 * import com.pulumi.alicloud.vpc.SwitchArgs;
 * import com.pulumi.alicloud.ecs.SecurityGroup;
 * import com.pulumi.alicloud.ecs.SecurityGroupArgs;
 * import com.pulumi.alicloud.ecs.SecurityGroupRule;
 * import com.pulumi.alicloud.ecs.SecurityGroupRuleArgs;
 * import com.pulumi.alicloud.ess.ScalingGroup;
 * import com.pulumi.alicloud.ess.ScalingGroupArgs;
 * import java.util.List;
 * import java.util.ArrayList;
 * import java.util.Map;
 * import java.io.File;
 * import java.nio.file.Files;
 * import java.nio.file.Paths;
 * public class App {
 *     public static void main(String[] args) {
 *         Pulumi.run(App::stack);
 *     }
 *     public static void stack(Context ctx) {
 *         final var config = ctx.config();
 *         final var name = config.get("name").orElse("terraform-example");
 *         var defaultInteger = new Integer("defaultInteger", IntegerArgs.builder()
 *             .min(10000)
 *             .max(99999)
 *             .build());
 *         final var myName = String.format("%s-%s", name,defaultInteger.result());
 *         final var default = AlicloudFunctions.getZones(GetZonesArgs.builder()
 *             .availableDiskCategory("cloud_efficiency")
 *             .availableResourceCreation("VSwitch")
 *             .build());
 *         final var defaultGetInstanceTypes = EcsFunctions.getInstanceTypes(GetInstanceTypesArgs.builder()
 *             .availabilityZone(default_.zones()[0].id())
 *             .cpuCoreCount(2)
 *             .memorySize(4)
 *             .build());
 *         final var defaultGetImages = EcsFunctions.getImages(GetImagesArgs.builder()
 *             .nameRegex("^ubuntu_18.*64")
 *             .mostRecent(true)
 *             .owners("system")
 *             .build());
 *         var defaultNetwork = new Network("defaultNetwork", NetworkArgs.builder()
 *             .vpcName(myName)
 *             .cidrBlock("172.16.0.0/16")
 *             .build());
 *         var defaultSwitch = new Switch("defaultSwitch", SwitchArgs.builder()
 *             .vpcId(defaultNetwork.id())
 *             .cidrBlock("172.16.0.0/24")
 *             .zoneId(default_.zones()[0].id())
 *             .vswitchName(myName)
 *             .build());
 *         var defaultSecurityGroup = new SecurityGroup("defaultSecurityGroup", SecurityGroupArgs.builder()
 *             .name(myName)
 *             .vpcId(defaultNetwork.id())
 *             .build());
 *         var defaultSecurityGroupRule = new SecurityGroupRule("defaultSecurityGroupRule", SecurityGroupRuleArgs.builder()
 *             .type("ingress")
 *             .ipProtocol("tcp")
 *             .nicType("intranet")
 *             .policy("accept")
 *             .portRange("22/22")
 *             .priority(1)
 *             .securityGroupId(defaultSecurityGroup.id())
 *             .cidrIp("172.16.0.0/24")
 *             .build());
 *         var default2 = new Switch("default2", SwitchArgs.builder()
 *             .vpcId(defaultNetwork.id())
 *             .cidrBlock("172.16.1.0/24")
 *             .zoneId(default_.zones()[0].id())
 *             .vswitchName(String.format("%s-bar", name))
 *             .build());
 *         var defaultScalingGroup = new ScalingGroup("defaultScalingGroup", ScalingGroupArgs.builder()
 *             .minSize(1)
 *             .maxSize(1)
 *             .scalingGroupName(myName)
 *             .defaultCooldown(20)
 *             .vswitchIds(
 *                 defaultSwitch.id(),
 *                 default2.id())
 *             .removalPolicies(
 *                 "OldestInstance",
 *                 "NewestInstance")
 *             .build());
 *     }
 * }
 * ```
 * ```yaml
 * configuration:
 *   name:
 *     type: string
 *     default: terraform-example
 * resources:
 *   defaultInteger:
 *     type: random:integer
 *     name: default
 *     properties:
 *       min: 10000
 *       max: 99999
 *   defaultNetwork:
 *     type: alicloud:vpc:Network
 *     name: default
 *     properties:
 *       vpcName: ${myName}
 *       cidrBlock: 172.16.0.0/16
 *   defaultSwitch:
 *     type: alicloud:vpc:Switch
 *     name: default
 *     properties:
 *       vpcId: ${defaultNetwork.id}
 *       cidrBlock: 172.16.0.0/24
 *       zoneId: ${default.zones[0].id}
 *       vswitchName: ${myName}
 *   defaultSecurityGroup:
 *     type: alicloud:ecs:SecurityGroup
 *     name: default
 *     properties:
 *       name: ${myName}
 *       vpcId: ${defaultNetwork.id}
 *   defaultSecurityGroupRule:
 *     type: alicloud:ecs:SecurityGroupRule
 *     name: default
 *     properties:
 *       type: ingress
 *       ipProtocol: tcp
 *       nicType: intranet
 *       policy: accept
 *       portRange: 22/22
 *       priority: 1
 *       securityGroupId: ${defaultSecurityGroup.id}
 *       cidrIp: 172.16.0.0/24
 *   default2:
 *     type: alicloud:vpc:Switch
 *     properties:
 *       vpcId: ${defaultNetwork.id}
 *       cidrBlock: 172.16.1.0/24
 *       zoneId: ${default.zones[0].id}
 *       vswitchName: ${name}-bar
 *   defaultScalingGroup:
 *     type: alicloud:ess:ScalingGroup
 *     name: default
 *     properties:
 *       minSize: 1
 *       maxSize: 1
 *       scalingGroupName: ${myName}
 *       defaultCooldown: 20
 *       vswitchIds:
 *         - ${defaultSwitch.id}
 *         - ${default2.id}
 *       removalPolicies:
 *         - OldestInstance
 *         - NewestInstance
 * variables:
 *   myName: ${name}-${defaultInteger.result}
 *   default:
 *     fn::invoke:
 *       Function: alicloud:getZones
 *       Arguments:
 *         availableDiskCategory: cloud_efficiency
 *         availableResourceCreation: VSwitch
 *   defaultGetInstanceTypes:
 *     fn::invoke:
 *       Function: alicloud:ecs:getInstanceTypes
 *       Arguments:
 *         availabilityZone: ${default.zones[0].id}
 *         cpuCoreCount: 2
 *         memorySize: 4
 *   defaultGetImages:
 *     fn::invoke:
 *       Function: alicloud:ecs:getImages
 *       Arguments:
 *         nameRegex: ^ubuntu_18.*64
 *         mostRecent: true
 *         owners: system
 * ```
 * 
 * ## Module Support
 * You can use to the existing autoscaling module
 * to create a scaling group, configuration and lifecycle hook one-click.
 * ## Import
 * ESS scaling group can be imported using the id, e.g.
 * ```sh
 * $ pulumi import alicloud:ess/scalingGroup:ScalingGroup example asg-abc123456
 * ```
 * @property albServerGroups If a Serve ALB instance is specified in the scaling group, the scaling group automatically attaches its ECS instances to the Server ALB instance.  See `alb_server_group` below for details.
 * @property allocationStrategy The allocation policy of instances. Auto Scaling selects instance types based on the allocation policy to create instances. The policy can be applied to pay-as-you-go instances and preemptible instances. This parameter takes effect only if you set MultiAZPolicy to COMPOSABLE.
 * @property azBalance Specifies whether to evenly distribute instances in the scaling group across multiple zones. This parameter takes effect only if you set MultiAZPolicy to COMPOSABLE.
 * @property dbInstanceIds If an RDS instance is specified in the scaling group, the scaling group automatically attaches the Intranet IP addresses of its ECS instances to the RDS access whitelist.
 * - The specified RDS instance must be in running status.
 * - The specified RDS instance’s whitelist must have room for more IP addresses.
 * @property defaultCooldown Default cool-down time (in seconds) of the scaling group. Value range: [0, 86400]. The default value is 300s.
 * @property desiredCapacity Expected number of ECS instances in the scaling group. Value range: [min_size, max_size].
 * @property groupDeletionProtection Specifies whether the scaling group deletion protection is enabled. `true` or `false`, Default value: `false`.
 * @property groupType Resource type within scaling group. Optional values: ECS, ECI. Default to ECS.
 * @property healthCheckType Resource type within scaling group. Optional values: ECS, ECI, NONE, LOAD_BALANCER. Default to ECS.
 * @property healthCheckTypes The health check modes of the scaling group. Valid values: ECS, ECI, NONE, LOAD_BALANCER.
 * @property instanceId The ID of the instance from which Auto Scaling obtains the required configuration information and uses the information to automatically create a scaling configuration.
 * @property launchTemplateId Instance launch template ID, scaling group obtains launch configuration from instance launch template, see [Launch Template](https://www.alibabacloud.com/help/doc-detail/73916.html). Creating scaling group from launch template enable group automatically.
 * @property launchTemplateOverrides The details of the instance types that are specified by using the Extend Instance Type of Launch Template feature.  See `launch_template_override` below for details.
 * @property launchTemplateVersion The version number of the launch template. Valid values are the version number, `Latest`, or `Default`, Default value: `Default`.
 * @property loadbalancerIds If a Server Load Balancer instance is specified in the scaling group, the scaling group automatically attaches its ECS instances to the Server Load Balancer instance.
 * - The Server Load Balancer instance must be enabled.
 * - At least one listener must be configured for each Server Load Balancer and it HealthCheck must be on. Otherwise, creation will fail (it may be useful to add a `depends_on` argument
 * targeting your `alicloud.slb.Listener` in order to make sure the listener with its HealthCheck configuration is ready before creating your scaling group).
 * - The Server Load Balancer instance attached with VPC-type ECS instances cannot be attached to the scaling group.
 * - The default weight of an ECS instance attached to the Server Load Balancer instance is 50.
 * @property maxInstanceLifetime The maximum life span of an instance in the scaling group. Unit: seconds.
 * @property maxSize Maximum number of ECS instances in the scaling group. Value range: [0, 2000].
 * **NOTE:** From version 1.204.1, `max_size` can be set to `2000`.
 * @property minSize Minimum number of ECS instances in the scaling group. Value range: [0, 2000].
 * **NOTE:** From version 1.204.1, `min_size` can be set to `2000`.
 * @property multiAzPolicy Multi-AZ scaling group ECS instance expansion and contraction strategy. PRIORITY, COMPOSABLE, BALANCE or COST_OPTIMIZED(Available since v1.54.0).
 * @property onDemandBaseCapacity The minimum amount of the Auto Scaling group's capacity that must be fulfilled by On-Demand Instances. This base portion is provisioned first as your group scales.
 * @property onDemandPercentageAboveBaseCapacity Controls the percentages of On-Demand Instances and Spot Instances for your additional capacity beyond OnDemandBaseCapacity.
 * @property protectedInstances Set or unset instances within group into protected status.
 * @property removalPolicies RemovalPolicy is used to select the ECS instances you want to remove from the scaling group when multiple candidates for removal exist. Optional values:
 * - OldestInstance: removes the ECS instance that is added to the scaling group at the earliest point in time.
 * - NewestInstance: removes the ECS instance that is added to the scaling group at the latest point in time.
 * - OldestScalingConfiguration: removes the ECS instance that is created based on the earliest scaling configuration.
 * - Default values: Default value of RemovalPolicy.1: OldestScalingConfiguration. Default value of RemovalPolicy.2: OldestInstance.
 * @property resourceGroupId The ID of the resource group to which you want to add the scaling group.
 * @property scalingGroupName Name shown for the scaling group, which must contain 2-64 characters (English or Chinese), starting with numbers, English letters or Chinese characters, and can contain numbers, underscores `_`, hyphens `-`, and decimal points `.`. If this parameter is not specified, the default value is ScalingGroupId.
 * @property scalingPolicy The reclaim mode of the scaling group. Optional values: recycle, release, forceRecycle, forceRelease.
 * @property spotAllocationStrategy The allocation policy of preemptible instances. You can use this parameter to individually specify the allocation policy for preemptible instances. This parameter takes effect only if you set MultiAZPolicy to COMPOSABLE.
 * @property spotInstancePools The number of Spot pools to use to allocate your Spot capacity. The Spot pools is composed of instance types of lowest price.
 * @property spotInstanceRemedy Whether to replace spot instances with newly created spot/onDemand instance when receive a spot recycling message.
 * @property tags A mapping of tags to assign to the resource.
 * - Key: It can be up to 64 characters in length. It cannot begin with "aliyun", "acs:", "http://", or "https://". It cannot be a null string.
 * - Value: It can be up to 128 characters in length. It cannot begin with "aliyun", "acs:", "http://", or "https://". It can be a null string.
 * @property vswitchId It has been deprecated from version 1.7.1 and new field 'vswitch_ids' replaces it.
 * @property vswitchIds List of virtual switch IDs in which the ecs instances to be launched.
 */
public data class ScalingGroupArgs(
    public val albServerGroups: Output>? = null,
    public val allocationStrategy: Output? = null,
    public val azBalance: Output? = null,
    public val dbInstanceIds: Output>? = null,
    public val defaultCooldown: Output? = null,
    public val desiredCapacity: Output? = null,
    public val groupDeletionProtection: Output? = null,
    public val groupType: Output? = null,
    public val healthCheckType: Output? = null,
    public val healthCheckTypes: Output>? = null,
    public val instanceId: Output? = null,
    public val launchTemplateId: Output? = null,
    public val launchTemplateOverrides: Output>? = null,
    public val launchTemplateVersion: Output? = null,
    public val loadbalancerIds: Output>? = null,
    public val maxInstanceLifetime: Output? = null,
    public val maxSize: Output? = null,
    public val minSize: Output? = null,
    public val multiAzPolicy: Output? = null,
    public val onDemandBaseCapacity: Output? = null,
    public val onDemandPercentageAboveBaseCapacity: Output? = null,
    public val protectedInstances: Output>? = null,
    public val removalPolicies: Output>? = null,
    public val resourceGroupId: Output? = null,
    public val scalingGroupName: Output? = null,
    public val scalingPolicy: Output? = null,
    public val spotAllocationStrategy: Output? = null,
    public val spotInstancePools: Output? = null,
    public val spotInstanceRemedy: Output? = null,
    public val tags: Output>? = null,
    @Deprecated(
        message = """
  Field 'vswitch_id' has been deprecated from provider version 1.7.1, and new field 'vswitch_ids'
      can replace it.
  """,
    )
    public val vswitchId: Output? = null,
    public val vswitchIds: Output>? = null,
) : ConvertibleToJava {
    override fun toJava(): com.pulumi.alicloud.ess.ScalingGroupArgs =
        com.pulumi.alicloud.ess.ScalingGroupArgs.builder()
            .albServerGroups(
                albServerGroups?.applyValue({ args0 ->
                    args0.map({ args0 ->
                        args0.let({ args0 ->
                            args0.toJava()
                        })
                    })
                }),
            )
            .allocationStrategy(allocationStrategy?.applyValue({ args0 -> args0 }))
            .azBalance(azBalance?.applyValue({ args0 -> args0 }))
            .dbInstanceIds(dbInstanceIds?.applyValue({ args0 -> args0.map({ args0 -> args0 }) }))
            .defaultCooldown(defaultCooldown?.applyValue({ args0 -> args0 }))
            .desiredCapacity(desiredCapacity?.applyValue({ args0 -> args0 }))
            .groupDeletionProtection(groupDeletionProtection?.applyValue({ args0 -> args0 }))
            .groupType(groupType?.applyValue({ args0 -> args0 }))
            .healthCheckType(healthCheckType?.applyValue({ args0 -> args0 }))
            .healthCheckTypes(healthCheckTypes?.applyValue({ args0 -> args0.map({ args0 -> args0 }) }))
            .instanceId(instanceId?.applyValue({ args0 -> args0 }))
            .launchTemplateId(launchTemplateId?.applyValue({ args0 -> args0 }))
            .launchTemplateOverrides(
                launchTemplateOverrides?.applyValue({ args0 ->
                    args0.map({ args0 ->
                        args0.let({ args0 -> args0.toJava() })
                    })
                }),
            )
            .launchTemplateVersion(launchTemplateVersion?.applyValue({ args0 -> args0 }))
            .loadbalancerIds(loadbalancerIds?.applyValue({ args0 -> args0.map({ args0 -> args0 }) }))
            .maxInstanceLifetime(maxInstanceLifetime?.applyValue({ args0 -> args0 }))
            .maxSize(maxSize?.applyValue({ args0 -> args0 }))
            .minSize(minSize?.applyValue({ args0 -> args0 }))
            .multiAzPolicy(multiAzPolicy?.applyValue({ args0 -> args0 }))
            .onDemandBaseCapacity(onDemandBaseCapacity?.applyValue({ args0 -> args0 }))
            .onDemandPercentageAboveBaseCapacity(
                onDemandPercentageAboveBaseCapacity?.applyValue({ args0 ->
                    args0
                }),
            )
            .protectedInstances(protectedInstances?.applyValue({ args0 -> args0.map({ args0 -> args0 }) }))
            .removalPolicies(removalPolicies?.applyValue({ args0 -> args0.map({ args0 -> args0 }) }))
            .resourceGroupId(resourceGroupId?.applyValue({ args0 -> args0 }))
            .scalingGroupName(scalingGroupName?.applyValue({ args0 -> args0 }))
            .scalingPolicy(scalingPolicy?.applyValue({ args0 -> args0 }))
            .spotAllocationStrategy(spotAllocationStrategy?.applyValue({ args0 -> args0 }))
            .spotInstancePools(spotInstancePools?.applyValue({ args0 -> args0 }))
            .spotInstanceRemedy(spotInstanceRemedy?.applyValue({ args0 -> args0 }))
            .tags(tags?.applyValue({ args0 -> args0.map({ args0 -> args0.key.to(args0.value) }).toMap() }))
            .vswitchId(vswitchId?.applyValue({ args0 -> args0 }))
            .vswitchIds(vswitchIds?.applyValue({ args0 -> args0.map({ args0 -> args0 }) })).build()
}

/**
 * Builder for [ScalingGroupArgs].
 */
@PulumiTagMarker
public class ScalingGroupArgsBuilder internal constructor() {
    private var albServerGroups: Output>? = null

    private var allocationStrategy: Output? = null

    private var azBalance: Output? = null

    private var dbInstanceIds: Output>? = null

    private var defaultCooldown: Output? = null

    private var desiredCapacity: Output? = null

    private var groupDeletionProtection: Output? = null

    private var groupType: Output? = null

    private var healthCheckType: Output? = null

    private var healthCheckTypes: Output>? = null

    private var instanceId: Output? = null

    private var launchTemplateId: Output? = null

    private var launchTemplateOverrides: Output>? = null

    private var launchTemplateVersion: Output? = null

    private var loadbalancerIds: Output>? = null

    private var maxInstanceLifetime: Output? = null

    private var maxSize: Output? = null

    private var minSize: Output? = null

    private var multiAzPolicy: Output? = null

    private var onDemandBaseCapacity: Output? = null

    private var onDemandPercentageAboveBaseCapacity: Output? = null

    private var protectedInstances: Output>? = null

    private var removalPolicies: Output>? = null

    private var resourceGroupId: Output? = null

    private var scalingGroupName: Output? = null

    private var scalingPolicy: Output? = null

    private var spotAllocationStrategy: Output? = null

    private var spotInstancePools: Output? = null

    private var spotInstanceRemedy: Output? = null

    private var tags: Output>? = null

    private var vswitchId: Output? = null

    private var vswitchIds: Output>? = null

    /**
     * @param value If a Serve ALB instance is specified in the scaling group, the scaling group automatically attaches its ECS instances to the Server ALB instance.  See `alb_server_group` below for details.
     */
    @JvmName("avhddrwjuqhddvic")
    public suspend fun albServerGroups(`value`: Output>) {
        this.albServerGroups = value
    }

    @JvmName("bftgsccywepeykfj")
    public suspend fun albServerGroups(vararg values: Output) {
        this.albServerGroups = Output.all(values.asList())
    }

    /**
     * @param values If a Serve ALB instance is specified in the scaling group, the scaling group automatically attaches its ECS instances to the Server ALB instance.  See `alb_server_group` below for details.
     */
    @JvmName("uniquayjsbuiqxjr")
    public suspend fun albServerGroups(values: List>) {
        this.albServerGroups = Output.all(values)
    }

    /**
     * @param value The allocation policy of instances. Auto Scaling selects instance types based on the allocation policy to create instances. The policy can be applied to pay-as-you-go instances and preemptible instances. This parameter takes effect only if you set MultiAZPolicy to COMPOSABLE.
     */
    @JvmName("kwgvgorcsvmccsyl")
    public suspend fun allocationStrategy(`value`: Output) {
        this.allocationStrategy = value
    }

    /**
     * @param value Specifies whether to evenly distribute instances in the scaling group across multiple zones. This parameter takes effect only if you set MultiAZPolicy to COMPOSABLE.
     */
    @JvmName("aybjosrbpjpndodr")
    public suspend fun azBalance(`value`: Output) {
        this.azBalance = value
    }

    /**
     * @param value If an RDS instance is specified in the scaling group, the scaling group automatically attaches the Intranet IP addresses of its ECS instances to the RDS access whitelist.
     * - The specified RDS instance must be in running status.
     * - The specified RDS instance’s whitelist must have room for more IP addresses.
     */
    @JvmName("ljqyvvopnegbdxce")
    public suspend fun dbInstanceIds(`value`: Output>) {
        this.dbInstanceIds = value
    }

    @JvmName("hdnckcijqtkjrqlg")
    public suspend fun dbInstanceIds(vararg values: Output) {
        this.dbInstanceIds = Output.all(values.asList())
    }

    /**
     * @param values If an RDS instance is specified in the scaling group, the scaling group automatically attaches the Intranet IP addresses of its ECS instances to the RDS access whitelist.
     * - The specified RDS instance must be in running status.
     * - The specified RDS instance’s whitelist must have room for more IP addresses.
     */
    @JvmName("qcbnngaieasavkdb")
    public suspend fun dbInstanceIds(values: List>) {
        this.dbInstanceIds = Output.all(values)
    }

    /**
     * @param value Default cool-down time (in seconds) of the scaling group. Value range: [0, 86400]. The default value is 300s.
     */
    @JvmName("pcnxaabufsrrxuak")
    public suspend fun defaultCooldown(`value`: Output) {
        this.defaultCooldown = value
    }

    /**
     * @param value Expected number of ECS instances in the scaling group. Value range: [min_size, max_size].
     */
    @JvmName("uipfwnpqratudfcq")
    public suspend fun desiredCapacity(`value`: Output) {
        this.desiredCapacity = value
    }

    /**
     * @param value Specifies whether the scaling group deletion protection is enabled. `true` or `false`, Default value: `false`.
     */
    @JvmName("mdeijihedqidjfav")
    public suspend fun groupDeletionProtection(`value`: Output) {
        this.groupDeletionProtection = value
    }

    /**
     * @param value Resource type within scaling group. Optional values: ECS, ECI. Default to ECS.
     */
    @JvmName("iopawadqklwjrcbg")
    public suspend fun groupType(`value`: Output) {
        this.groupType = value
    }

    /**
     * @param value Resource type within scaling group. Optional values: ECS, ECI, NONE, LOAD_BALANCER. Default to ECS.
     */
    @JvmName("acroaklsdwvawqtm")
    public suspend fun healthCheckType(`value`: Output) {
        this.healthCheckType = value
    }

    /**
     * @param value The health check modes of the scaling group. Valid values: ECS, ECI, NONE, LOAD_BALANCER.
     */
    @JvmName("hmebkaqrlnrifjvk")
    public suspend fun healthCheckTypes(`value`: Output>) {
        this.healthCheckTypes = value
    }

    @JvmName("agkjdxussutxjtkc")
    public suspend fun healthCheckTypes(vararg values: Output) {
        this.healthCheckTypes = Output.all(values.asList())
    }

    /**
     * @param values The health check modes of the scaling group. Valid values: ECS, ECI, NONE, LOAD_BALANCER.
     */
    @JvmName("iqvphjgqaykdogss")
    public suspend fun healthCheckTypes(values: List>) {
        this.healthCheckTypes = Output.all(values)
    }

    /**
     * @param value The ID of the instance from which Auto Scaling obtains the required configuration information and uses the information to automatically create a scaling configuration.
     */
    @JvmName("fpmmssbbvycxryoo")
    public suspend fun instanceId(`value`: Output) {
        this.instanceId = value
    }

    /**
     * @param value Instance launch template ID, scaling group obtains launch configuration from instance launch template, see [Launch Template](https://www.alibabacloud.com/help/doc-detail/73916.html). Creating scaling group from launch template enable group automatically.
     */
    @JvmName("atubdnnvctcoeued")
    public suspend fun launchTemplateId(`value`: Output) {
        this.launchTemplateId = value
    }

    /**
     * @param value The details of the instance types that are specified by using the Extend Instance Type of Launch Template feature.  See `launch_template_override` below for details.
     */
    @JvmName("jbrqfolxjrdansmi")
    public suspend fun launchTemplateOverrides(`value`: Output>) {
        this.launchTemplateOverrides = value
    }

    @JvmName("yyaqiushlmpiwcif")
    public suspend fun launchTemplateOverrides(vararg values: Output) {
        this.launchTemplateOverrides = Output.all(values.asList())
    }

    /**
     * @param values The details of the instance types that are specified by using the Extend Instance Type of Launch Template feature.  See `launch_template_override` below for details.
     */
    @JvmName("iepvuopuncunxsuq")
    public suspend fun launchTemplateOverrides(values: List>) {
        this.launchTemplateOverrides = Output.all(values)
    }

    /**
     * @param value The version number of the launch template. Valid values are the version number, `Latest`, or `Default`, Default value: `Default`.
     */
    @JvmName("fynsiemcbfbnxfap")
    public suspend fun launchTemplateVersion(`value`: Output) {
        this.launchTemplateVersion = value
    }

    /**
     * @param value If a Server Load Balancer instance is specified in the scaling group, the scaling group automatically attaches its ECS instances to the Server Load Balancer instance.
     * - The Server Load Balancer instance must be enabled.
     * - At least one listener must be configured for each Server Load Balancer and it HealthCheck must be on. Otherwise, creation will fail (it may be useful to add a `depends_on` argument
     * targeting your `alicloud.slb.Listener` in order to make sure the listener with its HealthCheck configuration is ready before creating your scaling group).
     * - The Server Load Balancer instance attached with VPC-type ECS instances cannot be attached to the scaling group.
     * - The default weight of an ECS instance attached to the Server Load Balancer instance is 50.
     */
    @JvmName("ugyvcxbpjkujvgbe")
    public suspend fun loadbalancerIds(`value`: Output>) {
        this.loadbalancerIds = value
    }

    @JvmName("jmdokwyytmlkmbxc")
    public suspend fun loadbalancerIds(vararg values: Output) {
        this.loadbalancerIds = Output.all(values.asList())
    }

    /**
     * @param values If a Server Load Balancer instance is specified in the scaling group, the scaling group automatically attaches its ECS instances to the Server Load Balancer instance.
     * - The Server Load Balancer instance must be enabled.
     * - At least one listener must be configured for each Server Load Balancer and it HealthCheck must be on. Otherwise, creation will fail (it may be useful to add a `depends_on` argument
     * targeting your `alicloud.slb.Listener` in order to make sure the listener with its HealthCheck configuration is ready before creating your scaling group).
     * - The Server Load Balancer instance attached with VPC-type ECS instances cannot be attached to the scaling group.
     * - The default weight of an ECS instance attached to the Server Load Balancer instance is 50.
     */
    @JvmName("trhbfjohamdonsrn")
    public suspend fun loadbalancerIds(values: List>) {
        this.loadbalancerIds = Output.all(values)
    }

    /**
     * @param value The maximum life span of an instance in the scaling group. Unit: seconds.
     */
    @JvmName("dilfqhjlsykrsmoi")
    public suspend fun maxInstanceLifetime(`value`: Output) {
        this.maxInstanceLifetime = value
    }

    /**
     * @param value Maximum number of ECS instances in the scaling group. Value range: [0, 2000].
     * **NOTE:** From version 1.204.1, `max_size` can be set to `2000`.
     */
    @JvmName("mqionudbnkdjtbaq")
    public suspend fun maxSize(`value`: Output) {
        this.maxSize = value
    }

    /**
     * @param value Minimum number of ECS instances in the scaling group. Value range: [0, 2000].
     * **NOTE:** From version 1.204.1, `min_size` can be set to `2000`.
     */
    @JvmName("eivyinsqhnfhivax")
    public suspend fun minSize(`value`: Output) {
        this.minSize = value
    }

    /**
     * @param value Multi-AZ scaling group ECS instance expansion and contraction strategy. PRIORITY, COMPOSABLE, BALANCE or COST_OPTIMIZED(Available since v1.54.0).
     */
    @JvmName("rhbmbvcdkukbfedj")
    public suspend fun multiAzPolicy(`value`: Output) {
        this.multiAzPolicy = value
    }

    /**
     * @param value The minimum amount of the Auto Scaling group's capacity that must be fulfilled by On-Demand Instances. This base portion is provisioned first as your group scales.
     */
    @JvmName("urlhpjqyuoxkjahi")
    public suspend fun onDemandBaseCapacity(`value`: Output) {
        this.onDemandBaseCapacity = value
    }

    /**
     * @param value Controls the percentages of On-Demand Instances and Spot Instances for your additional capacity beyond OnDemandBaseCapacity.
     */
    @JvmName("qvgkqqhcljnbvqyh")
    public suspend fun onDemandPercentageAboveBaseCapacity(`value`: Output) {
        this.onDemandPercentageAboveBaseCapacity = value
    }

    /**
     * @param value Set or unset instances within group into protected status.
     */
    @JvmName("tybqrntcqwenocsv")
    public suspend fun protectedInstances(`value`: Output>) {
        this.protectedInstances = value
    }

    @JvmName("jwhanguyklogriyr")
    public suspend fun protectedInstances(vararg values: Output) {
        this.protectedInstances = Output.all(values.asList())
    }

    /**
     * @param values Set or unset instances within group into protected status.
     */
    @JvmName("qvjvcbncbfxbnklh")
    public suspend fun protectedInstances(values: List>) {
        this.protectedInstances = Output.all(values)
    }

    /**
     * @param value RemovalPolicy is used to select the ECS instances you want to remove from the scaling group when multiple candidates for removal exist. Optional values:
     * - OldestInstance: removes the ECS instance that is added to the scaling group at the earliest point in time.
     * - NewestInstance: removes the ECS instance that is added to the scaling group at the latest point in time.
     * - OldestScalingConfiguration: removes the ECS instance that is created based on the earliest scaling configuration.
     * - Default values: Default value of RemovalPolicy.1: OldestScalingConfiguration. Default value of RemovalPolicy.2: OldestInstance.
     */
    @JvmName("texhthxqncmsuhkr")
    public suspend fun removalPolicies(`value`: Output>) {
        this.removalPolicies = value
    }

    @JvmName("jrancvrytycfvbhd")
    public suspend fun removalPolicies(vararg values: Output) {
        this.removalPolicies = Output.all(values.asList())
    }

    /**
     * @param values RemovalPolicy is used to select the ECS instances you want to remove from the scaling group when multiple candidates for removal exist. Optional values:
     * - OldestInstance: removes the ECS instance that is added to the scaling group at the earliest point in time.
     * - NewestInstance: removes the ECS instance that is added to the scaling group at the latest point in time.
     * - OldestScalingConfiguration: removes the ECS instance that is created based on the earliest scaling configuration.
     * - Default values: Default value of RemovalPolicy.1: OldestScalingConfiguration. Default value of RemovalPolicy.2: OldestInstance.
     */
    @JvmName("loolrvywcngxdgro")
    public suspend fun removalPolicies(values: List>) {
        this.removalPolicies = Output.all(values)
    }

    /**
     * @param value The ID of the resource group to which you want to add the scaling group.
     */
    @JvmName("ojqjegnywmffjxco")
    public suspend fun resourceGroupId(`value`: Output) {
        this.resourceGroupId = value
    }

    /**
     * @param value Name shown for the scaling group, which must contain 2-64 characters (English or Chinese), starting with numbers, English letters or Chinese characters, and can contain numbers, underscores `_`, hyphens `-`, and decimal points `.`. If this parameter is not specified, the default value is ScalingGroupId.
     */
    @JvmName("hjmxxennecsxtlah")
    public suspend fun scalingGroupName(`value`: Output) {
        this.scalingGroupName = value
    }

    /**
     * @param value The reclaim mode of the scaling group. Optional values: recycle, release, forceRecycle, forceRelease.
     */
    @JvmName("ftayedmyowvnhdiu")
    public suspend fun scalingPolicy(`value`: Output) {
        this.scalingPolicy = value
    }

    /**
     * @param value The allocation policy of preemptible instances. You can use this parameter to individually specify the allocation policy for preemptible instances. This parameter takes effect only if you set MultiAZPolicy to COMPOSABLE.
     */
    @JvmName("hhdvglxheilxvepy")
    public suspend fun spotAllocationStrategy(`value`: Output) {
        this.spotAllocationStrategy = value
    }

    /**
     * @param value The number of Spot pools to use to allocate your Spot capacity. The Spot pools is composed of instance types of lowest price.
     */
    @JvmName("ullxptsajcwvwucx")
    public suspend fun spotInstancePools(`value`: Output) {
        this.spotInstancePools = value
    }

    /**
     * @param value Whether to replace spot instances with newly created spot/onDemand instance when receive a spot recycling message.
     */
    @JvmName("pdnknmlfrnnlbnca")
    public suspend fun spotInstanceRemedy(`value`: Output) {
        this.spotInstanceRemedy = value
    }

    /**
     * @param value A mapping of tags to assign to the resource.
     * - Key: It can be up to 64 characters in length. It cannot begin with "aliyun", "acs:", "http://", or "https://". It cannot be a null string.
     * - Value: It can be up to 128 characters in length. It cannot begin with "aliyun", "acs:", "http://", or "https://". It can be a null string.
     */
    @JvmName("fbuuuirjjecwuopj")
    public suspend fun tags(`value`: Output>) {
        this.tags = value
    }

    /**
     * @param value It has been deprecated from version 1.7.1 and new field 'vswitch_ids' replaces it.
     */
    @Deprecated(
        message = """
  Field 'vswitch_id' has been deprecated from provider version 1.7.1, and new field 'vswitch_ids'
      can replace it.
  """,
    )
    @JvmName("fxwkmchtqvadwyux")
    public suspend fun vswitchId(`value`: Output) {
        this.vswitchId = value
    }

    /**
     * @param value List of virtual switch IDs in which the ecs instances to be launched.
     */
    @JvmName("pcobikpdyunywaxd")
    public suspend fun vswitchIds(`value`: Output>) {
        this.vswitchIds = value
    }

    @JvmName("ojqjomvmwdxgpovr")
    public suspend fun vswitchIds(vararg values: Output) {
        this.vswitchIds = Output.all(values.asList())
    }

    /**
     * @param values List of virtual switch IDs in which the ecs instances to be launched.
     */
    @JvmName("ukjietrjvtstpkmq")
    public suspend fun vswitchIds(values: List>) {
        this.vswitchIds = Output.all(values)
    }

    /**
     * @param value If a Serve ALB instance is specified in the scaling group, the scaling group automatically attaches its ECS instances to the Server ALB instance.  See `alb_server_group` below for details.
     */
    @JvmName("ogotghiuteipjiqc")
    public suspend fun albServerGroups(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.albServerGroups = mapped
    }

    /**
     * @param argument If a Serve ALB instance is specified in the scaling group, the scaling group automatically attaches its ECS instances to the Server ALB instance.  See `alb_server_group` below for details.
     */
    @JvmName("ybjklvmtxbbnhtsp")
    public suspend fun albServerGroups(argument: List Unit>) {
        val toBeMapped = argument.toList().map {
            ScalingGroupAlbServerGroupArgsBuilder().applySuspend {
                it()
            }.build()
        }
        val mapped = of(toBeMapped)
        this.albServerGroups = mapped
    }

    /**
     * @param argument If a Serve ALB instance is specified in the scaling group, the scaling group automatically attaches its ECS instances to the Server ALB instance.  See `alb_server_group` below for details.
     */
    @JvmName("rpwthxgcakruawxs")
    public suspend fun albServerGroups(vararg argument: suspend ScalingGroupAlbServerGroupArgsBuilder.() -> Unit) {
        val toBeMapped = argument.toList().map {
            ScalingGroupAlbServerGroupArgsBuilder().applySuspend {
                it()
            }.build()
        }
        val mapped = of(toBeMapped)
        this.albServerGroups = mapped
    }

    /**
     * @param argument If a Serve ALB instance is specified in the scaling group, the scaling group automatically attaches its ECS instances to the Server ALB instance.  See `alb_server_group` below for details.
     */
    @JvmName("udpwgaotuyhykyfv")
    public suspend fun albServerGroups(argument: suspend ScalingGroupAlbServerGroupArgsBuilder.() -> Unit) {
        val toBeMapped = listOf(
            ScalingGroupAlbServerGroupArgsBuilder().applySuspend {
                argument()
            }.build(),
        )
        val mapped = of(toBeMapped)
        this.albServerGroups = mapped
    }

    /**
     * @param values If a Serve ALB instance is specified in the scaling group, the scaling group automatically attaches its ECS instances to the Server ALB instance.  See `alb_server_group` below for details.
     */
    @JvmName("vfmhgsfcbktngfxg")
    public suspend fun albServerGroups(vararg values: ScalingGroupAlbServerGroupArgs) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.albServerGroups = mapped
    }

    /**
     * @param value The allocation policy of instances. Auto Scaling selects instance types based on the allocation policy to create instances. The policy can be applied to pay-as-you-go instances and preemptible instances. This parameter takes effect only if you set MultiAZPolicy to COMPOSABLE.
     */
    @JvmName("jyjrpydrjwqmydhi")
    public suspend fun allocationStrategy(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.allocationStrategy = mapped
    }

    /**
     * @param value Specifies whether to evenly distribute instances in the scaling group across multiple zones. This parameter takes effect only if you set MultiAZPolicy to COMPOSABLE.
     */
    @JvmName("xuctuklhxwldnefo")
    public suspend fun azBalance(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.azBalance = mapped
    }

    /**
     * @param value If an RDS instance is specified in the scaling group, the scaling group automatically attaches the Intranet IP addresses of its ECS instances to the RDS access whitelist.
     * - The specified RDS instance must be in running status.
     * - The specified RDS instance’s whitelist must have room for more IP addresses.
     */
    @JvmName("dqklitlnbitqhlrk")
    public suspend fun dbInstanceIds(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.dbInstanceIds = mapped
    }

    /**
     * @param values If an RDS instance is specified in the scaling group, the scaling group automatically attaches the Intranet IP addresses of its ECS instances to the RDS access whitelist.
     * - The specified RDS instance must be in running status.
     * - The specified RDS instance’s whitelist must have room for more IP addresses.
     */
    @JvmName("onbsgxmaykbbijrq")
    public suspend fun dbInstanceIds(vararg values: String) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.dbInstanceIds = mapped
    }

    /**
     * @param value Default cool-down time (in seconds) of the scaling group. Value range: [0, 86400]. The default value is 300s.
     */
    @JvmName("cwhgndkujcknerfx")
    public suspend fun defaultCooldown(`value`: Int?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.defaultCooldown = mapped
    }

    /**
     * @param value Expected number of ECS instances in the scaling group. Value range: [min_size, max_size].
     */
    @JvmName("yjduhqdeeuojvuyy")
    public suspend fun desiredCapacity(`value`: Int?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.desiredCapacity = mapped
    }

    /**
     * @param value Specifies whether the scaling group deletion protection is enabled. `true` or `false`, Default value: `false`.
     */
    @JvmName("dfltgpqchrsbefqf")
    public suspend fun groupDeletionProtection(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.groupDeletionProtection = mapped
    }

    /**
     * @param value Resource type within scaling group. Optional values: ECS, ECI. Default to ECS.
     */
    @JvmName("vebtewdjrlrrwnng")
    public suspend fun groupType(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.groupType = mapped
    }

    /**
     * @param value Resource type within scaling group. Optional values: ECS, ECI, NONE, LOAD_BALANCER. Default to ECS.
     */
    @JvmName("twaegioqlyklppyf")
    public suspend fun healthCheckType(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.healthCheckType = mapped
    }

    /**
     * @param value The health check modes of the scaling group. Valid values: ECS, ECI, NONE, LOAD_BALANCER.
     */
    @JvmName("owdrngrxhesyxino")
    public suspend fun healthCheckTypes(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.healthCheckTypes = mapped
    }

    /**
     * @param values The health check modes of the scaling group. Valid values: ECS, ECI, NONE, LOAD_BALANCER.
     */
    @JvmName("igfcdukdlmaotnbm")
    public suspend fun healthCheckTypes(vararg values: String) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.healthCheckTypes = mapped
    }

    /**
     * @param value The ID of the instance from which Auto Scaling obtains the required configuration information and uses the information to automatically create a scaling configuration.
     */
    @JvmName("wpfgrcmygkiyjjyx")
    public suspend fun instanceId(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.instanceId = mapped
    }

    /**
     * @param value Instance launch template ID, scaling group obtains launch configuration from instance launch template, see [Launch Template](https://www.alibabacloud.com/help/doc-detail/73916.html). Creating scaling group from launch template enable group automatically.
     */
    @JvmName("ifnngajxnpokfyuc")
    public suspend fun launchTemplateId(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.launchTemplateId = mapped
    }

    /**
     * @param value The details of the instance types that are specified by using the Extend Instance Type of Launch Template feature.  See `launch_template_override` below for details.
     */
    @JvmName("pjarwjlblylwbpqv")
    public suspend fun launchTemplateOverrides(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.launchTemplateOverrides = mapped
    }

    /**
     * @param argument The details of the instance types that are specified by using the Extend Instance Type of Launch Template feature.  See `launch_template_override` below for details.
     */
    @JvmName("hinokhkpqgtvbdkl")
    public suspend fun launchTemplateOverrides(argument: List Unit>) {
        val toBeMapped = argument.toList().map {
            ScalingGroupLaunchTemplateOverrideArgsBuilder().applySuspend { it() }.build()
        }
        val mapped = of(toBeMapped)
        this.launchTemplateOverrides = mapped
    }

    /**
     * @param argument The details of the instance types that are specified by using the Extend Instance Type of Launch Template feature.  See `launch_template_override` below for details.
     */
    @JvmName("yodblyqwiogrljst")
    public suspend fun launchTemplateOverrides(vararg argument: suspend ScalingGroupLaunchTemplateOverrideArgsBuilder.() -> Unit) {
        val toBeMapped = argument.toList().map {
            ScalingGroupLaunchTemplateOverrideArgsBuilder().applySuspend { it() }.build()
        }
        val mapped = of(toBeMapped)
        this.launchTemplateOverrides = mapped
    }

    /**
     * @param argument The details of the instance types that are specified by using the Extend Instance Type of Launch Template feature.  See `launch_template_override` below for details.
     */
    @JvmName("mbyqfxbwhpfqfjxk")
    public suspend fun launchTemplateOverrides(argument: suspend ScalingGroupLaunchTemplateOverrideArgsBuilder.() -> Unit) {
        val toBeMapped = listOf(
            ScalingGroupLaunchTemplateOverrideArgsBuilder().applySuspend {
                argument()
            }.build(),
        )
        val mapped = of(toBeMapped)
        this.launchTemplateOverrides = mapped
    }

    /**
     * @param values The details of the instance types that are specified by using the Extend Instance Type of Launch Template feature.  See `launch_template_override` below for details.
     */
    @JvmName("ciwhnoqcrptggrif")
    public suspend fun launchTemplateOverrides(vararg values: ScalingGroupLaunchTemplateOverrideArgs) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.launchTemplateOverrides = mapped
    }

    /**
     * @param value The version number of the launch template. Valid values are the version number, `Latest`, or `Default`, Default value: `Default`.
     */
    @JvmName("apuanycthnihlakw")
    public suspend fun launchTemplateVersion(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.launchTemplateVersion = mapped
    }

    /**
     * @param value If a Server Load Balancer instance is specified in the scaling group, the scaling group automatically attaches its ECS instances to the Server Load Balancer instance.
     * - The Server Load Balancer instance must be enabled.
     * - At least one listener must be configured for each Server Load Balancer and it HealthCheck must be on. Otherwise, creation will fail (it may be useful to add a `depends_on` argument
     * targeting your `alicloud.slb.Listener` in order to make sure the listener with its HealthCheck configuration is ready before creating your scaling group).
     * - The Server Load Balancer instance attached with VPC-type ECS instances cannot be attached to the scaling group.
     * - The default weight of an ECS instance attached to the Server Load Balancer instance is 50.
     */
    @JvmName("otpqgkrmrkrwpvja")
    public suspend fun loadbalancerIds(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.loadbalancerIds = mapped
    }

    /**
     * @param values If a Server Load Balancer instance is specified in the scaling group, the scaling group automatically attaches its ECS instances to the Server Load Balancer instance.
     * - The Server Load Balancer instance must be enabled.
     * - At least one listener must be configured for each Server Load Balancer and it HealthCheck must be on. Otherwise, creation will fail (it may be useful to add a `depends_on` argument
     * targeting your `alicloud.slb.Listener` in order to make sure the listener with its HealthCheck configuration is ready before creating your scaling group).
     * - The Server Load Balancer instance attached with VPC-type ECS instances cannot be attached to the scaling group.
     * - The default weight of an ECS instance attached to the Server Load Balancer instance is 50.
     */
    @JvmName("qtjmpapusfavumtf")
    public suspend fun loadbalancerIds(vararg values: String) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.loadbalancerIds = mapped
    }

    /**
     * @param value The maximum life span of an instance in the scaling group. Unit: seconds.
     */
    @JvmName("ykkygcdfjvfvbrgg")
    public suspend fun maxInstanceLifetime(`value`: Int?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.maxInstanceLifetime = mapped
    }

    /**
     * @param value Maximum number of ECS instances in the scaling group. Value range: [0, 2000].
     * **NOTE:** From version 1.204.1, `max_size` can be set to `2000`.
     */
    @JvmName("caruvixpmuxcgypo")
    public suspend fun maxSize(`value`: Int?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.maxSize = mapped
    }

    /**
     * @param value Minimum number of ECS instances in the scaling group. Value range: [0, 2000].
     * **NOTE:** From version 1.204.1, `min_size` can be set to `2000`.
     */
    @JvmName("iycgqibkbprwpkgc")
    public suspend fun minSize(`value`: Int?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.minSize = mapped
    }

    /**
     * @param value Multi-AZ scaling group ECS instance expansion and contraction strategy. PRIORITY, COMPOSABLE, BALANCE or COST_OPTIMIZED(Available since v1.54.0).
     */
    @JvmName("qtgvvstapakbytwx")
    public suspend fun multiAzPolicy(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.multiAzPolicy = mapped
    }

    /**
     * @param value The minimum amount of the Auto Scaling group's capacity that must be fulfilled by On-Demand Instances. This base portion is provisioned first as your group scales.
     */
    @JvmName("vcxpdngkvbalohcl")
    public suspend fun onDemandBaseCapacity(`value`: Int?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.onDemandBaseCapacity = mapped
    }

    /**
     * @param value Controls the percentages of On-Demand Instances and Spot Instances for your additional capacity beyond OnDemandBaseCapacity.
     */
    @JvmName("wgfkeiuwdxnfuqbx")
    public suspend fun onDemandPercentageAboveBaseCapacity(`value`: Int?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.onDemandPercentageAboveBaseCapacity = mapped
    }

    /**
     * @param value Set or unset instances within group into protected status.
     */
    @JvmName("tacbkxlyfxgjsdty")
    public suspend fun protectedInstances(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.protectedInstances = mapped
    }

    /**
     * @param values Set or unset instances within group into protected status.
     */
    @JvmName("ywwdtcrhsdofkdlh")
    public suspend fun protectedInstances(vararg values: String) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.protectedInstances = mapped
    }

    /**
     * @param value RemovalPolicy is used to select the ECS instances you want to remove from the scaling group when multiple candidates for removal exist. Optional values:
     * - OldestInstance: removes the ECS instance that is added to the scaling group at the earliest point in time.
     * - NewestInstance: removes the ECS instance that is added to the scaling group at the latest point in time.
     * - OldestScalingConfiguration: removes the ECS instance that is created based on the earliest scaling configuration.
     * - Default values: Default value of RemovalPolicy.1: OldestScalingConfiguration. Default value of RemovalPolicy.2: OldestInstance.
     */
    @JvmName("bhdpyvdepfjojytb")
    public suspend fun removalPolicies(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.removalPolicies = mapped
    }

    /**
     * @param values RemovalPolicy is used to select the ECS instances you want to remove from the scaling group when multiple candidates for removal exist. Optional values:
     * - OldestInstance: removes the ECS instance that is added to the scaling group at the earliest point in time.
     * - NewestInstance: removes the ECS instance that is added to the scaling group at the latest point in time.
     * - OldestScalingConfiguration: removes the ECS instance that is created based on the earliest scaling configuration.
     * - Default values: Default value of RemovalPolicy.1: OldestScalingConfiguration. Default value of RemovalPolicy.2: OldestInstance.
     */
    @JvmName("ytowqguuwwdbwmvb")
    public suspend fun removalPolicies(vararg values: String) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.removalPolicies = mapped
    }

    /**
     * @param value The ID of the resource group to which you want to add the scaling group.
     */
    @JvmName("xflnxinghuycgohw")
    public suspend fun resourceGroupId(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.resourceGroupId = mapped
    }

    /**
     * @param value Name shown for the scaling group, which must contain 2-64 characters (English or Chinese), starting with numbers, English letters or Chinese characters, and can contain numbers, underscores `_`, hyphens `-`, and decimal points `.`. If this parameter is not specified, the default value is ScalingGroupId.
     */
    @JvmName("dsbwddrcudopoxnv")
    public suspend fun scalingGroupName(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.scalingGroupName = mapped
    }

    /**
     * @param value The reclaim mode of the scaling group. Optional values: recycle, release, forceRecycle, forceRelease.
     */
    @JvmName("mjgppihietgvgidv")
    public suspend fun scalingPolicy(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.scalingPolicy = mapped
    }

    /**
     * @param value The allocation policy of preemptible instances. You can use this parameter to individually specify the allocation policy for preemptible instances. This parameter takes effect only if you set MultiAZPolicy to COMPOSABLE.
     */
    @JvmName("bcbwtiardehxhvux")
    public suspend fun spotAllocationStrategy(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.spotAllocationStrategy = mapped
    }

    /**
     * @param value The number of Spot pools to use to allocate your Spot capacity. The Spot pools is composed of instance types of lowest price.
     */
    @JvmName("wpsyaptufprmeohk")
    public suspend fun spotInstancePools(`value`: Int?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.spotInstancePools = mapped
    }

    /**
     * @param value Whether to replace spot instances with newly created spot/onDemand instance when receive a spot recycling message.
     */
    @JvmName("grsbbcafxiiiexyn")
    public suspend fun spotInstanceRemedy(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.spotInstanceRemedy = mapped
    }

    /**
     * @param value A mapping of tags to assign to the resource.
     * - Key: It can be up to 64 characters in length. It cannot begin with "aliyun", "acs:", "http://", or "https://". It cannot be a null string.
     * - Value: It can be up to 128 characters in length. It cannot begin with "aliyun", "acs:", "http://", or "https://". It can be a null string.
     */
    @JvmName("gdvcwrudnogdelje")
    public suspend fun tags(`value`: Map?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.tags = mapped
    }

    /**
     * @param values A mapping of tags to assign to the resource.
     * - Key: It can be up to 64 characters in length. It cannot begin with "aliyun", "acs:", "http://", or "https://". It cannot be a null string.
     * - Value: It can be up to 128 characters in length. It cannot begin with "aliyun", "acs:", "http://", or "https://". It can be a null string.
     */
    @JvmName("rveyohlqlcipdenw")
    public fun tags(vararg values: Pair) {
        val toBeMapped = values.toMap()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.tags = mapped
    }

    /**
     * @param value It has been deprecated from version 1.7.1 and new field 'vswitch_ids' replaces it.
     */
    @Deprecated(
        message = """
  Field 'vswitch_id' has been deprecated from provider version 1.7.1, and new field 'vswitch_ids'
      can replace it.
  """,
    )
    @JvmName("hxqycpscxinjipkm")
    public suspend fun vswitchId(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.vswitchId = mapped
    }

    /**
     * @param value List of virtual switch IDs in which the ecs instances to be launched.
     */
    @JvmName("qgfjsrugjcqqaeuu")
    public suspend fun vswitchIds(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.vswitchIds = mapped
    }

    /**
     * @param values List of virtual switch IDs in which the ecs instances to be launched.
     */
    @JvmName("wfvrynuowbdcsnnb")
    public suspend fun vswitchIds(vararg values: String) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.vswitchIds = mapped
    }

    internal fun build(): ScalingGroupArgs = ScalingGroupArgs(
        albServerGroups = albServerGroups,
        allocationStrategy = allocationStrategy,
        azBalance = azBalance,
        dbInstanceIds = dbInstanceIds,
        defaultCooldown = defaultCooldown,
        desiredCapacity = desiredCapacity,
        groupDeletionProtection = groupDeletionProtection,
        groupType = groupType,
        healthCheckType = healthCheckType,
        healthCheckTypes = healthCheckTypes,
        instanceId = instanceId,
        launchTemplateId = launchTemplateId,
        launchTemplateOverrides = launchTemplateOverrides,
        launchTemplateVersion = launchTemplateVersion,
        loadbalancerIds = loadbalancerIds,
        maxInstanceLifetime = maxInstanceLifetime,
        maxSize = maxSize,
        minSize = minSize,
        multiAzPolicy = multiAzPolicy,
        onDemandBaseCapacity = onDemandBaseCapacity,
        onDemandPercentageAboveBaseCapacity = onDemandPercentageAboveBaseCapacity,
        protectedInstances = protectedInstances,
        removalPolicies = removalPolicies,
        resourceGroupId = resourceGroupId,
        scalingGroupName = scalingGroupName,
        scalingPolicy = scalingPolicy,
        spotAllocationStrategy = spotAllocationStrategy,
        spotInstancePools = spotInstancePools,
        spotInstanceRemedy = spotInstanceRemedy,
        tags = tags,
        vswitchId = vswitchId,
        vswitchIds = vswitchIds,
    )
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy