使用AWS re:Post即您表示您同意 AWS re:Post 使用条款

如何使用我自己的 CloudFront 分配来设置 API Gateway?

4 分钟阅读
0

我想在 Amazon API Gateway 中使用边缘优化的 API 端点,但我想为它创建自己的 Amazon CloudFront 分配。

简短描述

如果您的 API 客户端在地理位置上分散,则在 API Gateway 中使用边缘优化的 API 端点。这种类型的端点充当区域端点,使用 AWS 托管式 CloudFront Web 分配来缩短客户端连接时间。

要使用全球 CloudFront 内容分发网络并保持对分配的更多控制,请使用带有自定义 CloudFront Web 分配的区域 API

解决方法

**先决条件:**创建一个 AWS Lambda 函数以与您的 API Gateway REST API 集成,并在 API Gateway 中创建区域 API。

us-east-1 区域的 AWS Certificate Manager (ACM) 中创建 SSL/TLS 证书,并在 API Gateway REST API 所在的 AWS 区域创建 SSL/TLS 证书。要获得由 ACM 颁发或导入 ACM 的域名的证书,请完成以下步骤:

  1. 注册您的互联网域名。您可以使用 Amazon Route 53 或第三方认可的域名注册商。
  2. 在 ACM 中为域名创建 SSL/TLS 证书,或将其导入 ACM。

为您的 API 设置 GET 方法

完成以下步骤:

  1. 打开 API Gateway 控制台
  2. 选择您的新区域 API 的名称。
  3. 选择 Create resource(创建资源)。
  4. 对于 Resource name(资源名称),输入 greetings
  5. 选择 Create method(创建方法)。
  6. 方法类型选择 GET,为集成类型选择 Lambda Function。然后,切换 Lambda 代理集成按钮并选择您的 Lambda 函数。

部署您的 API 并识别您的 API 调用 URL

完成以下步骤:

  1. 将您的 API 部署到某个阶段
  2. 阶段编辑器窗格的开头,将 greetings 资源的 GET HTTP 方法的调用 URL 复制到剪贴板。

API Gateway API 调用 URL 示例:

https://restApiId.execute-api.region.amazonaws.com/stageName/greetings

测试您的 API 以获得 200 OK 响应

要确认您的 API 返回 200 OK 响应,请通过 API Gateway 控制台、Postman 应用程序或 curl 来测试您的 API 调用 URL。有关 Postman 和 curl 的更多信息,请参阅 Postman 网站curl 网站

使用 curl 测试您的 API 是否有 200 OK 响应

根据您的操作系统,运行以下命令之一。

**注意:**将 https://restApiId.execute-api.region.amazonaws.com/stageNamee/greetings 替换为您的 API 调用 URL。

对于 Linux,请运行以下命令:

curl -IX GET https://restApiId.execute-api.region.amazonaws.com/stageName/greetings

对于 Windows PowerShell,请运行以下命令:

curl https://restApiId.execute-api.region.amazonaws.com/stageName/greetings

**注意:**如果您获得的状态码不是 200 OK,请检查控制台以确认您的 API 已部署到您的阶段。另外,请确认您的调用 URL 正确指定了您的阶段。

创建 CloudFront Web 分配

完成以下步骤:

  1. 打开 CloudFront 控制台

  2. 选择 Create Distribution(创建分配)。

  3. Origin Domain Name(源域名),输入您的 API 调用 URL。然后,删除阶段和资源名称。
    源域名示例:

    https://restApiId.execute-api.region.amazonaws.com
  4. 对于 Protocol(协议),选择 HTTPS Only(仅 HTTPS)。
    **注意:**API Gateway 不支持未加密 (HTTP) 端点。有关更多信息,请参阅 Amazon API Gateway 常见问题解答

  5. 对于 Minimum Origin SSL Protocol(最低源 SSL 协议),最佳实践是选择 TLSv1.2。不要选择 SSLv3。API Gateway 不支持 SSLv3 协议。

  6. 对于 Origin Path(源路径),输入您的 API 阶段名称,并在其前面加上斜杠 (/stageName)。或者,若要在调用 URL 时自己输入阶段名称,请不要在 Origin Path(源路径)中输入任何内容。
    **注意:**如果您为 Origin Path(源路径)输入了错误的阶段名称,然后调用 CloudFront 分配,则可能会出现错误。例如,您可能会遇到未经授权的请求错误,该错误返回消息“缺少身份验证令牌”和 403 Forbidden 响应代码

  7. (可选)要将自定义标头转发到您的来源,请为 Origin Custom Headers(源自定义标头)输入一个或多个自定义标头。

  8. 如果适用,请按照如果您对 API 使用 IAM 身份验证或为 CloudFront Web 分配使用自定义域名部分中的说明进行操作。

  9. (可选)在 Distribution Settings(分配设置)下,配置要自定义的其他设置。

  10. 选择 Create Distribution(创建分配)。

  11. 等待 15-20 分钟,让您的分配完成部署。当分配状态在控制台中显示为已部署时,表示分配已准备就绪。

有关更多信息,请参阅创建分配

测试您的 CloudFront Web 分配

