AWS CDK 将 API 网关 URL 传递到同一堆栈中的静态站点

2024-03-25

我正在尝试在单个堆栈中部署 S3 静态网站和 API 网关/lambda。

S3 静态站点中的 JavaScript 调用 lambda 来填充 HTML 列表,但它需要知道 lambda 集成的 API 网关 URL。

目前,我生成一个 RestApi,如下所示......

    const handler = new lambda.Function(this, "TestHandler", {
      runtime: lambda.Runtime.NODEJS_10_X,
      code: lambda.Code.asset("build/test-service"),
      handler: "index.handler",
      environment: {
      }
    });

    this.api = new apigateway.RestApi(this, "test-api", {
      restApiName: "Test Service"
    });    

    const getIntegration = new apigateway.LambdaIntegration(handler, {
      requestTemplates: { "application/json": '{ "statusCode": "200" }' }
    });

    const apiUrl = this.api.url;

但是在 cdk 部署上, apiUrl =

"https://${Token[TOKEN.39]}.execute-api.${Token[AWS::Region.4]}.${Token[AWS::URLSuffix.1]}/${Token[TOKEN.45]}/"

因此,直到静态站点需要该值之后,才会解析/生成 url。

如何计算/查找/获取 API 网关 URL 并更新 cdk 部署上的 javascript?

或者有更好的方法来做到这一点吗?即静态 javascript 是否有一种优雅的方式来检索 lambda api 网关 url?

Thanks.


我成功使用的模式是将 CloudFront 分配或 API 网关放在 S3 存储桶前面。

所以要求https://[api-gw]/**/*被代理到https://[s3-bucket]/**/*.

然后我将在同一个 API 网关中创建一个新的代理路径,用于名为/config这是一个标准的 Lambda 支持的 API 端点,每当前端调用时,我都可以向前端返回各种信息,例如品牌信息或 API 密钥GET /config.

此外,这还避免了诸如 CORS 之类的问题,因为两个源都是相同的(API 网关域)。

使用 CloudFront 发行版而不是 API 网关,情况几乎相同,只是您使用 CloudFront 发行版的“源”配置而不是路径和方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AWS CDK 将 API 网关 URL 传递到同一堆栈中的静态站点 的相关文章

随机推荐