Актуализиране на 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. Така че, ако първото име се използва, изтрийте конфигурацията за стартиране с второто име и създайте нова с второто име след тази група за автоматично мащабиране на актуализацията и същото, ако използваната launchconfig има второто име. Така че ще имате само две конфигурации за стартиране наведнъж.

Надявам се, че съм разбрал правилно проблема ви.

person Ruchit Rami    schedule 27.06.2013
comment
Благодаря за насоките. Вероятно ще опитам този метод с две конфигурации за стартиране. Жалко, че това е толкова тромаво! - person jberryman; 27.06.2013