![](/img/trans.png)
[英]AWS BOTO3 S3 python - An error occurred (404) when calling the HeadObject operation: Not Found
[英]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.