MasterSlaveServerGroupArgs

data class MasterSlaveServerGroupArgs(val deleteProtectionValidation: Output<Boolean>? = null, val loadBalancerId: Output<String>? = null, val name: Output<String>? = null, val servers: Output<List<MasterSlaveServerGroupServerArgs>>? = null) : ConvertibleToJava<MasterSlaveServerGroupArgs>

A master slave server group contains two ECS instances. The master slave server group can help you to define multiple listening dimension.

NOTE: One ECS instance can be added into multiple master slave server groups. NOTE: One master slave server group can only add two ECS instances, which are master server and slave server. NOTE: One master slave server group can be attached with tcp/udp listeners in one load balancer. NOTE: One Classic and Internet load balancer, its master slave server group can add Classic and VPC ECS instances. NOTE: One Classic and Intranet load balancer, its master slave server group can only add Classic ECS instances. NOTE: One VPC load balancer, its master slave server group can only add the same VPC ECS instances. NOTE: Available in 1.54.0+

Example Usage

package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
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.Instance;
import com.pulumi.alicloud.ecs.InstanceArgs;
import com.pulumi.alicloud.slb.ApplicationLoadBalancer;
import com.pulumi.alicloud.slb.ApplicationLoadBalancerArgs;
import com.pulumi.alicloud.ecs.EcsNetworkInterface;
import com.pulumi.alicloud.ecs.EcsNetworkInterfaceArgs;
import com.pulumi.alicloud.ecs.EcsNetworkInterfaceAttachment;
import com.pulumi.alicloud.ecs.EcsNetworkInterfaceAttachmentArgs;
import com.pulumi.alicloud.slb.MasterSlaveServerGroup;
import com.pulumi.alicloud.slb.MasterSlaveServerGroupArgs;
import com.pulumi.alicloud.slb.inputs.MasterSlaveServerGroupServerArgs;
import com.pulumi.alicloud.slb.Listener;
import com.pulumi.alicloud.slb.ListenerArgs;
import com.pulumi.codegen.internal.KeyedValue;
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 msServerGroupZones = AlicloudFunctions.getZones(GetZonesArgs.builder()
.availableDiskCategory("cloud_efficiency")
.availableResourceCreation("VSwitch")
.build());
final var msServerGroupInstanceTypes = EcsFunctions.getInstanceTypes(GetInstanceTypesArgs.builder()
.availabilityZone(msServerGroupZones.applyValue(getZonesResult -> getZonesResult.zones()[0].id()))
.eniAmount(2)
.build());
final var image = EcsFunctions.getImages(GetImagesArgs.builder()
.nameRegex("^ubuntu_18.*64")
.mostRecent(true)
.owners("system")
.build());
final var slbMasterSlaveServerGroup = config.get("slbMasterSlaveServerGroup").orElse("forSlbMasterSlaveServerGroup");
var mainNetwork = new Network("mainNetwork", NetworkArgs.builder()
.vpcName(slbMasterSlaveServerGroup)
.cidrBlock("172.16.0.0/16")
.build());
var mainSwitch = new Switch("mainSwitch", SwitchArgs.builder()
.vpcId(mainNetwork.id())
.cidrBlock("172.16.0.0/16")
.zoneId(msServerGroupZones.applyValue(getZonesResult -> getZonesResult.zones()[0].id()))
.vswitchName(slbMasterSlaveServerGroup)
.build());
var groupSecurityGroup = new SecurityGroup("groupSecurityGroup", SecurityGroupArgs.builder()
.vpcId(mainNetwork.id())
.build());
for (var i = 0; i < 2; i++) {
new Instance("msServerGroupInstance-" + i, InstanceArgs.builder()
.imageId(image.applyValue(getImagesResult -> getImagesResult.images()[0].id()))
.instanceType(msServerGroupInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.instanceTypes()[0].id()))
.instanceName(slbMasterSlaveServerGroup)
.securityGroups(groupSecurityGroup.id())
.internetChargeType("PayByTraffic")
.internetMaxBandwidthOut("10")
.availabilityZone(msServerGroupZones.applyValue(getZonesResult -> getZonesResult.zones()[0].id()))
.instanceChargeType("PostPaid")
.systemDiskCategory("cloud_efficiency")
.vswitchId(mainSwitch.id())
.build());
}
var msServerGroupApplicationLoadBalancer = new ApplicationLoadBalancer("msServerGroupApplicationLoadBalancer", ApplicationLoadBalancerArgs.builder()
.loadBalancerName(slbMasterSlaveServerGroup)
.vswitchId(mainSwitch.id())
.loadBalancerSpec("slb.s2.small")
.build());
var msServerGroupEcsNetworkInterface = new EcsNetworkInterface("msServerGroupEcsNetworkInterface", EcsNetworkInterfaceArgs.builder()
.networkInterfaceName(slbMasterSlaveServerGroup)
.vswitchId(mainSwitch.id())
.securityGroupIds(groupSecurityGroup.id())
.build());
var msServerGroupEcsNetworkInterfaceAttachment = new EcsNetworkInterfaceAttachment("msServerGroupEcsNetworkInterfaceAttachment", EcsNetworkInterfaceAttachmentArgs.builder()
.instanceId(msServerGroupInstance[0].id())
.networkInterfaceId(msServerGroupEcsNetworkInterface.id())
.build());
var groupMasterSlaveServerGroup = new MasterSlaveServerGroup("groupMasterSlaveServerGroup", MasterSlaveServerGroupArgs.builder()
.loadBalancerId(msServerGroupApplicationLoadBalancer.id())
.servers(
MasterSlaveServerGroupServerArgs.builder()
.serverId(msServerGroupInstance[0].id())
.port(100)
.weight(100)
.serverType("Master")
.build(),
MasterSlaveServerGroupServerArgs.builder()
.serverId(msServerGroupInstance[1].id())
.port(100)
.weight(100)
.serverType("Slave")
.build())
.build());
var tcp = new Listener("tcp", ListenerArgs.builder()
.loadBalancerId(msServerGroupApplicationLoadBalancer.id())
.masterSlaveServerGroupId(groupMasterSlaveServerGroup.id())
.frontendPort("22")
.protocol("tcp")
.bandwidth("10")
.healthCheckType("tcp")
.persistenceTimeout(3600)
.healthyThreshold(8)
.unhealthyThreshold(8)
.healthCheckTimeout(8)
.healthCheckInterval(5)
.healthCheckHttpCode("http_2xx")
.healthCheckConnectPort(20)
.healthCheckUri("/console")
.establishedTimeout(600)
.build());
}
}

