AWS ELB规则中听众优先级的默认值



我正在尝试通过JavaScript SDK在AWS ELB中创建多个侦听器规则。所需的priority字段要求您添加优先级。而且我不想检查每次我想添加新规则的现有规则优先级是什么。

我想知道是否有人知道一种设置默认值的方法。假设我有优先级的规则1 2 3,是否有一种方法可以设置它,以便我添加的下一个规则将具有4个优先级?

我已经尝试了一项工作的工作,我将优先级设定为一个非常高的数字,在AWS中,它将其推迟到规则1 2 3.但是在系统本身中,优先级仍然存储为我给了它。

我正在使用的createRule()功能可以在此处找到

我自己遇到了这个问题,并认为我会分享我的解决方案,因为这个问题已经将近一年了。据我所知,仅使用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是几乎所有基于 *nix的系统的JSON解析器,我们可以使用它来确定awscli返回的规则数量。您已定义的n规则以及一个默认规则,AWS始终保持最低的默认优先级,该规则应该有n + 1规则。因此,根据您的问题的下一个优先级将只是AWS中的规则总数。


编辑:在使用更多时间后,我发现亚马逊不一定以任何可预测的方式保留优先级。 第一个答案仅在优先级连续并占据最低优先级时起作用。例如,如果您有n规则,则代码假定优先级范围始终为1..n。事实证明,亚马逊的优先级似乎可以是任何事物,有时AWS在编辑,添加或删除规则时会更改所有优先级数字(但要保持相同的顺序)。

我有一个我有8个规则的情况,亚马逊最初按照预期将1-8的优先级给予了优先级,但是在通过控制台通过控制台编辑规则的顺序后,亚马逊决定将规则的优先级更改为2-9。在玩游戏并尝试学习系统后,更糟糕的是,我最终到达了亚马逊给我优先级11-1619-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}"

此代码基本上找到了所有不同规则的优先级,将它们放在列表中,找到了列表中最大的优先级,并在其中添加了一个。如果您的优先级列表像我一样从WACK中丢弃,这应该可以起作用,尽管我确实希望AWS只会添加一种简单的方法来添加规则,而不必关心其他所有事物的优先级或必须解析其JSON的优先级弄清楚下一个可用优先级在非连续数组中的位置。

最新更新