2016-10-18 8 views
0

그래서 내가 ec2 인스턴스를 시작하는이 boto3 스크립트가 있습니다. 그러나이 람다 함수를 실행할 때 describe_instance_status 함수는 빈 InstanceStatus 배열을 반환합니다. 그래서 프로그램은 인덱스의 범위를 말한 후에 종료됩니다. 어떤 제안?boto3 문제 ec2 인스턴스 상태 확인

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

람다 (cloudwatch) 로그에서 오류 메시지를 확인 했습니까? – helloV

+0

목록 색인이 범위를 벗어남 : IndexError 추적 (가장 최근 호출 마지막) : 파일 "/var/task/lambda_function.py", 줄 31, lambda_handler 상태 = status_response [ 'InstanceStatuses'] [0] [ 'SystemStatus '] ['Status '] IndexError : 목록 색인이 범위를 벗어납니다. –

+0

이 스크립트가 독립 실행 형 스크립트로 작동 했습니까? – helloV

답변

1

기본적으로 달리 지정하지 않는 한 실행중인 인스턴스 만 설명됩니다.

인스턴스가 실행 중 상태가되는 데 몇 분이 걸릴 수 있습니다.

프로그램은 첫 번째 반복에서 상태가 실제로 반환되지 않는 이전 단계에서 실패하므로 절대로 절전 모드가 해제되지 않습니다.

부울 요청 매개 변수 인 "IncludeAllInstances"를 사용합니다.이 매개 변수가 true이면 모든 인스턴스의 상태가 포함됩니다. false 인 경우 실행중인 인스턴스의 상태 만 포함합니다. 기본값은 false입니다.