AWS Cloudfront 错误?部署时失效的最大次数?

问题描述 投票:0回答:4

我在从 gitlab 部署某些内容时遇到错误。

$ aws cloudfront create-invalidation --distribution-id=EVB1B2B3B4B56 --paths "/*"
**An error occurred (ServiceUnavailable) when calling the CreateInvalidation operation (reached max retries: 2): CloudFront encountered an internal error. Please try again.**

我通过从 AWS 控制台手动创建失效来解决这个问题,并且它有效。这种情况有时会发生导致这个错误,当时我是手动做的。永久的解决方案是什么?请帮我解决这个问题。

amazon-web-services amazon-s3 gitlab gitlab-ci amazon-cloudfront
4个回答
18
投票

在将同一应用程序部署到多个发行版时创建多个失效时,我遇到了类似的问题。该错误仍然是随机发生的,有时只需稍后重试部署就可以正常工作,而其他人则在不同的发行版上失败。

发现了一个相关问题,在

github
aws-cdk
存储库中显示了相同的错误,在高峰时段
AWS Cloudfront API
似乎存在错误。

来自 CloudFront 团队:

CreateInvalidation API 日常故障率较高 交通高峰。它将返回最多 50% 的请求的错误。这是 主要是由于 API 的容量有限。

我们有证据表明某些请求即使重试六次仍失败, 高峰期间。我们正在努力改进这一点,但目前还没有 快速解决这个问题,我们预计到最后它会变得更好 2022 年第一季度。

我仍然没有找到一个“干净”的解决方案,我所做的是处理我的

CLI
脚本中的错误并自动重试,直到最终成功。


13
投票

您可以直接在命令中增加重试次数:

AWS_MAX_ATTEMPTS=10 aws cloudfront create-invalidation --distribution-id=EVB1B2B3B4B56 --paths "/*"

当 CloudFront API 遇到流量高峰时,您通常会收到此错误。不能保证成功到达端点,但您错过所有重试的机会仍然较小。


1
投票

与其增加重试尝试次数,也许更好的想法是在部署中引入退避/重试代码。

例如,当收到上述错误退避并等待五分钟后再尝试失效。

考虑到将 cron 作业配置为按小时、30 分钟等精确运行的人数,也许会选择随机的分钟值来运行?


0
投票

其实我不知道你用的是SAM还是CDK,但请确保AWS CloudFront是全球服务,并且全球aws服务仅在us-east-1工作

© www.soinside.com 2019 - 2024. All rights reserved.