2017-03-28 2 views
0

웹 사이트의 클라우드 프론트 배포를 삭제해야하는 teardown 스크립트를 만들고 있습니다. 당신은 웨이터가 실패 할 것 같습니다 그러나 분배 boto3을 사용하여 CloudFront 배포본 삭제하기

삭제 (배치)

  • 을 비활성화

    1. 가 배포 배포를
    2. 대기를 사용하지 않도록 다음에해야 할 것 같은데 2 단계, 배포가 비활성화되지 않은 경우 delete_distribution이 실패합니다.

      result = client.update_distribution(
          DistributionConfig=disabledConf, 
          Id=dist_id, 
          IfMatch=matchid) 
      waiter = client.get_waiter('distribution_deployed') 
      print("Waiting for disabling the distribution") 
      waiter.wait(Id=dist_id) # Throws here 
      client.delete_distribution(Id=dist_id, IfMatch=result['ETag']) 
      

      누구나 boto3에서이 기능을 사용하는 방법을 알고 계십니까?

  • 답변

    0

    방금이 정확한 문제가 발생했습니다. 문제는 Boto3에 배포 비활성화를위한 대기 기능이 없다는 점입니다. 성공 상태에 도달 할 때까지

    설문 조사의 CloudFront.Client.get_distribution() 60 초마다 다음 "distribution_deployed"에 docs에서 기능을 기다립니다. 25 개의 실패한 점검 후에 오류가 리턴됩니다.

    즉, 배포를 해제 할 수 없다는 뜻입니다. 이 문제를 해결하기 위해 필자는 자신의 웨이터를 구현하기 위해 datetime과 time.sleep 함수를 사용했습니다.

    import time 
    from datetime import datetime,timedelta 
    import sys 
    
    #disable distribution 
    result = client.update_distribution(
        DistributionConfig=disabledConf, 
        Id=dist_id, 
        IfMatch=matchid) 
    
    #wait for distribution to disable.... 
    print("Waiting for disabling the distribution...This may take a while....") 
    timeout_mins=60 
    wait_until = datetime.now() + timedelta(minutes=timeout_mins) 
    notFinished=True 
    eTag="" 
    while(notFinished): 
        #check for timeout 
        if wait_until < datetime.now(): 
         #timeout 
         print("Distribution took too long to disable. Exiting") 
         sys.exit(1) 
    
        status=client.get_distribution(Id=dist_id) 
        if(status['Distribution']['DistributionConfig']['Enabled']==False and status['Distribution']['Status']=='Deployed'): 
         eTag=status['ETag'] 
         notFinished=False 
    
        print("Not completed yet. Sleeping 60 seconds....") 
        time.sleep(60) 
    
    #delete distribution 
    client.delete_distribution(Id=dist_id, IfMatch=eTag) 
    

    따라서 비활성화되어 있는지 확인하는 것 외에 변경 사항이 적용되었는지 확인해야합니다. "Status (상태)"가 'Deployed (배포 됨)'로 변경되도록하십시오 (변경 중에 진행 중임)

    관련 문제