我想在EC2上运行python脚本。 python脚本需要加载.pickle
文件。该脚本从Amazon队列(SQS)获取文档并处理它们。
我的问题: 自动缩放是如何工作的?这些单独的实例(或虚拟服务器)是否需要分别执行文件的版本?如果是这种情况,我该如何在该实例上执行该文件?创建一个AMI映像,在启动时自动执行脚本?我找到了一种方法来启动带有图像的实例并发送脚本以使用user_data参数运行,但是这如何在自动缩放上运行?就像我说的那样,那些单独的实例也是如此吗?或者这只是一个实例,它可以扩大更多的CPU功率和内存?
我正在创建一个Python脚本,它使用我在cronjob中运行的boto的自动缩放接口(http://boto.readthedocs.org/en/latest/autoscale_tut.html)。它需要每天多次检查SQS,并根据队列消息的数量向上或向下扩展实例。那是不是正确的方式?
答案 0 :(得分:3)
所以你基本上只是模仿AWS自动缩放的工作流程,同时也注入你自己的bootstrapping:
向上扩展:
缩小规模:
启动引导的首选方法是使用user-data字段加载一个简单的脚本来下载第二个shell脚本。我通常用bash做到这一点,但世界上没有理由它不能成为python脚本。但是这种方式引导脚本是隔离的(并没有卡在AMI中),因此我可以自由更新或调整它,而无需重新执行AMI。
AMI /root/scripts/bootstrap-me.sh
内置的脚本可能只包含:
#!/bin/bash
/usr/bin/aws s3 cp s3://my.bucket/my-init-script.py ./
/usr/bin/python my-init-script.py
/usr/bin/aws s3 cp s3://my.bucket/here-is-my.pickle ./
然后你的my-init-script.py
可以包含你需要的任何基于python的逻辑,包括执行你刚刚抓到的.pickle文件。
无论何时手动或自动触发自动扩展(扩展),您都应该只传递用户数据来执行bootstrap-me.sh
shell脚本,新实例应该能够加入服务器场。