[英]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.