簡體   English   中英

如果第一個規則優先級已使用 elbv2 create_rule 設置為“1”,如何在偵聽器規則之上插入新的 elbv2 規則?

[英]How to insert a new elbv2 rule on top of listener rules if the first rule Priority is already set to '1' using elbv2 create_rule?

我正在編寫一個腳本,它將在 alb 中已經存在的偵聽器規則之上插入一個新的 elbv2 偵聽器規則。

    response = elbv2_client.create_rule(
        ListenerArn=listener_arn,
        Priority=1,
        Conditions=[
            {
                'Field': 'http-request-method',
                'HttpRequestMethodConfig': {
                    'Values': ['GET']
                }

            }

        ],
        Actions=[
            {
                'Type': 'fixed-response',
                'FixedResponseConfig':
                    {
                        'ContentType': 'text/html',
                        'MessageBody': html_object,
                        'StatusCode': '504'
                    }
            }
        ]
    )

就像您在 AWS 控制台上在頂部插入新規則時所做的那樣,這些規則會自動重新編號。

問題是規則 ['Priority'] 編號與 AWS 控制台中顯示的編號不同(如此處的注釋所述: https://docs.aws.amazon.com/elasticloadbalancing/latest/application/listener -update-rules.html

注意:控制台顯示每個規則的相對序列號,而不是規則優先級。 您可以通過使用 AWS CLI 或 Elastic Load Balancing API 描述規則來獲取規則的優先級。

當我使用 elbv2 create_rule() 時,如果最上面的規則設置為 Priority = 1,它會給我這個錯誤。

botocore.errorfactory.PriorityInUseException:調用 CreateRule 操作時發生錯誤(PriorityInUse):當前正在使用優先級“1”

蒂亞!

我對此的解決方案來自上面@jordanm 的想法。

基本上要創建 2 個功能:一個用於通過在添加新規則之前添加 +1 來重新索引規則優先級,這將自動在頂部結束。 如果我要恢復到舊規則,我還有另一個 function 通過減去 -1 重新索引優先級規則。

def reindex_forward(elbv2_client, listener_rules):
    for rule in reversed(listener_rules):
        if rule['Priority'] != 'default':
            new_priority = int(rule['Priority']) + 1
            elbv2_client.set_rule_priorities(
            RulePriorities=[
                {
                    'RuleArn': rule['RuleArn'],
                    'Priority': new_priority
                }
            ]
        )
    return


def reindex_back(elbv2_client, listener_rules):
    for index, rule in enumerate(listener_rules, start=1):
        if rule['Priority'] != 'default':
            elbv2_client.set_rule_priorities(
            RulePriorities=[
                {
                    'RuleArn': rule['RuleArn'],
                    'Priority': index
                }
            ]
        )
        else:
            return
    return

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM