AWS ELB 规则中侦听器优先级的默认值
Default Value for Listener Priority in AWS ELB Rules
我正在尝试通过 JavaScript SDK 在 AWS ELB 中创建多个侦听器规则。必填 priority
字段要求您添加优先级。而且我不想每次添加新规则时都必须检查现有规则的优先级。
我想知道是否有人知道设置默认值的方法。假设我有优先级为 1 2 3
的规则,有没有一种方法可以设置它,以便我添加的下一条规则的优先级为 4?
我尝试了一种解决方法,将优先级设置为非常高的数字,在 AWS 中,它会将其推回到规则 1 2 3。但在系统本身中,优先级仍然存储作为我给的那个大数字。
可以找到我正在使用的 createRule()
函数 here
我 运行 独自研究这个问题,并认为我会分享我的解决方案,因为这个问题已经将近一年没有得到解答。据我所知,仅使用 AWS 无法做到这一点,但通过一些额外的逻辑,我们可以将其自动化。
RULE_COUNT=$(aws elbv2 describe-rules --listener-arn "${LISTENER_ARN}" | jq ".Rules | length")
aws elbv2 create-rule --listener-arn "${LISTENER_ARN}" --cli-input-json "${RULE_TEMPLATE}" --priority "${RULE_COUNT}"
jq
是 json 解析器,它是几乎所有基于 *nix 的系统的一部分,我们可以使用它来确定 awscli
returns 的规则数量.您定义的 n
规则应该有 n + 1
规则,以及 AWS 始终保持最低默认优先级的一个默认规则。因此,根据您的问题,下一个优先级将只是 AWS 中的规则总数。
编辑: 经过更多时间处理后,我发现亚马逊不一定以任何可预测的方式保持优先级。
第一个答案仅在优先级连续且占据尽可能低的优先级时才有效。例如,如果您有 n
规则,则代码假定优先级 运行ge 始终为 1..n
。事实证明,亚马逊的优先级似乎可以是任何东西,有时 AWS 会在编辑、添加或删除规则时更改所有优先级数字(但保持所有内容的顺序相同)。
我有一个案例,我有 8 个规则,Amazon 最初按预期给了它们 1-8
的优先级,但是在通过控制台编辑规则的顺序后,Amazon 决定更改规则的优先级至 2-9
。更糟糕的是,在玩弄它并尝试学习该系统后,我最终达到了亚马逊给我优先级 11-16
和 19-20
的地步,这是我放弃并试图找出一个更好的系统的地方。
RULE_COUNT=$(aws elbv2 describe-rules --listener-arn "${LISTENER_ARN}" | jq -r '[.Rules[].Priority][0:-1] | map(.|tonumber) | max + 1')
aws elbv2 create-rule --listener-arn "${LISTENER_ARN}" --cli-input-json "${RULE_TEMPLATE}" --priority "${RULE_COUNT}"
这段代码主要是找到所有不同规则的优先级,将它们放在一个列表中,找到列表中最大的优先级并向其添加一个。如果您的优先级列表像我的那样被扔掉,这应该会起作用,但我真的希望 AWS 只添加一种简单的方法来添加规则,而不必关心转移其他所有事物的优先级或必须解析它们的 JSON 找出下一个可用优先级在非连续数组中的位置。
我正在尝试通过 JavaScript SDK 在 AWS ELB 中创建多个侦听器规则。必填 priority
字段要求您添加优先级。而且我不想每次添加新规则时都必须检查现有规则的优先级。
我想知道是否有人知道设置默认值的方法。假设我有优先级为 1 2 3
的规则,有没有一种方法可以设置它,以便我添加的下一条规则的优先级为 4?
我尝试了一种解决方法,将优先级设置为非常高的数字,在 AWS 中,它会将其推回到规则 1 2 3。但在系统本身中,优先级仍然存储作为我给的那个大数字。
可以找到我正在使用的 createRule()
函数 here
我 运行 独自研究这个问题,并认为我会分享我的解决方案,因为这个问题已经将近一年没有得到解答。据我所知,仅使用 AWS 无法做到这一点,但通过一些额外的逻辑,我们可以将其自动化。
RULE_COUNT=$(aws elbv2 describe-rules --listener-arn "${LISTENER_ARN}" | jq ".Rules | length")
aws elbv2 create-rule --listener-arn "${LISTENER_ARN}" --cli-input-json "${RULE_TEMPLATE}" --priority "${RULE_COUNT}"
jq
是 json 解析器,它是几乎所有基于 *nix 的系统的一部分,我们可以使用它来确定 awscli
returns 的规则数量.您定义的 n
规则应该有 n + 1
规则,以及 AWS 始终保持最低默认优先级的一个默认规则。因此,根据您的问题,下一个优先级将只是 AWS 中的规则总数。
编辑: 经过更多时间处理后,我发现亚马逊不一定以任何可预测的方式保持优先级。
第一个答案仅在优先级连续且占据尽可能低的优先级时才有效。例如,如果您有 n
规则,则代码假定优先级 运行ge 始终为 1..n
。事实证明,亚马逊的优先级似乎可以是任何东西,有时 AWS 会在编辑、添加或删除规则时更改所有优先级数字(但保持所有内容的顺序相同)。
我有一个案例,我有 8 个规则,Amazon 最初按预期给了它们 1-8
的优先级,但是在通过控制台编辑规则的顺序后,Amazon 决定更改规则的优先级至 2-9
。更糟糕的是,在玩弄它并尝试学习该系统后,我最终达到了亚马逊给我优先级 11-16
和 19-20
的地步,这是我放弃并试图找出一个更好的系统的地方。
RULE_COUNT=$(aws elbv2 describe-rules --listener-arn "${LISTENER_ARN}" | jq -r '[.Rules[].Priority][0:-1] | map(.|tonumber) | max + 1')
aws elbv2 create-rule --listener-arn "${LISTENER_ARN}" --cli-input-json "${RULE_TEMPLATE}" --priority "${RULE_COUNT}"
这段代码主要是找到所有不同规则的优先级,将它们放在一个列表中,找到列表中最大的优先级并向其添加一个。如果您的优先级列表像我的那样被扔掉,这应该会起作用,但我真的希望 AWS 只添加一种简单的方法来添加规则,而不必关心转移其他所有事物的优先级或必须解析它们的 JSON 找出下一个可用优先级在非连续数组中的位置。