我在aws上部署了休息服务。现在我想部署一个前端。这是一个reactjs应用程序。 build会生成一个包含html和assets的文件夹。
现在我想在aws上托管这个应用程序并让它与我那里的休息服务交谈。 aws是否为此提供了一些专用解决方案(在同一域下进行静态托管以避免跨源问题)或者我必须构建自定义的东西?比如把文件放在s3上还是与我的其他服务捆绑在一起?
答案 0 :(得分:2)
您可以使用S3和CloudFront部署和托管您的React应用程序:
myapp.example.com
)。不要为您的存储分配任何公共读取访问权限。./build
目录的内容复制到S3存储桶。myapp.example.com
。Yes
并创建新的源访问标识。 (不要让CloudFront授予您的存储桶读取权限。您将在接下来的步骤中手动执行)403 Forbidden
添加新的错误响应,将自定义错误响应设置为Yes
,响应页面路径至/index.html
和 HTTP响应代码至200 OK
。CNAME
添加指向您的CloudFront分配的域名的myapp.example.com
记录(例如XXXXXXXXXXXXXX.cloudfront.net
)。 注意:这可以通过Route 53中的ALIAS
A主机记录来完成。 将以下存储桶策略添加到S3中的应用存储桶(其中XXXXXXXXXXXXX是您在上面步骤4中创建的源接入标识ID。此值可在CloudFront主页的安全下找到左侧边栏):
{
"Version": "2008-10-17",
"Id": "Policy1415003215468",
"Statement": [
{
"Sid": "Stmt1415003056675",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity XXXXXXXXXXXXX"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::myapp.example.com/*"
}
]
}
这将拒绝使用直接S3网址访问您的应用。它只允许通过CloudFront进行访问。
将REST API配置中的Access-Control-Allow-Origin
设置为http://myapp.example.com
。
启用并执行SSL
在您的CloudFront的分发设置中,选择您的自定义SSL证书。
Redirect HTTP to HTTPS
。Access-Control-Allow-Origin
更改为https://myapp.example.com
。答案 1 :(得分:0)
您可以使用AWS CloudFront和S3部署反应应用程序。目前,没有直接的方法来设置CloudFront来处理React Routes(如果重新加载页面以提供索引页面)。为此,作为一种变通方法,您可以在CloudFront中使用错误路由来处理此问题。
有关设置CloudFront分配和S3存储桶的更多详细信息,请参阅Deploying Angular/React Apps in AWS上的文章。您还可以使用文章中的CloudFormation 启动堆栈按钮来配置整个设置。
要设置包含Restful API的完整堆栈应用程序,请参阅Full Stack Serverless Web Apps with AWS。