2017-03-28 99 views
0

我正在研究需要刪除網站的cloudfront分配的拆卸腳本。看起來你必須做以下使用boto3刪除CloudFront分配

  1. 禁用分佈
  2. 等待分配被禁用(部署)
  3. 刪除分佈

但是它看起來像服務員失敗的步驟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沒有用於禁用分發的等待功能。從docs對 「distribution_deployed」 等功能:

投票CloudFront.Client.get_distribution()每60秒,直到達到 成功狀態。 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) 

因此,除了檢查它是否被禁用之外,您還需要查看更改是否已生效。您通過確保「狀態」已更改爲「已部署」(在更改過程中將進行中)來執行此操作。