用于CloudFront的AWS CLI create-invalidation返回旧的无效



我正在尝试使用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错误。

最新更新