如何编写可以启动新EC2实例的python脚本?

时间:2013-04-09 19:49:04

标签: python amazon-web-services amazon-ec2

我正在为一个新项目编写一个后端,在这个后端我想要一个控制器程序。

该项目是大学的网站,但我需要为每所大学提供一个新的Amazon EC2实例。我希望扩展尽可能轻松。

简而言之,我希望能够运行controller new harvard并让它执行以下操作:

  • 创建新的EC2实例。
  • 使用名称(哈佛)及其位置(如何访问它)在本地数据库中创建一个新条目。
  • 连接到新创建的实例并开始发送和执行文件。

我已经阅读了一些关于boto和Fabric的内容,但没有任何关于如何开始的真正领导。

任何帮助都会受到大力赞赏。

1 个答案:

答案 0 :(得分:3)

我已经使用boto库为我的一些项目实例化了新的EC2实例,然后在引导后使用fabric执行新EC2系统的配置。

要使用它们,首先需要为亚马逊自己创建访问令牌。对于boto,这些标记放在源文件中,并在EC2实例的connect方法中使用,或者您可以将它们放入主目录中的.boto文件中。后者更容易。

亚马逊需要的是:

  • 安全组名称和sshkey。
  • 您希望创建的实例的Ami id。
  • 您想要的实例类型,例如:m1.small

根据以上信息,您将使用以上信息调用run_instance方法:

instance = conn.run_instances( ami.ami_id, key_name=ami.sshkey.name,
     instance_type=server.game.instance_type,
     security_groups=[server.game.security_group] )
instance = instance.instances[0]

while instance.update() == "pending":
    time.sleep( 5 )

完成此操作后,新实例应该开始在您的Amazon控制面板中启动。您需要检查实例的状态,一旦它处于running状态,您就可以使用Fabric来配置实例。

with settings( host_string="ec2-user@%s" % instance.ip_address,
    key_filename=os.path.join( os.getenv( "HOME" ), 
    ".ssh", "%s.pem" % ami.sshkey.name ),
    connection_attempts=5, timeout=60 ):

    ...
    sudo( "yum -y install mysql mysql-devel" )
    ...

通过上面的内容,它将在同一个文件中运行fabric命令,但是使用Fabric的更受控制的方法是通过fab文件。这些在Fabric文档中得到了更好的解释。

以上是我根据需要自动创建和设置实例的内容,因此请调整代码以适合您的需要。