问题描述
第一个问题:
我有一个托管在S3上的静态网页,一个指向这个S3存储桶的CloudFront发行版,以及一个在我的域上指向这个CloudFront发行版的A记录。我还有一些API Gateway、Lambda和DynamoDB方面的工作正在进行。
此网页是遵循create-react-app
模板的Reaction应用程序。因此,当我yarn build
时,所有的js和css片段都会被这些随机的main.d74fc389.chunk.js
名称很好地缓存。然而,重要的是,index.html
(和其他静态文件)不是。
当我aws s3 sync build/ s3://xxxx
时,所有内容都可以很好地上载,但CloudFront根目录仍然指向旧的缓存index.html
!
我可以为此做些什么,以便我的自动部署脚本(基本上只是yarn build && aws s3 sync build/ s3://xxxxxx
正常工作?
我将我的域指向CloudFront,而不是指向Straight S3网站,因为我需要TLS证书。因此,我已在我的策略中拒绝除CloudFront OAI之外的任何人访问S3存储桶。
第二个问题:
我已通过在CloudFront中设置默认对象解决了此问题。
由于某些原因,我的`https://cloudfront.xxxxxx.xxx`(因此,在我的`https://mydomain.xxx`,上,但访问`https://mydomain.xxx/index.html`和任何其他项目,包括新上传的项目,由更新的Java脚本证明!)上不断收到‘拒绝访问’错误。绝对没有问题。什么鬼东西?以下是我的S3策略:{
"Version": "2012-10-17",
"Id": "Policy1631694343564",
"Statement": [
{
"Sid": "1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity XXXXXXXXXXXXX"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::xxxxxxx/*"
}
]
}
这实际上是由CloudFront自动生成的,所以我不知道它怎么会不正确。
我确实设置了为静态网站提供服务的存储桶,但拒绝向一般公众访问S3:GetObject,因此此URL什么也不做。我为我的CloudFront设置的源是S3的REST API(即xxxxxx.s3.us-west-1.amazonaws.xxx
),而不是存储桶的网站URL(http://xxxxxxx.s3-website-us-west-1.amazonaws.xxx/
)。
URL中的.com
已替换为.xxx
,因为StackOverflow规则
推荐答案
等待ttl或使缓存无效。
aws cloudfront create-invalidation --distribution-id E2FXXXXXX4N0MS --paths "/*"
如果您要进行大量部署,则这可能不适合,因为存在一些限制和成本。
AWS Documentation