我正在尝试使用AWS CLI在我的CI服务中在CloudFront上创建失效,以自动使部署时的文件失效。然而,CLI返回一个成功消息,但是引用的无效是一个月前的,并且没有创建新的无效。
我正在安装和启用cloudfront:
pip install awscli
aws configure set preview.cloudfront true
aws configure set preview.create-invalidation true
然后创建无效:
aws cloudfront create-invalidation --cli-input-json '{"DistributionId":"ABC123ABC123","InvalidationBatch":{"Paths":{"Quantity":1,"Items":["/index.html"]},"CallerReference":"codeship"}}'
响应的一个例子,当我在7月13日下午4点运行这个命令时:
{
"Invalidation": {
"Status": "Completed",
"InvalidationBatch": {
"Paths": {
"Items": [
"/index.html"
],
"Quantity": 1
},
"CallerReference": "codeship"
},
"Id": "1234567890",
"CreateTime": "2015-06-12T18:39:56.360Z"
},
"Location": "https://cloudfront.amazonaws.com/2015-04-17/distribution/ABC123ABC123/invalidation/1234567890"
}
当我登录到CloudFront时,我可以看到6/12的一个无效,但是当我运行这个命令时,昨天什么也没有。
我做错了什么吗?这个CLI API工作吗?
看起来你正在传递相同的CallerReference为每次调用CreateInvalidation?CallerReference唯一地标识一个特定的无效请求,因此CloudFront为您提供使用该CallerReference的第一个无效的结果。来自文档:
为唯一标识无效请求而指定的值。CloudFront使用该值来防止您意外地重新提交相同的请求。无论何时创建新的无效请求,都必须为CallerReference指定一个新值,并根据需要更改请求中的其他值。确保CallerReference值唯一的一种方法是使用时间戳,例如20120301090000。
如果你用相同的值为CallerReference做了第二个无效请求,如果请求的其余部分是相同的,CloudFront不会创建一个新的无效请求。相反,CloudFront返回关于您之前使用相同的CallerReference创建的无效请求的信息。
如果CallerReference是一个你已经在之前的无效批处理请求中发送的值,但是任何Path的内容与原始请求不同,CloudFront返回InvalidationBatchAlreadyExists错误。