如何使用Python Boto修改LB属性以启用连接排空

0 投票
2 回答
652 浏览
提问于 2025-04-18 15:45

我一直在尝试使用Python的boto模块中的modify_lb_attribute方法来启用ELB的连接排空功能,但一直没能成功。根据这里的文档 http://boto.readthedocs.org/en/latest/ref/elb.html,我应该可以这样调用它:

modify_lb_attribute(load_balancer_name, attribute, value)

这里有个例子:

modify_lb_attribute('my-elb', 'connectionDraining', 120)

但是当我这样做时,我收到了以下错误信息:

文件 "/Library/Python/2.7/site-packages/boto/ec2/elb/init.py",第421行,在modify_lb_attribute中 value.enabled和'true'或'false' AttributeError: 'NoneType'对象没有'enabled'这个属性

我已经成功地用crossZoneLoadBalancing让它工作了。

例如,这个可以正常工作:

modify_lb_attribute('my-elb', 'crossZoneLoadBalancing', 'true')

任何帮助或建议都非常感谢。

谢谢

2 个回答

0

当你修改负载均衡器的 connectionDraining 属性时,其实可以提供两个值。第一个是一个 boolean 值,用来表示你是要开启还是关闭连接排空功能。第二个是一个整数,表示 timeout,这个值只有在你开启连接排空功能时才会用到。

为了让你能同时指定这两个值,boto 在 boto.ec2.elb.attributes 中定义了一个 ConnectionDrainingAttribute 类。你需要将这个类的一个实例作为值传递给 modify_elb_attribute,例如:

from boto.ec2.elb.attributes import ConnectionDrainingAttribute

cda = ConnectionDrainingAttribute()
cda.enabled = True
cda.timeout = 120
...
modify_lb_attribute('my-elb', cda)
3

下面是创建一个 ConnectionDrainingAttribute 对象并把它传给负载均衡器的正确写法:

from boto.ec2.elb.attributes import ConnectionDrainingAttribute
import boto.ec2.elb

connection = boto.ec2.elb.connect_to_region("region") 
cda = ConnectionDrainingAttribute(connection)
cda.enabled = True  
cda.timeout = 120
connection.modify_lb_attribute( 
    load_balancer_name='my-elb',
    attribute='connectionDraining',
    value=cda
)

关于 ConnectionDrainingAttribute 类的更多信息,可以在 boto 文档 中找到。

撰写回答