使用boto3删除CloudFront分配

时间:2017-03-28 18:24:43

标签: python amazon-cloudfront boto3

我正在开发一个需要删除网站的云端分发的拆解脚本。看起来你必须做到以下

  1. 停用发布
  2. 等待分发被禁用(部署)
  3. 删除分发
  4. 然而,看起来服务员在第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?

1 个答案:

答案 0 :(得分:2)

我刚刚遇到了这个问题。问题在于Boto3没有禁用分配的等待功能。来自“distribution_deployed”等待函数的docs

  

每隔60秒轮询一次CloudFront.Client.get_distribution(),直到a   达到成功状态。检查失败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)   

因此,除了检查是否已禁用之外,您还需要查看更改是否已生效。您可以通过确保“状态”已更改为“已部署”(在更改期间将处于正在进行状态)来执行此操作