所以我有这个启动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())
答案 0 :(得分:1)
默认情况下,除非另有说明,否则仅描述正在运行的实例。
实例可能需要几分钟才能进入运行状态。
您的程序将永远不会睡眠,因为在第一次迭代中实际上未返回状态的前一步骤中它将失败。
使用“IncludeAllInstances”这是一个布尔请求参数,当为true时,包括所有实例的运行状况。如果为false,则仅包括运行实例的运行状况。默认为false
答案 1 :(得分:0)
如omuthu所述,默认返回类型仅提供有关实例的运行状态的信息。要获取即时的其他状态,请将 describe_instance_status ()的“ IncludeAllInstances ”参数设置为True。