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

Phi*_*ley 3 amazon-web-services amazon-cloudfront aws-cli

我正在尝试使用 AWS CLI 在我的 CI 服务中的 CloudFront 上创建失效,以在部署时自动使文件失效。但是,CLI 返回一条成功消息,但引用的失效是一个月前的,并且没有创建新的失效。

我正在安装和启用 cloudfront:

pip install awscli
aws configure set preview.cloudfront true
aws configure set preview.create-invalidation true
Run Code Online (Sandbox Code Playgroud)

然后我创建失效:

aws cloudfront create-invalidation --cli-input-json '{"DistributionId":"ABC123ABC123","InvalidationBatch":{"Paths":{"Quantity":1,"Items":["/index.html"]},"CallerReference":"codeship"}}'
Run Code Online (Sandbox Code Playgroud)

响应示例,当我在 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"
}
Run Code Online (Sandbox Code Playgroud)

当我登录到 CloudFront 时,我可以看到 6/12 的一次失效,但昨天运行此命令时什么也没有。

我做错了什么吗?这个 CLI API 甚至可以工作吗?

Dav*_*ray 5

看起来您每次调用 CreateInvalidation 都传递相同的 CallerReference?CallerReference 唯一标识特定的失效请求,因此 CloudFront 为您提供第一次失效的结果以使用该 CallerReference。从文档

您指定用于唯一标识失效请求的值。CloudFront 使用该值来防止您意外地重新提交相同的请求。无论何时创建新的失效请求,都必须为 CallerReference 指定一个新值,并根据需要更改请求中的其他值。确保 CallerReference 值唯一的一种方法是使用时间戳,例如 20120301090000。

如果您使用 CallerReference 的相同值发出第二个失效请求,并且请求的其余部分相同,则 CloudFront 不会创建新的失效请求。相反,CloudFront 会返回有关您之前使用相同 CallerReference 创建的失效请求的信息。

如果 CallerReference 是您在之前的失效批处理请求中已发送的值,但任何 Path 的内容与原始请求不同,CloudFront 将返回 InvalidationBatchAlreadyExists 错误。