amazon-web-services - AWS 中针对 SPA 和 API 网关的交叉堆栈参考
问题描述
我在下面提到了两个 AWS 服务
- 堆栈 1: Api 网关 + Lambda(无服务器)
- 堆栈 2:使用 AWS S3 的 SPA(单页应用程序)。
我想Stack 1
单独公开“或”部署两者Stack 1 & Stack 2
,以便两个堆栈可以无缝地相互交谈。
我当前的解决方案:
我正在考虑使用Cross Stack reference
(使用导出/导入),以便Stack 1
输出它URL
以便将来可以引用(如果我想Stack 2
在将来部署)。
我的问题:
- 如何将 API 和 SPA 绑定在一起?
- 虽然我知道如何在 SPA (AWS S3) 中引用
Cross Stack
导出URL
值,但我不确定如何使我的代码 (index.html
) 在 AWS S3 中动态化,以便调用Stack 1
API。
更新:
想知道我的问题是否足够清楚。问我问题的另一种方式是“我如何使用从 Javascript/Ruby 等内部URL
吐出Stack 1
的代码?”。我知道如何URL
在另一个 cloudformation 模板中引用,但不是在代码中。
解决方案
两个想法:
- 正如您所提到的,如果您能够导出 API Base Endpoint,或者如果您可以导出变量和更好
api-id
,那么您可以在 SPA 代码中动态构建 URL。region
stage
基本端点是
https://{api-id}.execute-api.{region}.amazonaws.com/{stage}
并使用 AJAX 库发出 HTTP 请求。
这个方法最重要的就是stack-2
每次remove和deploy的时候rebuild和deploystack-1
- 如果您不想
stack-2
每次stack-1
都更改部署,则将 API 服务映射到自定义域。即,您的 API 端点可以映射到自定义 URL,例如https://api.example.com
,每次重新构建堆栈时,新端点都会映射到现有的自定义 URL,从而保护您stack-2
免于失败。当然,在您的 stack-2 中,您将执行 HTTP 请求https://api.example.com
或https://api.example.com/myservice
等等。
参考:https ://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-custom-domains.html
如果您正在使用serverless-framework
,您可以参考此答案以了解如何实现此解决方案:https ://github.com/serverless/serverless/issues/2074#issuecomment-323370777
推荐阅读
- android - 如果应用程序未在后台运行,则深层链接操作不起作用
- java - 在 Jenkins TestNG 结果中,失败测试用例链接打开并显示错误消息
- git - Visual Studio Code 不允许更改 GitHub 用户 - Git:remote: Permission to Org/Rep denied
- excel - 从多个工作表追加列 Python
- c# - 使用派生类中必须具有不同枚举类型的字段创建接口
- python - 点安装python 2.7
- mysql - MYSQL 查询从日志中获取项目详细信息和最后一个 MAX() 操作详细信息
- c# - EF 核心 2.1 中使用 lambda 表达式的最大 n 个组
- maven - Hamcrest 断言在 Maven 测试用例中失败
- c# - System.NotSupportedException:没有数据可用于编码 1252