AWS CDK:如何找到 API Gateway API 的正确 URL

问题描述 投票:0回答:1

在 CDK (Typescript) 中,我正在创建一个 Lambda,前面有一个 API 网关。

AWS 控制台向我显示了一个名为“Invoke URL”的内容,类似于

https://wi4a95skjk.execute-api.us-east-1.amazonaws.com/prod
,它工作正常,正是我所需要的。

然后我尝试将我的自定义 URL 附加到它,如下所示:

  const certificate = Certificate.fromCertificateArn(
    scope,
    `${id}-cert`,
    props.certificateArn
  );

  const domainName = this.addDomainName(`${id}-dn`, {
    domainName: `${props.subDomainName}.${props.domainName}`,
    certificate,
  });

  const zone = HostedZone.fromLookup(this, `${id}-hz`, {
    domainName: props.domainName,
  });
  new ARecord(this, `${id}-arecord`, {
    zone,
    recordName: props.subDomainName,
    target: RecordTarget.fromAlias(new ApiGateway(this)),
    ttl: Duration.minutes(3),
  });

这成功地在区域中创建了一条 A 记录,如下所示:

mysub.example.org   A   Simple  -   Yes d-ywfxof47wi.execute-api.us-east-1.amazonaws.com.

(请注意,

代表由于某种原因未设置的 TTL。)

我的 URL

mysub.example.org
d-ywfx...
废话(指向不同的 IP 地址)当我尝试使用
curl
访问它们时,它们都只是挂起并且不执行任何操作。

这里出了什么问题?

编辑::现在我从

{"message":"Forbidden"}%
url 获取
d-y
;我自己的还挂着。

amazon-web-services aws-cdk
1个回答
0
投票

我的 URL mysub.example.org ...只是挂起并且不执行任何操作

嗯,我认为没有确凿的证据。您的 CDK 代码包含必要的部分。您的托管区域别名记录指向 API 网关域名。仔细检查引用的证书和托管区域资源。 ARN 使用

fromCertificateArn
引用您的现有证书,CDK 不会验证其值。您现有的托管区域信息通过
fromLookup
引用,CDK 通过 SDK 调用获取一次,然后缓存。检查
cdk.context.json
以确保缓存的区域值是最新的。

我从 d-y 网址收到 {"message":"Forbidden"}%;

这是预料之中的。它是“API 网关域名”值,而不是公开可用的端点。见下文。

请注意,- 代表由于某种原因未设置的 TTL。

这是预料之中的。正如 docs 所说: “如果别名记录指向 AWS 资源,则无法设置生存时间 (TTL);Route 53 使用资源的默认 TTL。”

回顾一下:

API网关域名

“API 网关域名”被用作托管区域别名记录的值(见下文)。它的格式为

d-73loomnpd7.execute-api.us-east-1.amazonaws.com
。这不是公开曝光的。

53 号公路别名记录

有问题中显示的信息。该值引用 API 网关域名(见上文)。

API 网关默认端点

  • CDK:Rest API 构造上的
    api.url
    属性。
  • 云形成:不适用
  • 控制台:API 网关 > API 设置 > 默认端点

默认端点是可公开访问的端点。这是您在问题中注意到的

https://wi4a95skjk.execute-api.us-east-1.amazonaws.com/prod
,其中
wi4a95skjk
前缀是 Rest API ID(CDK
api.apiId
属性),
/prod/
路径是阶段。您可能想要禁用默认端点,因为您(希望🤔)在API前面有一个自定义域。在 CDK 中,您可以在 RestAPI 构造上使用
disableExecuteApiEndpoint: true
来完成此操作。

// Tip: print the URL to the console at deploy time
new cdk.CfnOutput(this, "RestApiUrl", { value: api.url ?? "DISABLED",});
© www.soinside.com 2019 - 2024. All rights reserved.