从AWS LAMBDA开始x小时后创建自终止EC2实例

时间:2018-01-09 23:35:38

标签: amazon-web-services amazon-ec2 lambda

我尝试使用AWS LAMBDA自动创建自终止AWS EC2实例。一段时间后发布的Self-Terminating AWS EC2 Instance? 有助于通过控制台进行操作,但我想知道这是否可以通过AWS LAMBDA实现。

为了提供一些额外的背景,我尝试创建这样的工作流程:

  • 通过发送给他们的唯一链接获取用户注册(一个简单的静态内部网网站)

  • 将表单详细信息发布到AWS LAMBDA函数并从快照创建实例,该实例将在12小时内自动终止

  • 向用户发送包含连接信息的电子邮件(可能附加RDP文件)

我现在面临的问题是第二点。我还需要将注册数限制为每天10个。

PS:关于此工作流程的任何建议或建议也会有所帮助。 (我理解安全问题,但这是针对内部网的,并且永远不会对公众可见)

3 个答案:

答案 0 :(得分:1)

有很多方法可以达到你想要的效果。我能想到的两种方式:

  • 从Lambda启动实例时,将userdata传递给设置cronjob的实例,以便在12小时后使用AWS CLI终止实例。您可以从AWS元数据服务器获取实例的ID。为此,您需要安装AWS CLI并且EC2实例连接具有足够权限的IAM角色以终止实例。或者,如果已经在该实例中预装了Python,则可以使用Boto3编写一个小的python脚本,在实例启动12小时后终止该实例。

  • 最简单,最干净的选项 - 安排一个lambda事件在12小时后开火。您需要将instance-id传递给第二个lambda,它可以终止先前启动的实例。

在这两种情况下,您都需要为lambda函数或已启动的实例附加足够的权限以终止实例。

答案 1 :(得分:1)

这是我跟随

的步骤

考虑微服务的步骤,但是,您只能在一个Lambda函数中实现此方法。

  1. 创建一个DynamoDB表或RDS实例表来存储实例ID TTL(生存时间)和创建时间。

  2. 创建具有特定用途的Lambda函数:按实例ID终止实例

  3. 创建Lambda函数以根据创建日期检查实例。

  4. 创建一个计划Cloudwatch事件规则,每隔10,30或N分钟执行一次Lambda函数(在步骤3中创建Lambda) (我建议好时光关于需要在特定时间删除的实例数量的间隔)以检查实例的创建日期。

  5. 如果特定实例的创建日期大于或等于TTL(生存时间),则调用Lambda函数(在步骤2中创建Lambda)以删除该实例。

  6. 等待Lambda调用,然后删除与该实例相关的表格行。

  7. 希望有助于完成您的方案

答案 2 :(得分:0)

另一种方法是从lambda函数创建一个EC2实例。当您调用AWS API来创建EC2实例时,请提供userData脚本。 (无论如何,您可能需要安装所需的任何软件。)

作为userData脚本的一部分,运行shutdown -H +12,它将通过Old School Unix命令安排机器的关闭事件。

如果您想了解更多细节,请查看blog post I stole the shutdown idea from