如何在侦听器规则上创建多个条件

时间:2019-07-08 16:55:09

标签: amazon-web-services amazon-cloudformation aws-load-balancer

我正在尝试创建具有两个不同条件的侦听器规则,但是我一直都出错。

    "ListenerRule": {
      "Type": "AWS::ElasticLoadBalancingV2::ListenerRule",
      "Properties": {
          "Actions": [
                    {
                     "Type": "forward",
                     "TargetGroupArn": {
                     "Ref": "SwaggBOTG"
                    }
            }
           ],
       "Conditions": [
                    {
                        "Field": "query-string",
                        "QueryStringConfig": {
                            "Values": [
                                {
                                    "Key": "app",
                                    "Value": "two"
                                }
                            ]
                        },
                        "Field" : "path-pattern",
                        "PathPatternConfig": {
                            "Values" : [ "/one/*" ]
                        }
                    }
        ],

我需要两个不同的条件。其中一个应该是查询字符串类型,另一个应该是路径-路径类型。我只能创建其中之一,但不能同时创建。

下一个错误:

You cannot specify 'QueryStringConfig' for actions of type 'path-pattern' (Service: AmazonElasticLoadBalancingV2; Status Code: 400; Error Code: ValidationError;

我认为这是某种语法,但我没有发现问题。

谢谢。

1 个答案:

答案 0 :(得分:0)

问题在于Conditions是单独条件的列表。在这种情况下,您应该在该列表中有2个单独的项目。如果您仔细查看json,可以看到您在同一级别两次定义了Field。第二个"Field" : "path-pattern"会覆盖第一个"Field": "query-string",因此该错误告诉您无法为'QueryStringConfig'定义"PathPatternConfig",这是因为您不能这样做。

这是Conditions的正确定义。

"Conditions": [
    {
        "Field": "path-pattern",
        "Values": ["/one/*"],
        "PathPatternConfig": {
            "Values": ["/one/*"]
        }
    },
    {
        "Field": "query-string",
        "QueryStringConfig": {
            "Values": [
                {
                    "Value": "two",
                    "Key": "app"
                }
            ]
        }
    }
]