我使用简单的AWS Lambda函数在给定区域和实例ID的情况下停止EC2实例(请参阅下面的python代码)。 Lambda功能由AWS CloudWatch规则触发(特别是每天下午6点的计划)。这一切都经过测试和运作。
import boto3
def lambda_handler(event, context):
region = event.get('region')
instances = event.get('instances')
ec2 = boto3.client('ec2', region_name=region)
ec2.stop_instances(InstanceIds=instances)
print 'started your instance: ' + str(instances)
如果用户主动登录EC2实例并且触发了该功能,则EC2实例将强制关闭该实例。
那么,有没有办法(在CloudWatch或Lambda中)延迟和/或忽略关闭,直到用户处于非活动状态或完全注销?也许使用boto3代码?
更新
考虑使用服务员,但我找到的唯一一个等待直到实例正在使用,而不是使用。也许等待呢?还考虑了CloudWatch警报,它可以在一段时间不活动后停止实例,但不能在确切时间触发。
waiter = ec2.get_waiter('volume_in_use')
waiter.wait(
WaiterConfig={
'Delay': 900, # In Seconds (900 = 15 mins)
'MaxAttempts': 47 # Number of Attempts (47 = 11.75 hours)
}
) # Default wait is 15 seconds 40 times
答案 0 :(得分:0)
Lambda 可以利用 SSM Run 命令在启动关闭之前检查是否有人在本地登录。