如何使用Python Boto修改LB属性以启用连接排空
我一直在尝试使用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 个回答
当你修改负载均衡器的 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)
下面是创建一个 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 文档 中找到。