完成以下步骤:

  1. 打开 CloudFront 控制台

  2. 将您的分配的分配域名复制到剪贴板。
    非自定义域名示例:

    a222222bcdefg5.cloudfront.net
  3. 测试域名中是否有 200 OK 响应。如果您收到 500 服务器错误代码,则该分配可能无法部署。如果您没有得到任何响应,则说明 CloudFront DNS 记录尚未传播。无论哪种情况,请在创建分配后等待 15-20 分钟,然后重试该过程。

**重要事项:**上述步骤适用于未为任何资源方法开启 AWS Identity and Access Management (IAM) 身份验证的 API 资源。如果您有使用 IAM 身份验证的方法,则在调用 API 时将资源名称附加到分配域名的末尾。完整的调用 URL(包括资源名称)与以下示例之一类似。

API Gateway API 调用 URL 示例(使用原始路径):

https://distributionDomainName/stageName/resourceName

API Gateway API 调用 URL 示例(不使用原始路径):

https://distributionDomainName/resourceName

有关如何测试您的分配的更多信息,请参阅如何激活 API Gateway API 的 IAM 身份验证?

如果您对 API 使用 IAM 身份验证或为 CloudFront Web 分配使用自定义域名

默认情况下,CloudFront 不会将传入的授权标头转发到源(在本用例中为 API Gateway)。如果您对 API 使用 IAM 身份验证或对分配使用自定义域名,请执行以下操作之一。

(用于 IAM 身份验证)将授权标头添加到您的 CloudFront 允许列表中

完成以下步骤:

  1. 创建 CloudFront 分配。
  2. Create Distribution(创建分配)页面上,对于 Default cache behavior and Cache key and origin requests(默认缓存行为和缓存密钥和源请求),选择 Legacy cache(旧版缓存)设置。
  3. Headers(标头)下拉列表中选择 Include the following headers(包括以下标头)。然后,从显示的标头列表中选择 Authorization(授权)。配置要转发到 API 的标头。
    -或-
    对于 Cache key and origin requests(缓存密钥和源请求),在 Cache Policy(缓存策略)下,选择现有缓存策略或创建新的缓存策略。该策略必须将 Authorization(授权)标头添加到您的 CloudFront 许可列表中。
  4. (可选)要测试设置,请执行以下操作:
    以编程方式为您的 API Gateway 端点创建所需的 Signature 版本 4 签名。对于 host 值,请输入您的 API Gateway 调用 URL。对于 endpoint 值,请输入您的 CloudFront Web 分配 URL。
    API Gateway 调用 URL 示例:
    example_api_id.execute.example_region.amazon.com
    CloudFront Web 分配 URL 示例:
    d######.cloudfront.net

注意:如果您使用的是 Postman 应用程序,则在 Authorization(授权)选项卡中,为 Type(类型)选择 AWS Signature(AWS 签名)。然后,输入访问密钥秘密密钥。Postman 使用您输入的凭据来生成所需的标头。然后,使用 Signature 版本 4 流程生成的授权标头(以及所有 SignedHeaders),将 API 请求发送到 CloudFront 分配。

(对于自定义域名或 IAM 身份验证)在 API Gateway 中设置区域自定义域名以访问您的 API

完成以下步骤:

  1. 在 API Gateway 中创建新的区域 API将边缘优化的 API Gateway API 更改为区域 API

  2. 为 API 设置区域自定义域名,并为您的 API 创建 API 映射
    **注意:**当您通过 CloudFront 访问您的 API 时,请使用此自定义域名。

  3. 创建 CloudFront Web 分配,但在 Origin Domain Name(源域名)中,输入您的 API Gateway 目标域名,而不是 API 调用 URL。
    注意:在自定义域详细信息的端点****配置部分中找到您的 API Gateway 目标域名
    API Gateway 目标域名示例:

    d-######.execute-api.example-region.amazonaws.com
  4. Create Distribution(创建分配)页面上,对于 Default cache behavior and Cache key and origin requests(默认缓存行为和缓存密钥和源请求),选择 Legacy cache(旧版缓存)设置。

  5. Headers(标头)下拉列表中选择 Include the following headers(包括以下标头)。然后,从显示的标头列表中选择 Host(主机)和 Authorization(授权)。配置要转发到 API 的标头。
    -或-
    对于 Cache key and origin requests(缓存密钥和源请求),在 Cache Policy(缓存策略)下,选择现有缓存策略或创建新的缓存策略。该策略必须将 Authorization(授权)标头添加到您的 CloudFront 许可列表中。

  6. Distribution Settings(分配设置)下的 Alternate domain name(备用域名)中,输入您创建的自定义域名。

  7. 对于 SSL Certificate(SSL 证书),选择 Custom SSL Certificate(自定义 SSL 证书)。然后,为该域添加 AWS Certificate Manager (ACM) 证书

  8. 部署 CloudFront Web 分配后,配置 DNS 记录以将自定义域映射到 CloudFront Web 分配。为此,请创建别名或 CNAME 记录。有关详细信息,请参阅通过添加备用域名 (CNAME) 使用自定义 URL

  9. (可选)要测试设置,请以编程方式为您的自定义域名创建 Signature 版本 4 签名请求
    **注意:**您也可以使用 Postman 应用程序来测试设置。