首页 > 解决方案 > AWS 中针对 SPA 和 API 网关的交叉堆栈参考

问题描述

我在下面提到了两个 AWS 服务

我想Stack 1单独公开“或”部署两者Stack 1 & Stack 2,以便两个堆栈可以无缝地相互交谈。

我当前的解决方案:
我正在考虑使用Cross Stack reference(使用导出/导入),以便Stack 1输出它URL以便将来可以引用(如果我想Stack 2在将来部署)。

我的问题:

  1. 如何将 API 和 SPA 绑定在一起?
  2. 虽然我知道如何在 SPA (AWS S3) 中引用Cross Stack导出URL值,但我不确定如何使我的代码 ( index.html) 在 AWS S3 中动态化,以便调用Stack 1API。

更新:
想知道我的问题是否足够清楚。问我问题的另一种方式是“我如何使用从 Javascript/Ruby 等内部URL吐出Stack 1的代码?”。我知道如何URL在另一个 cloudformation 模板中引用,但不是在代码中。

标签: amazon-web-servicesamazon-s3aws-lambdaamazon-cloudformationaws-api-gateway

解决方案


两个想法:

  1. 正如您所提到的,如果您能够导出 API Base Endpoint,或者如果您可以导出变量和更好api-id,那么您可以在 SPA 代码中动态构建 URL。regionstage

基本端点是

https://{api-id}.execute-api.{region}.amazonaws.com/{stage}

并使用 AJAX 库发出 HTTP 请求。

这个方法最重要的就是stack-2每次remove和deploy的时候rebuild和deploystack-1

  1. 如果您不想stack-2每次stack-1都更改部署,则将 API 服务映射到自定义域。即,您的 API 端点可以映射到自定义 URL,例如https://api.example.com,每次重新构建堆栈时,新端点都会映射到现有的自定义 URL,从而保护您stack-2免于失败。当然,在您的 stack-2 中,您将执行 HTTP 请求https://api.example.comhttps://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


推荐阅读