【问题标题】:AWS API GateWay can't have multiple paths?AWS API Gateway 不能有多个路径?
【发布时间】:2018-08-29 06:19:56
【问题描述】:

我刚刚通过 AWS API Gateway 设置了自定义域名,现在我有多个域名都路由到一个 lambda 函数。它只是提供一个网页。

设置如下:

我有几个不同的域,我希望它们都提供相同的内容。

现在,我想添加另一个路径,例如 /getdata 或仅提供来自数据库的一些数据而不是提供静态 HTML 的路径。

但是当我尝试添加另一个路径时,我得到了这个错误:

错误 如果基本路径为空,则只允许一个基本路径映射。

那么我怎样才能拥有一个具有多个路径的域呢?

我尝试只使用通配符路径:*,它适用于 /test 或 /getdata 等多个路径,但它不适用于仅使用域名,我无法告诉每个用户确保每次都输入 /home 之类的东西

【问题讨论】:

    标签: amazon-web-services api aws-lambda aws-api-gateway


    【解决方案1】:

    啊,我想通了!

    因此,很遗憾,显示自定义域的页面并不是您需要进行路由的地方。

    正确的过程是创建一个 API(或使用现有的 API,并修改资源)并为其提供代理资源,以及源自根路径的普通 GET 方法。

    首先,转到您的 API Gateway 控制台,然后创建一个新 API。

    然后,一旦你给它一个名字,并选择类型(区域,或边缘),它会显示资源页面

    在这里,您将做两件事:创建一个 catch all 代理资源,以及一个获取根路径的资源。

    第 1 步:制作一个捕获所有代理资源:

    单击操作,然后选择创建资源

    在向导中,单击“配置为代理”并为其命名。保持资源路径不变。然后点击创建资源。 {proxy+} 是一种表示法,它告诉 AWS 该资源应该接受在 / 之后包含任何内容的任何路径。这意味着 /test 将与 /test/1/2/3/etc 一样工作。但是仅仅/单独是行不通的!

    接下来,它将带您进入选择集成类型的屏幕。我们想要 lambda,这是默认值。确保选择正确的区域,对我来说默认是正确的。然后开始输入您的 lambda 函数名称,它应该会动态弹出您的 lambda 函数列表。选择您想要的应用程序。如果这不起作用,您可以从 lambda 函数控制台复制并粘贴您的 lambda ARN。点击保存。

    第 2 步:为根路径创建一个获取资源

    点击顶部的根斜线,就在它说资源的地方。然后单击操作,并选择创建方法。它会在根斜线下弹出一个小选择的东西,在那里你应该选择GET,然后点击小勾号。

    在这里,请确保选中使用 Lambda 代理集成,然后此表单的其余部分应与您上次所做的相同。只需选择您所在的地区和您的 lambda 函数,然后点击保存。

    第 3 步:部署

    完成后,转到操作,然后选择部署 API,为阶段命名并提供一些描述,然后您就可以将此 API 附加到您的自定义域。

    第 4 步:附加

    在左侧选项卡上向下滚动到显示自定义域名的位置,然后创建一个新域名(或将其附加到现有域名,如果有的话)

    输入您的域名,然后选择区域或边缘。然后选择你的证书(关于如何通过 AWS 制作证书有很多很好的指南)

    点击保存后,会如下所示:

    单击显示基本路径映射,然后单击编辑。

    在路径字段中只留下一个斜线,在目标字段中,从下拉列表中选择您刚刚部署的 API。在右侧,选择您在部署 API 时创建的阶段。

    最后,它会等待一段时间的初始化,因此在您等待的时候,请记住您需要为此域创建一个 route53 记录集,并将其映射到 API GateWay 提供给我们的云端目标 URL。此目标 URL 类似于:www.u10dsa3s5iovdk.cloudfront.net。复制它,然后转到 Route 53,为您的域选择托管区域。创建一个记录集,并将其命名为与您刚刚创建的域相同的名称,因此如果您创建了 www.example.com,则在 Route 53 的名称字段中您需要输入 www。或者,如果您制作了 test.example.com,您需要输入 test。然后选择 Alias: Yes,对于 Alias Target,粘贴来自 API GateWay 的 cloudfront url。

    自定义域名初始化完成后,您可以调用 www.example.com 和 www.example.com/anything/else/you/want/to/put/here

    希望这可以帮助任何像我一样被困的人。如果我遗漏了什么,或者有什么不准确的地方,请告诉我。

    【讨论】:

    • 正是我想要的!超级有帮助。感谢您的详细演练!
    【解决方案2】:

    在这种情况下,您需要为需要通过自定义域提供服务的每个 api 配置不同于“/”的路径。如果您提供至少一个没有基本路径的 api,AWS Api Gateway 不允许您将多个 api 提供到同一个自定义域中。

    【讨论】:

      猜你喜欢
      • 2019-01-13
      • 2017-08-29
      • 1970-01-01
      • 2021-08-31
      • 2018-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-06
      相关资源
      最近更新 更多