我在从 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 控制台手动创建失效来解决这个问题,并且它有效。这种情况有时会发生导致这个错误,当时我是手动做的。永久的解决方案是什么?请帮我解决这个问题。
在将同一应用程序部署到多个发行版时创建多个失效时,我遇到了类似的问题。该错误仍然是随机发生的,有时只需稍后重试部署就可以正常工作,而其他人则在不同的发行版上失败。
我发现了一个相关问题,在
github
aws-cdk
存储库中显示了相同的错误,在高峰时段AWS Cloudfront API
似乎存在错误。
来自 CloudFront 团队:
CreateInvalidation API 日常故障率较高 交通高峰。它将返回最多 50% 的请求的错误。这是 主要是由于 API 的容量有限。
我们有证据表明某些请求即使重试六次仍失败, 高峰期间。我们正在努力改进这一点,但目前还没有 快速解决这个问题,我们预计到最后它会变得更好 2022 年第一季度。
我仍然没有找到一个“干净”的解决方案,我所做的是处理我的
CLI
脚本中的错误并自动重试,直到最终成功。
您可以直接在命令中增加重试次数:
AWS_MAX_ATTEMPTS=10 aws cloudfront create-invalidation --distribution-id=EVB1B2B3B4B56 --paths "/*"
当 CloudFront API 遇到流量高峰时,您通常会收到此错误。不能保证成功到达端点,但您错过所有重试的机会仍然较小。
与其增加重试尝试次数,也许更好的想法是在部署中引入退避/重试代码。
例如,当收到上述错误退避并等待五分钟后再尝试失效。
考虑到将 cron 作业配置为按小时、30 分钟等精确运行的人数,也许会选择随机的分钟值来运行?
其实我不知道你用的是SAM还是CDK,但请确保AWS CloudFront是全球服务,并且全球aws服务仅在us-east-1工作