Rule Args
A forwarding rule is configured in HTTP
/HTTPS
listener and it used to listen a list of backend servers which in one specified virtual backend server group. You can add forwarding rules to a listener to forward requests based on the domain names or the URL in the request.
NOTE: One virtual backend server group can be attached in multiple forwarding rules. NOTE: At least one "Domain" or "Url" must be specified when creating a new rule. NOTE: Having the same 'Domain' and 'Url' rule can not be created repeatedly in the one listener. NOTE: Rule only be created in the
HTTP
orHTTPS
listener. NOTE: Only rule's virtual server group can be modified.
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.slb.Listener;
import com.pulumi.alicloud.slb.ListenerArgs;
import com.pulumi.alicloud.slb.ServerGroup;
import com.pulumi.alicloud.slb.ServerGroupArgs;
import com.pulumi.alicloud.slb.Rule;
import com.pulumi.alicloud.slb.RuleArgs;
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 slbRuleName = config.get("slbRuleName").orElse("terraform-example");
final var ruleZones = AlicloudFunctions.getZones(GetZonesArgs.builder()
.availableDiskCategory("cloud_efficiency")
.availableResourceCreation("VSwitch")
.build());
final var ruleInstanceTypes = EcsFunctions.getInstanceTypes(GetInstanceTypesArgs.builder()
.availabilityZone(ruleZones.applyValue(getZonesResult -> getZonesResult.zones()[0].id()))
.cpuCoreCount(1)
.memorySize(2)
.build());
final var ruleImages = EcsFunctions.getImages(GetImagesArgs.builder()
.nameRegex("^ubuntu_18.*64")
.mostRecent(true)
.owners("system")
.build());
var ruleNetwork = new Network("ruleNetwork", NetworkArgs.builder()
.vpcName(slbRuleName)
.cidrBlock("172.16.0.0/16")
.build());
var ruleSwitch = new Switch("ruleSwitch", SwitchArgs.builder()
.vpcId(ruleNetwork.id())
.cidrBlock("172.16.0.0/16")
.zoneId(ruleZones.applyValue(getZonesResult -> getZonesResult.zones()[0].id()))
.vswitchName(slbRuleName)
.build());
var ruleSecurityGroup = new SecurityGroup("ruleSecurityGroup", SecurityGroupArgs.builder()
.vpcId(ruleNetwork.id())
.build());
var ruleInstance = new Instance("ruleInstance", InstanceArgs.builder()
.imageId(ruleImages.applyValue(getImagesResult -> getImagesResult.images()[0].id()))
.instanceType(ruleInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.instanceTypes()[0].id()))
.securityGroups(ruleSecurityGroup.stream().map(element -> element.id()).collect(toList()))
.internetChargeType("PayByTraffic")
.internetMaxBandwidthOut("10")
.availabilityZone(ruleZones.applyValue(getZonesResult -> getZonesResult.zones()[0].id()))
.instanceChargeType("PostPaid")
.systemDiskCategory("cloud_efficiency")
.vswitchId(ruleSwitch.id())
.instanceName(slbRuleName)
.build());
var ruleApplicationLoadBalancer = new ApplicationLoadBalancer("ruleApplicationLoadBalancer", ApplicationLoadBalancerArgs.builder()
.loadBalancerName(slbRuleName)
.vswitchId(ruleSwitch.id())
.instanceChargeType("PayByCLCU")
.build());
var ruleListener = new Listener("ruleListener", ListenerArgs.builder()
.loadBalancerId(ruleApplicationLoadBalancer.id())
.backendPort(22)
.frontendPort(22)
.protocol("http")
.bandwidth(5)
.healthCheckConnectPort("20")
.build());
var ruleServerGroup = new ServerGroup("ruleServerGroup", ServerGroupArgs.builder()
.loadBalancerId(ruleApplicationLoadBalancer.id())
.build());
var ruleRule = new Rule("ruleRule", RuleArgs.builder()
.loadBalancerId(ruleApplicationLoadBalancer.id())
.frontendPort(ruleListener.frontendPort())
.domain("*.aliyun.com")
.url("/image")
.serverGroupId(ruleServerGroup.id())
.cookie("23ffsa")
.cookieTimeout(100)
.healthCheckHttpCode("http_2xx")
.healthCheckInterval(10)
.healthCheckUri("/test")
.healthCheckConnectPort(80)
.healthCheckTimeout(30)
.healthyThreshold(3)
.unhealthyThreshold(5)
.stickySession("on")
.stickySessionType("server")
.listenerSync("off")
.scheduler("rr")
.healthCheckDomain("test")
.healthCheck("on")
.build());
}
}
Import
Load balancer forwarding rule can be imported using the id, e.g.
$ pulumi import alicloud:slb/rule:Rule example rule-abc123456
Constructors
Functions
Properties
The cookie configured on the server. It is mandatory when sticky_session
is "on" and sticky_session_type
is "server". Otherwise, it will be ignored. Valid value:String in line with RFC 2965, with length being 1- 200. It only contains characters such as ASCII codes, English letters and digits instead of the comma, semicolon or spacing, and it cannot start with $.
Domain name used for health check. When it used to launch TCP listener, health_check_type
must be "http". Its length is limited to 1-80 and only characters such as letters, digits, ‘-‘ and ‘.’ are allowed. When it is not set or empty, Server Load Balancer uses the private network IP address of each backend server as Domain used for health check.