EC2按计划启动

时间:2012-01-30 19:18:52

标签: amazon-ec2

我需要每天早上6点启动一个EC2实例。限制是我想避免让计算机一整天都在运行启动或使用像ylastic一样的付费解决方案。

alestic的solution是目前为止最接近的。此解决方案的缺点是启动时间很长,因为安装自定义软件和移动数据所需的时间。

有没有办法只启动实例而不是每次都创建一个新实例,如example所示?

12 个答案:

答案 0 :(得分:10)

您现在可以使用Amazon OpsWorks执行此操作。设置完主要内容后,只需创建一个新实例并将其缩放类型设置为“基于时间”(实例制作完成后,您无法因某种原因更改此实例):

enter image description here

现在,只需点击“实例>基于时间”类别并设置时间表:

enter image description here

答案 1 :(得分:9)

鉴于您的限制,遗憾的是,目前AWS Products & Services提供的两种专用自动化机制尚未涵盖所需的功能:

  • Auto Scaling - 是一项网络服务,旨在根据用户定义的政策,时间表和运行状况检查自动启动或终止 Amazon Elastic Compute Cloud(Amazon EC2)实例
  • AWS CloudFormation - 为开发人员和系统管理员提供了一种简单方法,可以创建和管理相关AWS资源的集合,配置和更新一种有序且可预测的方式。

虽然启动/停止/重新启动实例在概念上属于后者的 manage 类别,但它不可用(这是我们在此内部专门为此功能提供单独任务的原因同时弃用了Bamboo AWS Plugin及其继承者Tasks For AWS)。

因此,我对How to turn on/off cloud instances during office hours的回答中概述的方法仍然适用,尽管您需要额外的限制来找到托管您的脚本或持续集成解决方案的提供商免费:

  • 托管脚本有例如已经可以通过那些cron职位提供者已经有一段时间了。

  • 鉴于目前Platform as a Service (PaaS)解决方案的爆炸性增长,有一些提供商可以让您以这种或那种方式进行主机脚本和/或持续集成解决方案。

显然,您需要验证,根据相关提供商的相应Terms of Use,是否可以使用此类目的的免费等级是否可以接受。

答案 2 :(得分:6)

还有另一个基于java的工具EC2 Scheduler可以帮助您解决此问题。对我来说,我希望在办公时间为我的团队提供服务器,即使它没有被任何人使用。这个应用程序帮助我实现了这个目标。希望这对你也有好处。

答案 3 :(得分:3)

  

我建议使用AWS Lambda安排EC2启动。

<强>建议
使用D. Svanlund检查AWS Forum Thread,使用Ace:2000+点的用户的建议。

<强>优势
除了您安排的一两个小脚本之外,您不需要任何其他内容。没有要启动的实例,只需快速调用您构建的脚本即可。选择您选择的编程语言,并使用AWS SDK执行实例操作。一个非常轻量级的解决方案,

