我可以使用Amazon API自动启动和终止我的Amazon实例吗?你能描述一下如何做到这一点吗?理想情况下,我需要启动实例并每天以指定的时间间隔停止实例.
为了防止有人在这个旧问题上遇到麻烦,现在你可以通过向自动缩放组添加一个时间表来实现同样的目的:在某些时间将自动缩放组中的实例数量增加到1并在之后将其减少到0 .
由于这个答案得到了很多观点,我想链接到一个非常有用的指南:使用Auto Scaling在循环计划上运行EC2实例
您可以尝试直接使用Amazon EC2 API工具.实际上只需要两个命令:ec2-start-instances和ec2-stop-instances.确保正确配置了EC2_HOME,AWS_CREDENTIAL_FILE,EC2_CERT,EC2_PRIVATE_KEY等环境变量,并且所有AWS凭证,证书和私钥文件都位于正确的位置 - 您可以在AWS EC2 API工具文档中找到更多信息.
您可以先手动测试命令,然后在一切正常时,在Windows上配置Unix crontab或Scheduled Tasks.您可以在下面找到Linux/etc/crontab文件的示例(不要忘记,上面提到的所有环境变量都需要为"您的帐户"用户提供.
/etc/crontab 0 8 * * * your-account ec2-start-instances0 16 * * * your-account ec2-stop-instances # Your instance will be started at 8am and shutdown at 4pm.
我是BitNami Cloud项目的开发人员,我们将AWS工具(包括我提到的工具)打包在一个您可能想要尝试的免费,易于使用的安装程序中: BitNami CloudTools包堆栈
我建议您查看EC2入门指南,该指南向您展示如何使用EC2命令行工具执行所需操作.您可以轻松地将此脚本编写到cron作业(在Linux/UNIX上)或Windows上的预定作业,以在给定时间调用启动和停止命令.
如果要从自己的代码中执行此操作,可以使用SOAP或REST API; 请参阅开发者指南了解详细信息
我使用Boto库在Python中编写代码来执行此操作.您可以根据自己的需要进行调整.确保将其作为cron作业的一部分运行,然后您将能够在cron作业运行期间启动或关闭所需数量的实例.
#!/usr/bin/python
#
# Auto-start and stop EC2 instances
#
import boto, datetime, sys
from time import gmtime, strftime, sleep
# AWS credentials
aws_key = "AKIAxxx"
aws_secret = "abcd"
# The instances that we want to auto-start/stop
instances = [
# You can have tuples in this format:
# [instance-id, name/description, startHour, stopHour, ipAddress]
["i-12345678", "Description", "00", "12", "1.2.3.4"]
]
# --------------------------------------------
# If its the weekend, then quit
# If you don't care about the weekend, remove these three
# lines of code below.
weekday = datetime.datetime.today().weekday()
if (weekday == 5) or (weekday == 6):
sys.exit()
# Connect to EC2
conn = boto.connect_ec2(aws_key, aws_secret)
# Get current hour
hh = strftime("%H", gmtime())
# For each instance
for (instance, description, start, stop, ip) in instances:
# If this is the hour of starting it...
if (hh == start):
# Start the instance
conn.start_instances(instance_ids=[instance])
# Sleep for a few seconds to ensure starting
sleep(10)
# Associate the Elastic IP with instance
if ip:
conn.associate_address(instance, ip)
# If this is the hour of stopping it...
if (hh == stop):
# Stop the instance
conn.stop_instances(instance_ids=[instance])
我工作的公司让客户经常询问这个,所以我们在这里写了一个免费的EC2调度应用程序:
http://blog.simple-help.com/2012/03/free-ec2-scheduler/
它适用于Windows和Mac,允许您创建多个每日/每周/每月计划,并允许您使用匹配筛选器轻松包含大量实例,或包括您将来添加的实例.