Updated on 2024-09-26 GMT+08:00

Adding a Forwarding Rule

Function

This API is used to add a forwarding rule.

Constraints

If the action of 17policy is set to Redirect to another listener, 17rule cannot be created.

Calling Method

For details, see Calling APIs.

URI

POST /v3/{project_id}/elb/l7policies/{l7policy_id}/rules

Table 1 Path Parameters

Parameter

Mandatory

Type

Description

l7policy_id

Yes

String

Specifies the forwarding policy ID.

project_id

Yes

String

Specifies the project ID.

Request Parameters

Table 2 Request header parameters

Parameter

Mandatory

Type

Description

X-Auth-Token

Yes

String

Specifies the token used for IAM authentication.

Table 3 Request body parameters

Parameter

Mandatory

Type

Description

rule

Yes

CreateRuleOption object

Specifies the forwarding rule.

Table 4 CreateRuleOption

Parameter

Mandatory

Type

Description

admin_state_up

No

Boolean

Specifies the administrative status of the forwarding rule. The value can only be true.

compare_type

Yes

String

Specifies how requests are matched with the forwarding rule.

The value can be:

  • EQUAL_TO: exact match.

  • REGEX: regular expression match

  • STARTS_WITH: prefix match

Notes and constraints:

  • If type is set to HOST_NAME, the value can only be EQUAL_TO, and asterisks (*) can be used as wildcard characters.

  • If type is set to PATH, the value can be REGEX, STARTS_WITH, or EQUAL_TO.

  • If type is set to METHOD or SOURCE_IP, the value can only be EQUAL_TO.

  • If type is set to HEADER or QUERY_STRING, the value can only be EQUAL_TO, asterisks (*) and question marks (?) can be used as wildcard characters.

key

No

String

Specifies the key of match content. For example, if the request header is used for forwarding, key is the request header.

This parameter is unsupported. Please do not use it.

value

Yes

String

Specifies the value of the match item. For example, if a domain name is used for matching, value is the domain name.

Notes and constraints:

  • This parameter will take effect only when conditions is left blank.

  • If type is set to HOST_NAME, the value can contain letters, digits, hyphens (-), and periods (.) and must start with a letter or digit. If you want to use a wildcard domain name, enter an asterisk (*) as the leftmost label of the domain name.

  • If type is set to PATH and compare_type to STARTS_WITH or EQUAL_TO, the value must start with a slash (/) and can contain only letters, digits, and special characters _~';@^-%#&$.*+?,=!:|\/()[]{}

  • If type is set to METHOD, SOURCE_IP, HEADER, or QUERY_STRING, this parameter will not take effect, and conditions will be used to specify the key and value.

project_id

No

String

Specifies the project ID.

type

Yes

String

Specifies the type of the forwarding rule.

The value can be one of the following:

  • HOST_NAME: A domain name will be used for matching.

  • PATH: A URL will be used for matching.

  • METHOD: An HTTP request method will be used for matching.

  • HEADER: The request header will be used for matching.

  • QUERY_STRING: A query string will be used for matching.

  • SOURCE_IP: The source IP address will be used for matching.

  • COOKIE: The cookie will be used for matching.

Notes and constraints:

If type is set to HOST_NAME, PATH, METHOD, or SOURCE_IP, only one forwarding rule can be created for each type. If type is set to HEADER and QUERY_STRING, multiple forwarding rules can be created for each type.

invert

No

Boolean

Specifies whether reverse matching is supported.

The value can be true or false, and the default value is false.

This parameter is unsupported. Please do not use it.

conditions

No

Array of CreateRuleCondition objects

Specifies the conditions contained in a forwarding rule.

Notes and constraints:

  • This parameter will take effect when enhance_l7policy_enable is set to true.

  • If conditions is specified, key and value will not take effect.

  • The keys in the list must be the same, whereas each value must be unique.

Table 5 CreateRuleCondition

Parameter

Mandatory

Type

Description

key

No

String

Specifies the key of match item.

