我已经阅读了很多页面的文档和其他StackOverflow问题/答案,但是似乎看不到任何可以帮助我解决我的问题的东西。
我正在S3存储桶中托管一个公共的静态站点。该站点对我在VPC的EC2实例中托管的API进行了一些调用。因此,只能由同一VPC中的其他实例和服务调用我的API。
但是我不确定如何允许S3 Bucket网站访问我的API。
我曾尝试创建VPC端点并沿这条路线走,但所做的一切只是限制了仅从我的VPC内的实例访问我的S3站点(这不是我想要的)。
非常感谢您的帮助,非常感谢。 希望我的问题很清楚。
答案 0 :(得分:5)
否,S3静态网站是100%的客户端代码。因此,基本上只是从S3提供的html + css + javascript。如果要将动态内容带入您的网站,则需要查看如何调用可从用户浏览器(即从互联网)访问的API。
AWS API Gateway with Private Integrations可用于接受传入的REST调用并将其发送到VPC中的EC2服务器。
我向S3静态网站添加动态数据的首选解决方案是将API Gateway与AWS Lambda结合使用来创建无服务器网站。这样可以将运行成本,维护成本降至最低,并允许快速部署。请参阅The Serverless Framework,以了解如何启动并运行该解决方案。
答案 1 :(得分:2)
静态站点不在服务器上运行。它完全在每个站点访问者的Web浏览器中运行。运行它的计算机将是您最终用户的笔记本电脑。您的代码均未在S3存储桶中运行。 S3存储桶仅存储文件并将其提供给最终用户的浏览器,然后由浏览器运行代码。您尝试向S3存储桶授予对VPC资源的访问权限的路由无法正常工作。
您需要使您的API可以公开访问,以便在静态站点(在最终用户的笔记本电脑/平板电脑/电话/等)的Web浏览器中运行的代码能够访问它。您应该研究API密钥或JWT令牌之类的东西,以为公共API提供安全性。