我尝试使用AWS LAMBDA自动创建自终止AWS EC2实例。一段时间后发布的Self-Terminating AWS EC2 Instance? 有助于通过控制台进行操作,但我想知道这是否可以通过AWS LAMBDA实现。
为了提供一些额外的背景,我尝试创建这样的工作流程:
通过发送给他们的唯一链接获取用户注册(一个简单的静态内部网网站)
将表单详细信息发布到AWS LAMBDA函数并从快照创建实例,该实例将在12小时内自动终止
向用户发送包含连接信息的电子邮件(可能附加RDP文件)
我现在面临的问题是第二点。我还需要将注册数限制为每天10个。
PS:关于此工作流程的任何建议或建议也会有所帮助。 (我理解安全问题,但这是针对内部网的,并且永远不会对公众可见)
答案 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函数中实现此方法。
创建一个DynamoDB表或RDS实例表来存储实例ID TTL(生存时间)和创建时间。
创建具有特定用途的Lambda函数:按实例ID终止实例。
创建Lambda函数以根据创建日期检查实例。
创建一个计划Cloudwatch事件规则,每隔10,30或N分钟执行一次Lambda函数(在步骤3中创建Lambda) (我建议好时光关于需要在特定时间删除的实例数量的间隔)以检查实例的创建日期。
如果特定实例的创建日期大于或等于TTL(生存时间),则调用Lambda函数(在步骤2中创建Lambda)以删除该实例。
等待Lambda调用,然后删除与该实例相关的表格行。
希望有助于完成您的方案
答案 2 :(得分:0)
另一种方法是从lambda函数创建一个EC2实例。当您调用AWS API来创建EC2实例时,请提供userData脚本。 (无论如何,您可能需要安装所需的任何软件。)
作为userData脚本的一部分,运行shutdown -H +12
,它将通过Old School Unix命令安排机器的关闭事件。
如果您想了解更多细节,请查看blog post I stole the shutdown idea from