Обновление AutoScalingGroup новой LaunchConfiguration в boto

У меня есть сценарий, который должен обновить именованную группу AutoScalingGroup новой LaunchConfiguration для какого-то нового только что созданного AMI. К сожалению, документация не очень хороша, и я устал от проб и ошибок. Это то, что у меня есть до сих пор:

build_autoscale_name = "build_autoscaling"
build_autoscale_lc = LaunchConfiguration(
                           ...launch config stuff...
                           , image_id=imid  # new AMI
                           )
as_conn.create_launch_configuration(build_autoscale_lc)
ag = AutoScalingGroup(
            group_name=build_autoscale_name
          , launch_config=build_autoscale_lc
          ...other ASG stuff...
          )
as_conn.create_auto_scaling_group(ag)

Последний способ, которым это не удается, - это:

Конфигурация запуска с таким именем уже существует

Если я прокомментирую create_launch_configuration(), я получу:

AutoScalingGroup с таким названием уже существует

Я вижу, что у AutoScalingGroup есть метод update; мне нужно, возможно, get_all_groups() затем обновиться с помощью новой LaunchConfiguration с тем же именем? Или имеет значение, если я каждый раз буду создавать LaunchConfiguration с новым именем (т.е. уложусь ли я в какой-то лимит)?


person jberryman    schedule 27.06.2013    source источник


Ответы (2)


У меня возникла аналогичная проблема при попытке обновить существующую группу автомасштабирования, и мне удалось разобраться с ней с помощью процесса, который вы предложили в своем исходном сообщении: используя get_all_groups() для получения группы автомасштабирования, а затем calling update() для объекта после обновления атрибуты.

Полный пример:

autoscaling_group_name = 'my-test-asg'

launch_config_name = 'my-test-lc'

launch_config = LaunchConfiguration( name=launch_config_name,
                    image_id=image_id,
                    key_name=ssh_key_name,
                    security_groups=security_groups,
                    user_data=user_data,
                    instance_type=instance_type,
                    associate_public_ip_address=associate_public_ip )

as_group = as_conn.get_all_groups(names=[autoscaling_group_name])[0]

setattr(as_group, launch_config_name, launch_config)

as_group.update()
person Andrew    schedule 25.02.2014
comment
launch_config не используется в этом коде после определения? - person Sirex; 26.05.2014
comment
@Sirex - да, действительно, я исправил это сейчас (более двух лет спустя, лол) - person Andrew; 09.09.2016

Я не знаком с boto, но могу развеять некоторые сомнения по поводу автоматического масштабирования в AWS. Чтобы обновить конфигурацию запуска группы автомасштабирования, вам необходимо создать новую конфигурацию запуска и обновить конфигурацию запуска для группы автомасштабирования. Вы можете оставить два имени для launchconfig. Поэтому, если используется первое имя, удалите конфигурацию запуска со вторым именем и создайте новую со вторым именем после этой группы автоматического масштабирования обновления и то же самое, если используемая конфигурация запуска имеет второе имя. Таким образом, у вас будет только два конфига запуска одновременно.

Надеюсь, я правильно понял вашу проблему.

person Ruchit Rami    schedule 27.06.2013
comment
Спасибо за руководство. Я, вероятно, попробую этот метод с двумя конфигурациями запуска. Жаль, что это так неуклюже! - person jberryman; 27.06.2013