2013-06-27 33 views
2

我有一個腳本,需要用一個新的LaunchConfiguration更新一個名爲AutoScalingGroup的新創建的AMI。不幸的是,文檔不好,我厭倦了反覆試驗。這是我到目前爲止有:使用boto中的新LaunchConfiguration更新AutoScalingGroup

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(即我會遇到一些限制),這有什麼關係?

回答

2

我並不熟悉boto,但我可以清楚地瞭解AWS中的自動縮放問題。要更新自動調節組的啓動配置,您必須創建新的啓動配置並更新自動調節組的啓動配置。您可以爲launchconfig保留兩個名稱。因此,如果第一個名稱正在使用,則使用第二個名稱刪除啓動配置,然後在更新自動擴展組之後使用第二個名稱創建一個新配置,如果使用的launchconfig具有第二個名稱,則相同。所以,你一次只有兩個啓動配置。

希望我已經正確理解你的問題。

+0

感謝您的指導。我可能會嘗試使用兩種啓動配置的方法。這真是太遺憾了! – jberryman

7

我正經歷着類似的問題,當試圖更新現有的自動縮放組,併成功地將其與你在原來的職位建議的過程中理清:在使用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() 
+0

launch_config在定義之後是否在此代碼中使用? – Sirex

+0

@Sirex - 的確,我現在修復了這個問題(兩年之後,哈哈) – Andrew