繁体   English   中英

python boto3 aws lambda - 调用 StartInstances 操作时发生错误 (IncorrectInstanceState):

[英]python boto3 aws lambda - An error occurred (IncorrectInstanceState) when calling the StartInstances operation:

我使用 python boto3 编写了 lambda 来启动所有 EC2 实例。 它工作正常。 我继续并终止了 2 个实例。 当我现在运行代码时,它也会尝试启动终止的实例。 这很奇怪。 lambda 不应该忽略已终止的实例并仅显示处于“停止”状态的实例。 我不应该编写逻辑来检查实例的状态并仅显示“已停止”state 中的实例,对吗?

[错误] ClientError:调用 StartInstances 操作时发生错误(IncorrectInstanceState):实例“i-002d545f637ad1ebd”不在可以启动它的 state 中。 回溯(最近一次通话最后):

import json
import boto3
import pprint
from pprint import pprint


def lambda_handler(event, context):
    aws_mgmt_console = boto3.session.Session()
    ec2_console_resource = aws_mgmt_console.resource('ec2')
    ec2_console_client = aws_mgmt_console.client('ec2')
  

    #starting all instances at the same time
    #First step get the list of all instances      
  
    all_instance_ids=[]
    for each_instance in ec2_console_resource.instances.all():
         all_instance_ids.append(each_instance.id)
  
    #step 2 create  a waiter       
    waiter=ec2_console_client.get_waiter('instance_running')
 
    ec2_console_resource.instances.start()
    
    waiter.wait(InstanceIds=all_instance_ids) 

    print("All Your ec2 instace are up and running")
  

根据实例生命周期,只能启动停止的实例。

因此,用户必须过滤他们需要的实例 state,如本例所示


因此,您可以获得已停止实例的列表,

is_running_filter = {'Name': 'instance-state-name', 'Values': ['stopped']}
stopped_instance_ids = []
for each_instance in ec2_console_resource.instances.filter(Filters=[is_running_filter]):
    stopped_instance_ids.append(each_instance.id)

然后只启动停止的实例。

ec2_console_client.start_instances(InstanceIds=stopped_instance_ids)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM