使用 boto3 删除 CloudFront 分配
Deleting a CloudFront Distribution with boto3
我正在编写一个需要删除网站云端分发的拆卸脚本。看来您必须关注
- 禁用分发
- 等待分发被禁用(部署)
- 删除分配
但是看起来服务员在第 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 一起工作吗?
我只是 运行 进入这个确切的问题。问题在于 Boto3 没有禁用分发的等待功能。来自 docs 上的 "distribution_deployed" 等待函数:
Polls CloudFront.Client.get_distribution() every 60 seconds until a
successful state is reached. An error is returned after 25 failed checks.
这意味着它不能用于禁用分发。为了解决这个问题,我使用了 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'(更改期间将进行中)
来执行此操作
我正在编写一个需要删除网站云端分发的拆卸脚本。看来您必须关注
- 禁用分发
- 等待分发被禁用(部署)
- 删除分配
但是看起来服务员在第 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 一起工作吗?
我只是 运行 进入这个确切的问题。问题在于 Boto3 没有禁用分发的等待功能。来自 docs 上的 "distribution_deployed" 等待函数:
Polls CloudFront.Client.get_distribution() every 60 seconds until a successful state is reached. An error is returned after 25 failed checks.
这意味着它不能用于禁用分发。为了解决这个问题,我使用了 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'(更改期间将进行中)
来执行此操作