Notes and constraints:

  • All keys in the conditions list in the same rule must be the same.

  • If type is set to HOST_NAME, PATH, METHOD, or SOURCE_IP, this parameter is an empty string.

  • If type is set to HEADER, key indicates the name of the HTTP header parameter, and value indicates the value of the request header parameter. The value can contain 1 to 40 characters, including letters, digits, hyphens (-), and underscores (_).

  • If type is set to QUERY_STRING, key indicates the name of the query parameter, and value indicates the value of the query parameter. The key is case sensitive and can contain 1 to 128 characters. Spaces, square brackets ([ ]), curly brackets ({ }), angle brackets (< >), backslashes (), double quotation marks (" "), pound signs (#), ampersands (&), vertical bars (|), percent signs (%), and tildes (~) are not supported.

value

Yes

String

Specifies the value of the match item.

Notes and constraints:

  • The key of each condition in a forwarding policy must be the same.

  • The value of each condition in a forwarding policy must be unique.

Value ranges:

  • If type is set to HOST_NAME, key is left blank, value indicates the domain name, which can contain 1 to 128 characters, including letters, digits, hyphens (-), periods (.), and asterisks (), and must start with a letter, digit, or asterisk (). If you want to use a wildcard domain name, enter an asterisk (*) as the leftmost label of the domain name.

  • If type is set to PATH, key is left blank, value indicates the request path, which can contain 1 to 128 characters. If compare_type is set to STARTS_WITH or EQUAL_TO for the forwarding rule, the value must start with a slash (/) and can contain only letters, digits, and special characters _~';@^-%#&$.*+?,=!:|/()[]{}

  • If type is set to HEADER, key indicates the name of the HTTP header parameter and value indicates the value of the HTTP header parameter. The value can contain 1 to 128 characters. Asterisks (*) and question marks (?) are allowed, but spaces and double quotation marks are not allowed. An asterisk can match zero or more characters, and a question mark can match 1 character.

  • If type is set to QUERY_STRING, key indicates the name of the query parameter and value indicates the value of the query parameter. The value is case sensitive and can contain 1 to 128 characters. Spaces, square brackets ([ ]), curly brackets ({ }), angle brackets (< >), backslashes (), double quotation marks (" "), pound signs (#), ampersands (&), vertical bars (|), percent signs (%), and tildes (~) are not supported. Asterisks (*) and question marks (?) are allowed. An asterisk can match zero or more characters, and a question mark can match 1 character.

  • If type is set to METHOD, key is left blank, value indicates the HTTP method. The value can be GET, PUT, POST, DELETE, PATCH, HEAD, or OPTIONS.

  • If type is set to SOURCE_IP, key is left blank, value indicates the source IP address of the request. The value is an IPv4 or IPv6 CIDR block, for example, 192.168.0.2/32 or 2049::49/64.

Response Parameters

Status code: 201

Table 6 Response body parameters

Parameter

Type

Description

request_id

String

Specifies the request ID.

Note: The value is automatically generated.

rule

L7Rule object

Specifies the forwarding rule.

Table 7 L7Rule

Parameter

Type

Description

admin_state_up

Boolean

Specifies the administrative status of the forwarding rule. The default value is true.

This parameter is unsupported. Please do not use it.

compare_type

String

Specifies how requests are matched with the domain name or URL.

Value ranges:

  • If type is set to HOST_NAME, this parameter can only be set to EQUAL_TO.

  • If type is set to PATH, the value can be REGEX, STARTS_WITH, or EQUAL_TO.

key

String

Specifies the key of the match content.

This parameter will not take effect if type is set to HOST_NAME or PATH.

project_id

String

Specifies the project ID.

type

String

Specifies the type of the forwarding rule.

The value can be one of the following:

  • HOST_NAME: A domain name will be used for matching.

  • PATH: A URL will be used for matching.

  • METHOD: An HTTP request method will be used for matching.

  • HEADER: The request header will be used for matching.

  • QUERY_STRING: A query string will be used for matching.

  • SOURCE_IP: The source IP address will be used for matching.

  • COOKIE: The cookie will be used for matching.

Notes and constraints:

If type is set to HOST_NAME, PATH, METHOD, or SOURCE_IP, only one forwarding rule can be created for each type. If type is set to HEADER and QUERY_STRING, multiple forwarding rules can be created for each type.

value

String

Specifies the value of the match item. For example, if a domain name is used for matching, value is the domain name.

Notes and constraints:

  • This parameter will take effect only when conditions is left blank.

  • If type is set to HOST_NAME, the value can contain letters, digits, hyphens (-), and periods (.) and must start with a letter or digit. If you want to use a wildcard domain name, enter an asterisk (*) as the leftmost label of the domain name.

  • If type is set to PATH and compare_type to STARTS_WITH or EQUAL_TO, the value must start with a slash (/) and can contain only letters, digits, and special characters _~';@^-%#&$.*+?,=!:|\/()[]{}

  • If type is set to METHOD, SOURCE_IP, HEADER, or QUERY_STRING, this parameter will not take effect, and conditions will be used to specify the key and value.

provisioning_status

String

Specifies the provisioning status of the forwarding rule.

The value can only be ACTIVE (default), PENDING_CREATE, or ERROR.

invert

Boolean

Specifies whether reverse matching is supported.

The value is fixed at false. This parameter can be updated but will not take effect.

id

String

Specifies the forwarding policy ID.

conditions

Array of RuleCondition objects

Specifies the conditions contained in a forwarding rule.

Notes and constraints:

  • This parameter will take effect when enhance_l7policy_enable is set to true.

  • If conditions is specified, key and value will not take effect.

  • The keys in the list must be the same, whereas each value must be unique.

created_at

String

Specifies the time when the forwarding policy was added.

The format is yyyy-MM-dd'T'HH:mm:ss'Z' (UTC time).

This is a new field in this version, and it will not be returned for resources associated with existing dedicated load balancers and for resources associated with existing and new shared load balancers.

updated_at

String

Specifies the time when the forwarding policy was updated.

The format is yyyy-MM-dd'T'HH:mm:ss'Z' (UTC time).

This is a new field in this version, and it will not be returned for resources associated with existing dedicated load balancers and for resources associated with existing and new shared load balancers.

Table 8 RuleCondition

Parameter

Type

Description

key

String

Specifies the key of match item.

Notes and constraints:

  • All keys in the conditions list in the same rule must be the same.

  • If type is set to HOST_NAME, PATH, METHOD, or SOURCE_IP, this parameter is an empty string.

  • If type is set to HEADER, key indicates the name of the HTTP header parameter, and value indicates the value of the request header parameter. The value can contain 1 to 40 characters, including letters, digits, hyphens (-), and underscores (_).

  • If type is set to QUERY_STRING, key indicates the name of the query parameter, and value indicates the value of the query parameter. The key is case sensitive and can contain 1 to 128 characters. Spaces, square brackets ([ ]), curly brackets ({ }), angle brackets (< >), backslashes (), double quotation marks (" "), pound signs (#), ampersands (&), vertical bars (|), percent signs (%), and tildes (~) are not supported.

value

String

Specifies the value of the match item.

Notes and constraints:

The value of each condition in a forwarding policy must be unique.

Value ranges:

  • If type is set to HOST_NAME, key is left blank, value indicates the domain name, which can contain 1 to 128 characters, including letters, digits, hyphens (-), periods (.), and asterisks (), and must start with a letter, digit, or asterisk (). If you want to use a wildcard domain name, enter an asterisk (*) as the leftmost label of the domain name.

  • If type is set to PATH, key is left blank, value indicates the request path, which can contain 1 to 128 characters. If compare_type is set to STARTS_WITH or EQUAL_TO for the forwarding rule, the value must start with a slash (/) and can contain only letters, digits, and special characters _~';@^-%#&$.*+?,=!:|/()[]{}

  • If type is set to HEADER, key indicates the name of the HTTP header parameter and value indicates the value of the HTTP header parameter. The value can contain 1 to 128 characters. Asterisks (*) and question marks (?) are allowed, but spaces and double quotation marks are not allowed. An asterisk can match zero or more characters, and a question mark can match 1 character.

  • If type is set to QUERY_STRING, key indicates the name of the query parameter and value indicates the value of the query parameter. The value is case sensitive and can contain 1 to 128 characters. Spaces, square brackets ([ ]), curly brackets ({ }), angle brackets (< >), backslashes (), double quotation marks (" "), pound signs (#), ampersands (&), vertical bars (|), percent signs (%), and tildes (~) are not supported. Asterisks (*) and question marks (?) are allowed. An asterisk can match zero or more characters, and a question mark can match 1 character.

  • If type is set to METHOD, key is left blank, value indicates the HTTP method. The value can be GET, PUT, POST, DELETE, PATCH, HEAD, or OPTIONS.

  • If type is set to SOURCE_IP, key is left blank, value indicates the source IP address of the request. The value is an IPv4 or IPv6 CIDR block, for example, 192.168.0.2/32 or 2049::49/64.

Example Requests

Creating a forwarding rule and setting type to PATH*

POST https://{ELB_Endpoint}/v3/{99a3fff0d03c428eac3678da6a7d0f24}/elb/l7policies/cf4360fd-8631-41ff-a6f5-b72c35da74be/rules

{
  "rule" : {
    "compare_type" : "EQUAL_TO",
    "type" : "PATH",
    "value" : "/bbb.html"
  }
}

Example Responses

Status code: 201

Normal response to POST requests.

{
  "rule" : {
    "compare_type" : "EQUAL_TO",
    "provisioning_status" : "ACTIVE",
    "project_id" : "99a3fff0d03c428eac3678da6a7d0f24",
    "invert" : false,
    "admin_state_up" : true,
    "value" : "/bbb.html",
    "key" : null,
    "type" : "PATH",
    "id" : "84f4fcae-9c15-4e19-a99f-72c0b08fd3d7"
  },
  "request_id" : "3639f1b7-f04b-496e-9218-ec5a9e493f69"
}

SDK Sample Code

The SDK sample code is as follows.

Creating a forwarding rule and setting type to PATH*

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package com.huaweicloud.sdk.test;

import com.huaweicloud.sdk.core.auth.ICredential;
import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.core.exception.ConnectionException;
import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
import com.huaweicloud.sdk.core.exception.ServiceResponseException;
import com.huaweicloud.sdk.elb.v3.region.ElbRegion;
import com.huaweicloud.sdk.elb.v3.*;
import com.huaweicloud.sdk.elb.v3.model.*;


public class CreateL7RuleSolution {

    public static void main(String[] args) {
        // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
        // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
        String ak = System.getenv("CLOUD_SDK_AK");
        String sk = System.getenv("CLOUD_SDK_SK");
        String projectId = "{project_id}";

        ICredential auth = new BasicCredentials()
                .withProjectId(projectId)
                .withAk(ak)
                .withSk(sk);

        ElbClient client = ElbClient.newBuilder()
                .withCredential(auth)
                .withRegion(ElbRegion.valueOf("<YOUR REGION>"))
                .build();
        CreateL7RuleRequest request = new CreateL7RuleRequest();
        request.withL7policyId("{l7policy_id}");
        CreateL7RuleRequestBody body = new CreateL7RuleRequestBody();
        CreateRuleOption rulebody = new CreateRuleOption();
        rulebody.withCompareType("EQUAL_TO")
            .withValue("/bbb.html")
            .withType("PATH");
        body.withRule(rulebody);
        request.withBody(body);
        try {
            CreateL7RuleResponse response = client.createL7Rule(request);
            System.out.println(response.toString());
        } catch (ConnectionException e) {
            e.printStackTrace();
        } catch (RequestTimeoutException e) {
            e.printStackTrace();
        } catch (ServiceResponseException e) {
            e.printStackTrace();
            System.out.println(e.getHttpStatusCode());
            System.out.println(e.getRequestId());
            System.out.println(e.getErrorCode());
            System.out.println(e.getErrorMsg());
        }
    }
}

Creating a forwarding rule and setting type to PATH*

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# coding: utf-8

import os
from huaweicloudsdkcore.auth.credentials import BasicCredentials
from huaweicloudsdkelb.v3.region.elb_region import ElbRegion
from huaweicloudsdkcore.exceptions import exceptions
from huaweicloudsdkelb.v3 import *

if __name__ == "__main__":
    # The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
    # In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
    ak = os.environ["CLOUD_SDK_AK"]
    sk = os.environ["CLOUD_SDK_SK"]
    projectId = "{project_id}"

    credentials = BasicCredentials(ak, sk, projectId)

    client = ElbClient.new_builder() \
        .with_credentials(credentials) \
        .with_region(ElbRegion.value_of("<YOUR REGION>")) \
        .build()

    try:
        request = CreateL7RuleRequest()
        request.l7policy_id = "{l7policy_id}"
        rulebody = CreateRuleOption(
            compare_type="EQUAL_TO",
            value="/bbb.html",
            type="PATH"
        )
        request.body = CreateL7RuleRequestBody(
            rule=rulebody
        )
        response = client.create_l7_rule(request)
        print(response)
    except exceptions.ClientRequestException as e:
        print(e.status_code)
        print(e.request_id)
        print(e.error_code)
        print(e.error_msg)

Creating a forwarding rule and setting type to PATH*

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package main

import (
	"fmt"
	"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic"
    elb "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/elb/v3"
	"github.com/huaweicloud/huaweicloud-sdk-go-v3/services/elb/v3/model"
    region "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/elb/v3/region"
)

func main() {
    // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
    // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
    ak := os.Getenv("CLOUD_SDK_AK")
    sk := os.Getenv("CLOUD_SDK_SK")
    projectId := "{project_id}"

    auth := basic.NewCredentialsBuilder().
        WithAk(ak).
        WithSk(sk).
        WithProjectId(projectId).
        Build()

    client := elb.NewElbClient(
        elb.ElbClientBuilder().
            WithRegion(region.ValueOf("<YOUR REGION>")).
            WithCredential(auth).
            Build())

    request := &model.CreateL7RuleRequest{}
	request.L7policyId = "{l7policy_id}"
	rulebody := &model.CreateRuleOption{
		CompareType: "EQUAL_TO",
		Value: "/bbb.html",
		Type: "PATH",
	}
	request.Body = &model.CreateL7RuleRequestBody{
		Rule: rulebody,
	}
	response, err := client.CreateL7Rule(request)
	if err == nil {
        fmt.Printf("%+v\n", response)
    } else {
        fmt.Println(err)
    }
}

For SDK sample code of more programming languages, see the Sample Code tab in API Explorer. SDK sample code can be automatically generated.

Status Codes

Status Code

Description

201

Normal response to POST requests.

Error Codes

See Error Codes.