如何在办公时间内打开/关闭云实例

21

我已经掌握了在AWS、Azure和Rackspace创建云实例的方法。然而,我需要在每天结束时关闭实例,在早上开启实例,因为这将使我的托管费用减半(它们是用于开发的)。

我看过一些管理服务,但它们让我很头痛。有没有简单的方法来做到这一点?

9个回答

12

Azure

REST:

您可以使用Windows Azure Service Management REST API来进行Azure部署。由于它是REST,因此您可以使用大多数编程语言来访问它。

您可以在本地计算机上运行应用程序,定时调用这些服务,在办公时间结束时删除它们,然后在早上创建您的服务。

PowerShell:

或者您可以以相同的方式管理您的部署,但是不使用REST,而是使用Azure PowerShell cmdlets。我自己就是这样做的,效果很好。

为了帮助您入门,有一个很好的教程,介绍如何使用PowerShell来部署Azure应用程序

另外,如果您还不知道,我应该提一下Azure有一个为期3个月的免费试用期,如果您只是想在开发过程中削减成本。


11

方法

您可以自己开发解决方案,因为大多数云服务提供商都提供相应的API以便按需启动/停止实例(甚至按计划执行),这也是那些管理服务实际上使用的 - 例如AmazonEC2 Java接口提供了所有相关的方法(以及许多其他方法)。

通过脚本 (EC2)

针对 Amazon EC2 的最简单方法是通过使用优秀的 boto(一种面向 Amazon Web Services 提供的现有和未来基础架构服务的综合接口)编写一些 Python 脚本,它公开了上述所有 EC2 方法。然后,您可以按需或通过操作系统调度程序启动这些脚本。

通过持续集成/自动化(EC2)

另一个选择是将 持续集成服务器作为自动化引擎(这些系统经常被忽视的一个方面),以防您已经运行其中一个;它将允许您启动/停止与 cron 类似的按需或计划实例。
我们通过Bamboo AWS Plugin(它是开源的,代码可在Bitbucket上获取)来实现这一点,有关此方法的更多详细信息,请参见我的回答如何使用Java编程方式启动和停止Amazon EC2实例。虽然Atlassian Bamboo是一个商业产品,但对于流行的开源CI解决方案(例如Jenkins),应该也会有类似的东西可用。

FYI,Bamboo AWS插件已被弃用:https://marketplace.atlassian.com/plugins/net.utoolity.atlassian.bamboo.tasks-for-aws/server/overview。 - slm

6

注意:从2013年6月开始,IaaS实例可以处于“停止(已删除)”状态。在此状态下,您只需为与虚拟机关联的任何磁盘的存储付费。下面的原始答案描述了处于“已停止”但未删除状态的VM实例。通过Azure管理门户执行的VM停止操作目前默认为删除状态。

今天在Windows Azure中实现这一点的唯一方法是删除部署。

如果您停止服务,仍将收取费用(就像租办公空间一样,即使您不在其中也要付款),并且无法将实例计数设置为零。可能使用的选项是将实例计数降至绝对最小值(1),然后在需要的小时内将其恢复。但这样做的成本效益将取决于您实例的大小。


2
此外,如果单个实例仍然过于昂贵,您可以在非工作时间将 VM 大小更改为 Extra Small,然后在工作时间将其改回较大的大小。 - David Makogon
今天我们真的可以这样做吗?这个设置是服务定义的一部分,而不是配置? - astaykov
除非您删除实例、更改源代码并重新部署,否则无法执行该操作。如果是这种情况,为什么还要费心呢?!就让它保持删除状态直到明天早上吧。 - BritishDeveloper
我知道你可以怎么做。而且这并不需要改变源代码,只需更改服务定义文件(.csdef)。关键是David提到了你可以动态地完成这个操作,但我还不确定是否已经有这个功能。 - astaykov
1
实际上,您可以通过包含新目标大小的更新csdef文件的新软件包进行就地升级以更改VM大小(正如David所指出的)。这个增强功能是在去年秋天引入的,虽然不是理想的选择,但它是通往更简单选项的垫脚石。 - BrentDaCodeMonkey

2

虽然这是一个旧帖子,但微软在2014年推出了Azure的“Runbooks”,您可以使用它来进行自动化操作,包括定时启动和关闭。如上所述,请确保您处于已停止(未分配)状态,而不仅仅是已停止,以避免产生费用。

更多信息:

停止VMs的脚本

Azure自动化,官方MS文档。


1

1

0

AWS

AWS SDK 是你最好的选择,但我正在使用 TotalCloud.io 在免费层下启动startstop实例。非常可定制。

易于设置。


0

AWS 的推荐解决方案:

AWS 数据管道 是这项任务的最佳选择。数据管道使用 AWS 技术,可以配置在无需外部依赖的情况下按计划运行 AWS CLI 命令。数据管道可以将日志写入 S3,并在 IAM 角色的上下文中运行,从而消除了关键管理要求。此外,数据管道成本效益高;例如,数据管道免费层可用于每天停止和启动实例。

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


0

请参考这篇文章,其中有一些在AWS内部启动/关闭您的实例的选项。

  • AWS Datapipeline
  • AWS Lambda定期事件
  • EC2实例上的计划Cron
  • 自动伸缩组的定期扩展

所以在您的情况下,我建议使用以下方法:

对于AWS

通过像AWS CLI命令这样的Shell命令:请参见使用AWS Pipeline打开/关闭云实例。此方法将启动单独的EC2实例,以便为每个运行时间影响您的账单的AWS API调用启动和终止。
通过像Node.js / Python这样的编程语言:请参见使用AWS Lambda打开/关闭云实例。该任务每天运行两次,通常少于3秒,内存消耗高达128MB,通常每月成本不到0.0004美元。
对于Azure和Rackspace(或其他可能拥有的平台):
使用上述工具提供一个相应的API,以按需启动/停止实例。

您还可以考虑设置scripts-per-boot,它会在每次启动实例时运行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接