是否有一种简单的方法可以在特定的时间每天启动和停止AWS EC2实例? 这可以为我的开发和testing服务器节省不less钱。
AWS有一个名为EC2 Scheduler的工具,可以非常灵活地控制启动和停止EC2实例。
该工具允许您在设置工具时定义默认的开始和停止时间,稍后可以更改该时间。 您可以select受控的实例,您可以使用标签为每个实例指定不同的启动和停止时间。
虽然这是一个很好的工具,但文档有点模糊和混乱。 就好像这个文档是由编写这个工具的工程师编写的,而且知道它的一切,而不是技术作者。
注意 :如果您有反馈意见或更正评论意见。 如果你有这个问题,请开始你自己的问题。
什么是EC2调度程序
此工具是一个适用于Cloudwatch Events和DynamoDB的Lambda函数。 它使用Cloudformation模板部署,该模板还设置了必要的IAMangular色和策略。 你可以在这里阅读关于这个架构。
部署
首先进入此页面并点击“启动解决scheme”。 现在直接的联系在这里 ,但它可能会改变。
select您希望将资源部署到控制台顶部的区域。 该脚本控制任何区域的EC2实例,但它在一个区域中运行。
标记EC2实例
这在这里的文档中已经介绍过了,但并不像它那么简单。
您可以通过标记实例来控制启动和停止哪些实例。
最简单的情况要求您根据计划标记每个要启动和停止的EC2实例。 为此,请在控制台中find您的EC2实例,单击标签,然后创build此标签
要启用复制和粘贴:
如果您想让特定实例以不同的时间表启动和停止,请将附加信息附加到标记键和值。 例如,如果您希望某个实例在UTC1500开始,并在周二,周四和周五2400 UTC停止,请input以下内容。
密钥:调度程序:ec2-startstop:late值:1500; 2400; utc; tue,thu,fri
请注意,“迟到”一词可以是任何string,“迟到”没有特殊意义。
您可以使用此工具将UTC转换为当地时间。
您可以使用标签编辑器批量标记实例。 这可以更容易地让你设置批量标记,这对于开发,testing和生产有不同的设置可能是有用的。 我怀疑你会在生产中使用它。
CloudFormation参数
当你运行CloudFormation模板时,你必须input很多参数。 大多数你可以离开默认。 这是一些最重要的参数
权限,策略和angular色
CloudFormation模板的权限/ IAMangular色部分是一个红色的鲱鱼,即它基本上是不相关的。 它仅指定用于运行CloudFormation脚本的angular色,在运行lambda函数时创build的资源或使用的angular色没有区别。 回想起来,这是显而易见的,但是当我开始的时候对我来说并不明显。
无论您运行此脚本的angular色是什么,都将在IAM中创build相同的angular色和内联权限。 Lambda函数使用脚本创build的“ec2调度程序angular色”运行。
我在下面列出了我的政策,以防他们对任何人都有帮助。
CloudWatch事件和指标
如果您希望查看您的Lambdafunction的日志,请进入Cloudwatch Events。 伐木很好。 还有度量标准,所以你可以看到它的运行时间,运行时间等。
额外
lambda函数的代码在Github上可用。
政策
这些通常不是必须的,但可以为某人,所以我会包括他们。
IAMangular色的策略
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DescribeInstances", "ec2:DescribeTags", "iam:CreateRole", "iam:GetRole", "iam:PassRole", "iam:PutRolePolicy", "iam:DeleteRolePolicy", "iam:DeleteRole", "dynamodb:*", "lambda:*", "SNS:Publish", "events:*" ], "Resource": "*" }, { "Effect": "Allow", "Action": "S3:GetObject", "Resource": [ "arn:aws:s3:::solutions-us-west-2", "arn:aws:s3:::solutions-us-west-2/*" ] }, { "Effect": "Allow", "Action": [ "ec2:StopInstances", "ec2:StartInstances" ], "Resource": [ "arn:aws:ec2:us-west-2:123456789012:instance/i-0d112345Ab6789012" ] } ] }
IAMangular色的信任策略
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "lambda.amazonaws.com", "cloudformation.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }