【问题标题】:Understanding AWS API Gateway Custom Domain Names了解 AWS API Gateway 自定义域名
【发布时间】:2018-05-29 09:18:45
【问题描述】:

我很难理解 AWS API Gateway 自定义域的工作原理。

我为我的 api 设置了一个 Regional Custom Domain Name,例如 api.example.com。结果是Target Domain Name,格式为:

aaaaaaaaaaaa.execute-api.us-east-1.amazonaws.com

如果我尝试使用此链接调用 API,例如:

https://aaaaaaaaaaaa.execute-api.us-east-1.amazonaws.com/mymap/mystage/example

但我收到了403 Forbidden。

但是,如果我转到Stages 并选择mystage,则会出现一个大蓝色Invoke URL,格式为:

https://bbbbbbbbbb.execute-api.us-east-1.amazonaws.com/mymap/mystage/example

哪个有效!

所以我的前两个问题来了:

1 - 为什么 API Gateway 会为同一个 API 生成 2 个不同的 URL(Target Domain Name 和 Invoke URL)?

2 - 为什么Invoke URL 有效而Target Domain Name 无效?


这是我问题的第二部分,我正在尝试为Regional Custom Domain Name 配置配置Route 53,但我找不到任何有关正确方法的示例(仅适用于Edge Optimized Custom Domain Name)。

我尝试为api.example.com 创建一个A 记录作为Alias 到aaaaaaaaaaaa.execute-api.us-east-1.amazonaws.com,但它说:

无法保存记录集,因为: - 别名目标包含无效值。

所以我为api.example.com 创建了一个CNAME 记录,将Alias 设置为No(设置为Yes 会带来与A 记录案例中相同的错误消息)并将值设置为@ 987654350@ 但是当我尝试以https://api.example.com/mymap/mystage/example 调用我的API 时,我得到了404。

我做错了什么?


编辑:

此主题已移至 AWS 论坛 here


编辑 2:

显然,正如 AWS 支持人员所说,API 网关如何处理自定义域名和常规 API 网关 URL 存在不一致,所有这些都记录在此 AWS 论坛线程here

【问题讨论】:

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


    【解决方案1】:

    如果有人想了解 API Gateway 发生了什么,请查看this thread。

    它基本上说 API Gateway 处理常规 URL(如 aaaaaaaaaaaa.execute-api.us-east-1.amazonaws.com)与处理自定义域名 URL(如 api.myservice.com)的方式不同。因此,当 API Gateway 将您的 API 请求转发到您的 Lambda 函数时,您的 Lambda 函数将收到不同的 path 值,具体取决于您用来调用 API 的 URL 类型。

    就我而言,我使用的是serverless java container,因此我可以在 AWS Lambda 上运行 Jersey 网络服务。由于两个 URL 传递的 URL 不同,Jersey 在接收到其配置格式错误的 URL 时将返回 404。

    AWS API Gateway 团队表示,他们正在考虑统一这个 URL 调用,但到目前为止(2018 年 1 月)没有妥协。

    杰克回答了我的 Route 53 部分,我没有什么要补充的。

    【讨论】:

    • 我通读了整个线程......天哪,这就像一个 3 个月的磨难。我遇到了同样的问题,这帮助我避免了一两天陷入兔子洞。
    • 是的,这很累,我感到有点无助,我正在拔头发,这就是我想发布它的原因,这样其他人就不会像我一样迷失了,因为 AWS 是'没有做太多的努力来帮助我。我很高兴你能解决它。如果您使用的是无服务器 Java 容器,请务必查看文档,其中显示了如何处理提取基本路径字符串 github.com/awslabs/aws-serverless-java-container/wiki
    【解决方案2】:

    Route53 控制台尚不支持将 API 网关作为 ALIAS 目标。您必须使用 CLI/SDK(或直接点击 R53 API)创建 ALIAS 记录,并提供此页面上列出的目标托管区域:http://docs.aws.amazon.com/general/latest/gr/rande.html#apigateway_region

    为什么 API Gateway 会为同一个 API 生成 2 个不同的 URL( 目标域名和调用 URL)?

    调用 URL 是默认端点,始终可通过有效的 SSL 证书使用。此端点由 API Gateway 管理。目标域名是可选的(您必须设置自定义域名),DNS和SSL证书由您/客户管理。

    谢谢, 杰克

    【讨论】:

    • 天啊!非常感谢你来到这里!论坛上没有人回答我。这让我发疯了...我会尝试 CLI。
    • 有一件我不明白的事情......文档说我应该在我的 DNS 提供商上创建一个 CNAME,将我的 API 自定义名称映射到目标域名。我在 R53 上做过,但它不起作用......但是对于你所说的和文档所说的,它适用于外部 DNS 服务......为什么?有什么不同? R53到底不是DNS服务吗?
    • 我还想补充两点: 1 - 请更新文档以使此限制更加明确。 2 - 边缘优化的自定义域名创建了一个云端格式,R53 接受它作为别名,我仍然得到 404,但它不应该与 R53 一起使用吗?
    • 我能够使用 CLI 创建带有别名的 A 记录,但我仍然收到 404。
    • 杰克,你能回答我的论坛问题吗?还是不行
    猜你喜欢
    • 2020-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-26
    • 2021-03-22
    • 2020-09-16
    • 2021-06-17
    • 2020-01-16
    相关资源
    最近更新 更多