估算费用
每天运行两次,通常少于3秒,内存消耗高达128MB的任务通常成本低于0.0004美元/月(参见 Reference

计划
2016年1月,AWS Lambda预定事件已转换为 AWS CloudWatch Events 。 CloudWatch Events具有与Lambda预定事件相同的调度功能。每个区域5个预定事件的AWS Lambda预定事件限制已提升至50个CloudWatch Events规则。

方式
设置适合Start/Stop Scheduling的EC2类型。我建议使用 EC2-VPC/EBS 。 创建IAM policy role 。信任新创建的角色的关系(参见 Reference ) 通过 Function Trigger 为Lambda配置CloudWatch Events触发器,如下所示。

CloudWatch Events - Schedule

以下是 function start-server 的代码,其中Runtime设置为 Node.js
Instance Console 更改您的YOUR_REGION和YOUR_INSTANCE_ID。

var AWS = require('aws-sdk');
exports.handler = function(event, context) {
 var ec2 = new AWS.EC2({region: 'YOUR_REGION'});
 ec2.startInstances({InstanceIds : ['YOUR_INSTANCE_ID'] },function (err, data) {
 if (err) console.log(err, err.stack); // an error occurred
 else console.log(data); // successful response
 context.done(err,data);
 });
};

注意:如果您需要 function stop-server ,只需将 ec2.startInstances 更改为 ec2.stopInstances 即可。使用Automatic Shutdown Per EC2 Boot

时,甚至可能不需要停止功能

<强>登录
如果使用必要的权限创建IAM角色,则Lambda函数将为其每次运行创建 AWS CloudWatch Log Stream

AWS CloudWatch Log Stream

答案 4 :(得分:2)

我刚刚面临同样的问题,并使用Autoscaling解决了这个问题,就像这里提到的答案一样多。您唯一需要的就是要运行的AMI图像和Autoscaling API command-line tools

下载工具后,请按照自述文件中的说明设置环境变量并添加AWS凭据。然后将以下命令放在批处理文件中(此示例适用于Windows):

as-create-launch-config --key "MYLAUNCHCONFIGNAME" --instance-type t1.micro --image-id MYAMI-IMAGEID --launch-config "MYLAUNCHCONFIGNAME"
as-create-auto-scaling-group --auto-scaling-group "MYSCALINGGROUPNAME" --launch-configuration "MYLAUNCHCONFIGNAME" --availability-zones "us-east-1a,us-east-1b,us-east-1c,us-east-1d" --min-size 0 --max-size 0

rem Don't restart instance after shutdown
as-suspend-processes "MYSCALINGGROUPNAME" --processes ReplaceUnhealthy

rem Start instance at 22:15
as-put-scheduled-update-group-action --name "startMyInstance" --auto-scaling-group "MYSCALINGGROUPNAME" --min-size 1 --max-size 1   --recurrence "15 22 * * *"

rem Stop instance at 23:05
as-put-scheduled-update-group-action --name "stopMyInstance" --auto-scaling-group "MYSCALINGGROUPNAME" --min-size 0 --max-size 0 --recurrence "05 23 * * *"

用您的一些选择替换大写的名称,并为您的AMI图像设置正确的AMI-ID。基于您的AMI图像的新实例将从22:15开始,并在23:05结束。当然,您也可以更改实例类型和可用区域。

答案 5 :(得分:1)

恕我直言,如上所述,向自动缩放组添加时间表是最好的“云状”方法。

但是如果您无法终止实例并使用新实例,例如,如果您有与之相关的弹性IP等。

您可以创建一个Ruby脚本,以根据日期时间范围启动和停止实例。

#!/usr/bin/env ruby

# based on https://github.com/phstc/amazon_start_stop

require 'fog'
require 'tzinfo'

START_HOUR = 6 # Start 6AM
STOP_HOUR  = 0 # Stop  0AM (midnight)

conn = Fog::Compute::AWS.new(aws_access_key_id:     ENV['AWS_ACCESS_KEY_ID'],
                             aws_secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'])

server = conn.servers.get('instance-id')

tz = TZInfo::Timezone.get('America/Sao_Paulo')

now = tz.now

stopped_range = (now.hour >= STOP_HOUR && now.hour < START_HOUR)
running_range = !stopped_range

if stopped_range && server.state != 'stopped'
  server.stop
end

if running_range && server.state != 'running'
  server.start

  # if you need an Elastic IP
  # (everytime you stop an instance Amazon dissociates Elastic IPs)
  #
  # server.wait_for { state == 'running' }
  # conn.associate_address server.id, 127.0.0.0
end

使用amazon_start_stop查看Heroku Scheduler免费创建计划程序。

答案 6 :(得分:1)

  

AWS Data Pipeline 非常适合此任务。数据管道   使用AWS技术,可以配置为运行AWS CLI命令   没有外部依赖关系的设置计划。数据管道可以写   记录到S3并在IAM角色的上下文中运行,这消除了   关键管理要求。数据管道也具有成本效益;对于   例如,Data Pipeline免费套餐可用于停止和启动   实例每天一次。

https://aws.amazon.com/premiumsupport/knowledge-center/stop-start-ec2-instances/

答案 7 :(得分:0)

自动缩放似乎是解决您问题的最佳解决方案,AWS提供了这样的功能。如果您正在寻找像ylastic这样的第三方解决方案,但您不想为此付费,我唯一知道的是Scalr我工作的地方。 Scalr是开源的,因此您只需要download源代码和install自己。

其他替代方案包括RightScale和enStratus。在我看来,RightScale免费帐户不包括自动缩放,而enStratus“免费”计划以0.20美元/服务器小时为基础进行自动缩放。

答案 8 :(得分:0)

我所知道的最好的免费方法是http://www.exostack.com 我使用它来安排实例在设定的时间打开或关闭 - 现在使用它为400多个实例,它工作得很好。他们还有一个用于快照和AMI的调度程序,我也用它作为DR。他们还有一个非常时尚的ec2成本跟踪器 - 似乎给你每月和每年的成本细分。相当准确的IMO。

答案 9 :(得分:0)

亚马逊现在有预定的预留实例

  

预定预留实例:这些实例可在您预留的时间窗口内启动。此选项允许您   将您的容量预订与可预测的定期计划相匹配   只需要一天,一周或一个月的一小部分。对于   例如,如果您有可预测的工作量,例如每月   财务风险分析,您可以安排它在前五个运行   一个月中的几天。另一个例子是安排夜间账单   从每个工作日的下午4点到12点进行处理。

但也

  

期限:   预定的预留实例有一个   1年任期。

     

付款选项:预定的预留实例   每小时产生一次收费,在该期限内以月为单位计费。

了解更多 https://aws.amazon.com/ec2/purchasing-options/reserved-instances/

答案 10 :(得分:0)

  • 同样在这里!震惊地看到亚马逊没有提供一种内置的方式来简单地安排你的EC2启动&amp;在某个时间停止。 (好吧,不是那么震惊,因为他们可能不希望你能把它关掉,对吧?: - )

  • 答案:我发现Auto-Scaling方法是免费自动化的最佳方式,无需第三方应用程序或全天候运行的单独服务器。这里需要很好地理解AS,AMI和EC2。

    转到下面的网址链接,了解如何添加&#34;安排的行动&#34;到您的自动缩放组。效果很好!

    我现在可以让我的EC2服务器在12nn时旋转并且旋转(真的会终止)@ 8PM。很酷。祝你好运!

  • 以下是我的设置的屏幕截图。这些设置将每天创建并启动EC2,每天一小时。 CHEERS!

http://docs.aws.amazon.com/autoscaling/latest/userguide/schedule_time.html#sch-actions_rules

Auto-Scaling Scheduled Actions:

答案 11 :(得分:0)

亚马逊最近宣布了两项新功能来实现这一目标,而无需直接将自定义实施作为AWS Web Console EC2部分的配置。

  • 使用预设缩放进行应用程序自动扩展(创建自动扩展组后,有一个选项卡,您可以在其中添加基于其他时间的自动缩放规则) enter image description here

  • 保留计划的EC2实例(在EC2控制台的Instances下,可以选择保留计划的EC2实例) enter image description here