【问题标题】:Creating a self terminating EC2 instance after x hours from AWS LAMBDA在 x 小时后从 AWS LAMBDA 创建一个自终止的 EC2 实例
【发布时间】:2018-01-09 23:35:38
【问题描述】:
我正在尝试使用 AWS LAMBDA 自动创建自终止 AWS EC2 实例。 Self-Terminating AWS EC2 Instance?
有时回帖有助于通过控制台执行此操作,但我想知道这是否可以使用 AWS LAMBDA。
为了提供一些额外的上下文,我正在尝试创建一个这样的工作流:
通过发送给用户的唯一链接获取用户注册(一个简单的静态 Intranet 网站)
将表单详细信息发布到 AWS LAMBDA 函数并从快照创建一个实例,该实例将在 12 小时后自动终止
向用户发送包含连接信息的电子邮件(可能附加 RDP 文件)
我现在面临的问题是第二点。我还需要将注册限制为每天 10 个。
PS:有关此工作流程的任何建议或建议也会有所帮助。 (我了解安全问题,但这是针对 Intranet 的,永远不会对公众可见)
【问题讨论】:
标签:
amazon-web-services
amazon-ec2
lambda
【解决方案1】:
有很多方法可以实现您想要的。我能想到的两种方法:
当您从 Lambda 启动实例时,将用户数据传递给设置 cronjob 的实例,以在 12 小时后使用 AWS CLI 终止实例。您可以从 AWS 元数据服务器获取实例的 ID。为此,您需要安装 AWS CLI,并为 EC2 实例附加一个具有足够权限的 IAM 角色来终止实例。或者,如果该实例中已经预装了 Python,您可以使用 Boto3 编写一个小的 Python 脚本,在实例启动 12 小时后终止该实例。
最简单和最干净的选项 - 安排 lambda 事件在 12 小时后触发。您需要将 instance-id 传递给可以终止先前启动的实例的第二个 lambda。
在这两种情况下,您都需要为 lambda 函数或已启动的实例附加足够的权限才能终止该实例。
【解决方案2】:
这些是我要遵循的步骤
考虑微服务的步骤,但是,您可以仅在一个 Lambda 函数中实现此方法。
-
创建一个 DynamoDB 表或 RDS 实例表来存储实例 ID TTL(生存时间)和创建时间。
-
创建具有特定目的的 Lambda 函数:按实例 ID 终止实例。
-
创建一个 Lambda 函数以根据创建日期检查实例。
-
创建一个调度 Cloudwatch 事件规则,该规则将执行一个 Lambda 函数(在步骤 3 中创建的 Lambda) 每 10、30 或任何 N 分钟 (我建议关于需要在特定时间删除的实例数量)以检查实例的创建日期。
-
如果特定实例的创建日期大于或等于 TTL(生存时间),则调用 Lambda 函数(步骤 2 中创建的 Lambda) 以删除该实例。
-
等待 Lambda 调用,然后删除与该实例相关的表行。
希望它有助于完成您的方案
【解决方案3】:
另一种方法是从您的 lambda 函数创建一个 EC2 实例。当您调用 AWS API 创建 EC2 实例时,请提供 userData 脚本。 (无论如何,您可能都需要安装所需的任何软件)。
作为 userData 脚本的一部分,运行 shutdown -H +12,它将通过 Old School Unix 命令安排机器的关闭事件。
如果您想了解更多详情,请查看blog post I stole the shutdown idea from