本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用私有端点和应用程序负载均衡器在内部网站上部署 Amazon API Gateway API
Saurabh Kothari,Amazon Web Services
摘要
此模式向您展示如何在可从本地网络访问的内部网站上部署 Amazon API Gateway API。您将学习使用专有终端节点、Application Load Balancer、AWS  PrivateLink 和 Amazon Route 53 设计的架构,为私有 API 创建自定义域名。此架构可防止使用自定义域名和代理服务器帮助在 API 上进行基于域的路由带来的意外后果。例如,如果您在不可路由的子网中部署虚拟私有云(VPC)端点,则您的网络将无法访问 API Gateway。常见的解决方案是使用自定义域名,然后在可路由的子网中部署 API,但是当代理配置将流量 (execute-api.{region}.vpce.amazonaws.com) 传递到 AWS Direct Connect 时,这可能会破坏其他内部站点。最后,此模式可以帮助您满足使用无法通过 Internet 访问的私有 API 和自定义域名的组织要求。
先决条件和限制
先决条件
- 一个有效的 Amazon Web Services account 
- 用于网站和 API 的 Server Name Indication (SNI) 证书 
- 从本地环境到使用 AWS Direct Connect 或 AWS Site-to-Site VPN 设置的 AWS 账户的连接 
- 带有相应域的私有托管区(例如 domain.com),该域从本地网络解析,并将 DNS 查询转发到 Route 53 
- 可从本地网络访问的可路由私有子网 
限制
有关负载均衡器、规则和其他资源的配额(以前称为限制)的更多信息,请参阅 Elastic Load Balancing 文档中的应用程序负载均衡器配额。
架构
技术堆栈
- Amazon API Gateway 
- Amazon Route 53 
- 应用程序负载均衡器 
- AWS Certificate Manager 
- AWS PrivateLink 
目标架构
下图显示了如何在 VPC 中部署应用程序负载均衡器,该均衡器根据应用程序负载均衡器侦听器规则将 Web 流量引导到网站目标组或 API Gateway 目标组。API Gateway 目标组是 API Gateway 中 VPC 端点的 IP 地址列表。API Gateway 配置为通过其资源策略将 API 设为私有。该策略拒绝所有不是来自特定 VPC 端点的调用。API 网关中的自定义域名已更新为对 API 及其阶段使用 api.domain.com。添加了应用程序负载均衡器规则,以根据主机名路由流量。

图表显示了以下工作流:
- 本地网络中的用户尝试访问内部网站。该请求已发送至 ui.domain.com 和 api.domain.com。然后,请求被解析至可路由私有子网的内部应用程序负载均衡器。SSL 在 ui.domain.com 和 api.domain.com 的应用程序负载均衡器处终止。 
- 在应用程序负载均衡器上配置的侦听器规则将检查主机标头。 - a. 如果主机标头为 api.domain.com,则请求将转发到 API Gateway 目标组。应用程序负载均衡器通过端口 443 启动与 API Gateway 的新连接。 - b. 如果主机标头为 ui.domain.com,则请求将转发到网站目标组。 
- 当请求到达 API Gateway 时,API Gateway 中配置的自定义域映射将确定主机名以及要运行的 API。 
自动化和扩缩
可以使用 AWS  CloudFormation  或 AWS Cloud Development Kit (AWS CDK) 自动执行此模式中的步骤。要配置 API Gateway 调用的目标组,您必须使用自定义资源来检索 VPC 端点的 IP 地址。API 调用describe-vpc-endpoints
工具
- Amazon API Gateway 可帮助您创建、发布、维护、监控和保护任何规模的 RES WebSocket APIs T、HTTP。 
- Amazon Route 53 是一种可用性高、可扩展性强的 DNS Web 服务。 
- AWS Certifice Manager (ACM) 可帮助您创建、存储和续订 X.509 公有和私有 SSL/TLS X.509 证书和密钥,以保护您的 AWS 网站和应用程序。 
- AWS Cloud Development Kit (AWS CDK) 是一个软件开发框架,可帮助您在代码中定义和预调配 Amazon Web Services Cloud 基础设施。 
- AWS PrivateLink 可帮助您创建从您 VPCs 到 VPC 之外的服务的单向私有连接。 
操作说明
| Task | 描述 | 所需技能 | 
|---|---|---|
| 创建 SNI 证书,并将该证书导入 ACM。 | 
 | 网络管理员 | 
| Task | 描述 | 所需技能 | 
|---|---|---|
| 在 API Gateway 中创建接口 VPC 端点。 | 要创建接口 VPC 端点,请按照 Amazon Virtual Private Cloud (Amazon VPC) 文档中的使用接口 VPC 端点访问 Amazon Web Services 中的说明进行操作。 | 云管理员 | 
| Task | 描述 | 所需技能 | 
|---|---|---|
| 为应用程序创建目标组。 | 为应用程序的 UI 资源创建目标组。 | 云管理员 | 
| 为 API Gateway 端点创建目标组。 | 
 | 云管理员 | 
| 创建应用程序负载均衡器。 | 
 | 云管理员 | 
| 创建侦听器规则。 | 创建侦听器规则,以执行以下操作: 
 | 云管理员 | 
| Task | 描述 | 所需技能 | 
|---|---|---|
| 创建私有托管区。 | 为 domain.com 创建私有托管区。 | 云管理员 | 
| 创建域记录。 | 对于以下,创建 CNAME 记录: 
 | 云管理员 | 
| Task | 描述 | 所需技能 | 
|---|---|---|
| 创建和配置私有 API 端点。 | 
 | 应用程序开发人员、云管理员 | 
| 创建自定义域名。 | 
 | 云管理员 |