AWS — связывание VPC с созданием балансировщика нагрузки с использованием boto API

Я относительно новичок в автоматизации с помощью boto и создал скрипт, который настраивает инфраструктуру автоматического масштабирования на AWS с использованием boto API Python.

Однако я не могу связать свой VPC с моим созданием балансировщика нагрузки. Следующий код возвращает ошибку неправильного ввода:

zoneStrings = 'eu-west-1a', 'eu-west-1b' #The availability zones of my VPC
elb_conn = boto.ec2.elb.connect_to_region('eu-west-1') #

lb_name = 'my-lb'
zones = zoneStrings
subnets = 'subnet-09519f50', 'subnet-9fa12dfa' #VPC subnets
ports= [(80, 80, 'http'), (443, 443, 'tcp')]
lb = elb_conn.create_load_balancer(lb_name, zones, subnets, ports)

Ошибка полностью:

  Traceback (most recent call last):
  File "./test.py", line 70, in <module>
    lb = elb_conn.create_load_balancer(lb_name, zones, subnets, ports)
  File "/usr/local/lib/python2.7/dist-packages/boto/ec2/elb/__init__.py", line 243, in create_load_balancer
    params, LoadBalancer)
  File "/usr/local/lib/python2.7/dist-packages/boto/connection.py", line 1207, in get_object
    raise self.ResponseError(response.status, response.reason, body)
boto.exception.BotoServerError: BotoServerError: 400 Bad Request
<ErrorResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/">
  <Error>
    <Type>Sender</Type>
    <Code>MalformedInput</Code>
  </Error>
  <RequestId>12659703-a021-11e4-9488-1f8ceceab6a1</RequestId>
</ErrorResponse>

Мы будем очень признательны за любое понимание.


person AD26891    schedule 19.01.2015    source источник


Ответы (1)


В документации boto указано, что порядок параметров метода create_load_balancer следующий:

  • название
  • зоны
  • слушатели
  • подсети
  • ...

Вы, кажется, поставляете их в другом порядке. Возможно, самый безопасный подход — использовать аргументы с ключевыми словами, а не полагаться на позиционный порядок. Так:

lb = elb_conn.create_load_balancer(name=lb_name, zones=zones, subnets=subnets, listeners=ports)

Это работает для вас?

person garnaat    schedule 20.01.2015
comment
Спасибо за вашу помощь: сработало следующее: lb = elb_conn.create_load_balancer(name=lb_name, zone=zones, subnets=subnets, listeners=ports, security_groups=sg). Любопытно, что порядок документации — слушатели перед подсетями, что не сработало бы для меня. boto.readthedocs.org/en/ последняя/ссылка/ - person AD26891; 20.01.2015
comment
Кроме того, значение zone не должно быть равным none, иначе это вызовет конфликт с подсетями vpc. - person AD26891; 20.01.2015