EC2 run_instances:许多实例,启动脚本略有不同?

时间:2014-07-18 15:45:47

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

我正在亚马逊网络服务上做一个令人尴尬的并行操作,其中我正在启动大量的EC2实例,这些实例在启动时运行的脚本略有不同。目前,我在for循环中单独启动每个实例(我正在使用Python boto包与AWS交谈):

for parameters in parameter_list:
    #Create this instance's startup script
    user_data = startup_script%parameters 

    #Run this instance 
    reservation = ec2.run_instances(ami,
                                key_name=key_name,
                                security_groups=group_name,
                                instance_type=instance_type,
                                user_data=user_data)

然而,这需要太长时间。 ec2.run_instances允许您使用max_count关键字一次启动多个实例。我想同时创建许多实例传递每个自己独特的启动脚本(user_data)。有没有办法做到这一点?人们不能只将脚本列表传递给user_data。

一种选择是传递相同的启动脚本,但让脚本引用与该实例关联的另一个数据。 EC2的标签系统可以工作,但我不知道如何以类似的并行方式分配标签。 是否有任何类型的特定于实例的数据可以并行分配给一组实例?

2 个答案:

答案 0 :(得分:0)

AFAIK,没有简单的解决方案。如何使用Simple Queue Service(SQS)

  1. 启动脚本(也称为用户数据)添加到SQS
  2. user-data写为
    • 从SQS读取启动脚本并运行它
  3. 如果您的脚本高于256k,则不要直接将其添加到SQS。所以,试试这个程序。

    1. 启动脚本(也称为用户数据)添加到S3
    2. 将脚本的S3网址添加到SQS
    3. user-data写为
      • 阅读SQS的网址
      • 从S3下载脚本
      • 运行它
    4. 抱歉,这很复杂。希望这会有所帮助。

答案 1 :(得分:0)

简单。在初始化每个节点之前分叉。

newPid = os.fork()
if newPid == 0:
    is_master = False

    # Create the instance
    ...blah blah blah...
else:
    logging.info( 'Launched host %s ...' % hostname )
相关问题