我正在亚马逊网络服务上做一个令人尴尬的并行操作,其中我正在启动大量的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的标签系统可以工作,但我不知道如何以类似的并行方式分配标签。 是否有任何类型的特定于实例的数据可以并行分配给一组实例?
答案 0 :(得分:0)
AFAIK,没有简单的解决方案。如何使用Simple Queue Service(SQS)
?
user-data
写为
如果您的脚本高于256k,则不要直接将其添加到SQS。所以,试试这个程序。
user-data
写为
抱歉,这很复杂。希望这会有所帮助。
答案 1 :(得分:0)
简单。在初始化每个节点之前分叉。
newPid = os.fork()
if newPid == 0:
is_master = False
# Create the instance
...blah blah blah...
else:
logging.info( 'Launched host %s ...' % hostname )