【发布时间】:2020-12-27 16:45:08
【问题描述】:
我在 lambda 中运行以下代码。我想在 5 分钟后停止我的 EC2 实例。为此,我在发出 stop_instance 命令之前使用了 time.sleep 间隔 5 分钟。但是time.sleep之后代码没有通过,而是从头开始循环lambda脚本?
ec2 = boto3.client('ec2', region_name=region)
resp = ec2.describe_instance_status(InstanceIds=instances)
if(len(resp['InstanceStatuses']) == 0):
ec2.start_instances(InstanceIds=instances)
print("Started instance with Instance_id : ",instances)
else:
instance_status = resp['InstanceStatuses'][0]['InstanceState']['Code']
if instance_status == 80:
ec2.start_instances(InstanceIds=instances)
print("Started instance with Instance_id : ",instances)
print("Instance staus - 1 **: ",instance_status)
status = 0
counter = 5
while (status != 16 and counter > 0):
resp = ec2.describe_instance_status(InstanceIds=instances)
if len(resp['InstanceStatuses']) != 0:
status = resp['InstanceStatuses'][0]['InstanceState']['Code']
time.sleep(5)
counter=counter-1
print("Instance staus - 3 **: ",status)
print("Wait for 5 minutes please !!!")
i = 0
while (i < 1):
time.sleep(300)
i = i + 1
print("Wait time is over, instance status : ", status)
resp = ec2.describe_instance_status(InstanceIds=instances)
instance_status = resp['InstanceStatuses'][0]['InstanceState']['Code']
print("Instance staus - 2 **: ",instance_status)
if instance_status == 16:
#check if file exists in the S3 location, and if yes, then stop instances.
ec2.stop_instances(InstanceIds=instances)
print("Stopped instance with Instance_id : ",instances)
这是我在 cloudwatch 日志中看到的,并且实例没有停止。以下是我的 cloudwatch 日志:
有人可以帮我完成这项工作,以便在 x 分钟后停止 ec2。谢谢。
【问题讨论】:
-
Lambda 函数的执行时间最长,可能不到五分钟。
-
@AKX 已从 5 分钟增加到 15 分钟 - 在撰写本文时。
-
您的实际目标是什么?也就是说,你想要达到什么目的?您是否希望 EC2 实例在启动后停止 x 分钟?如果是这样,最好让实例通过简单的 shell 脚本自行关闭。请告诉我们您想要实现的什么以及为什么(而不是如何),我们可能会提出更好的方法.
标签: python python-3.x amazon-ec2 aws-lambda boto3