boto3问题检查ec2实例状态

时间:2016-10-18 19:15:24

标签: amazon-web-services boto aws-lambda boto3

所以我有这个启动ec2实例的boto3脚本。但是当我运行这个lambda函数时,函数describe_instance_status返回空白InstanceStatus数组。所以程序终止后,说索引我们的范围。有什么建议吗?

import boto3
from time import sleep
region = 'your region name'


def lambda_handler(event, context):

 cye_production_web_server_2 = 'abcdefgh'

 ec2 = boto3.client('ec2',region)

 start_response = ec2.start_instances(
    InstanceIds=[cye_production_web_server_2, ],
    DryRun=False
 )

 print(
    'instance id:',
    start_response['StartingInstances'][0]['InstanceId'],
    'is',
    start_response['StartingInstances'][0]['CurrentState']['Name']
 )

 status = None
 counter = 5
 while (status != 'ok' and counter > 0):
    status_response = ec2.describe_instance_status(
        DryRun=False,
        InstanceIds=[cye_production_web_server_2, ],
    )
    status = status_response['InstanceStatuses'][0]['SystemStatus']      ['Status']
    sleep(5)    # 5 second throttle
    counter=counter-1

 print(status_response)
 print('status is', status.capitalize())

2 个答案:

答案 0 :(得分:1)

默认情况下,除非另有说明,否则仅描述正在运行的实例。

实例可能需要几分钟才能进入运行状态。

您的程序将永远不会睡眠,因为在第一次迭代中实际上未返回状态的前一步骤中它将失败。

使用“IncludeAllInstances”这是一个布尔请求参数,当为true时,包括所有实例的运行状况。如果为false,则仅包括运行实例的运行状况。默认为false

答案 1 :(得分:0)

如omuthu所述,默认返回类型仅提供有关实例的运行状态的信息。要获取即时的其他状态,请将 describe_instance_status ()的“ IncludeAllInstances ”参数设置为True。