Block servers

The servers mapping supports the following:

  • server_ids - (Required) A list backend server ID (ECS instance ID).

  • port - (Required) The port used by the backend server. Valid value range: 1-65535.

  • weight - (Optional) Weight of the backend server. Valid value range: 0-100. Default to 100.

  • type - (Optional, Available in 1.51.0+) Type of the backend server. Valid value ecs, eni. Default to eni.

  • server_type - (Optional) The server type of the backend server. Valid value Master, Slave.

  • is_backup - (Removed from v1.63.0) Determine if the server is executing. Valid value 0, 1.

Import

Load balancer master slave server group can be imported using the id, e.g.

$ pulumi import alicloud:slb/masterSlaveServerGroup:MasterSlaveServerGroup example abc123456

Constructors

Link copied to clipboard
fun MasterSlaveServerGroupArgs(deleteProtectionValidation: Output<Boolean>? = null, loadBalancerId: Output<String>? = null, name: Output<String>? = null, servers: Output<List<MasterSlaveServerGroupServerArgs>>? = null)

Functions

Link copied to clipboard
open override fun toJava(): MasterSlaveServerGroupArgs

Properties

Link copied to clipboard
val deleteProtectionValidation: Output<Boolean>? = null

Checking DeleteProtection of SLB instance before deleting. If true, this resource will not be deleted when its SLB instance enabled DeleteProtection. Default to false.

Link copied to clipboard
val loadBalancerId: Output<String>? = null

The Load Balancer ID which is used to launch a new master slave server group.

Link copied to clipboard
val name: Output<String>? = null

Name of the master slave server group.

Link copied to clipboard

A list of ECS instances to be added. Only two ECS instances can be supported in one resource. It contains six sub-fields as Block server follows.