教程:使用AWS集成构建 API Gateway REST API - Amazon API Gateway

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

教程:使用AWS集成构建 API Gateway REST API

教程:使用 Lambda 代理集成构建 Hello World REST API使用 Lambda 集成构建 API Gateway REST API主题介绍如何创建 API Gateway API 以公开集成的 Lambda 函数。此外,您还可以创建 API Gateway API 来公开其他AWS服务,例如 Amazon SNS、Amazon S3、Amazon Kinesis,甚至是 AWS Lambda。AWS 集成使其成为可能。Lambda 集成或 Lambda 代理集成是一种特殊情况,其中 Lambda 函数调用通过 API Gateway API 公开。

所有 AWS 服务都支持通过专用 API 来公开其特征。但是,应用程序协议或编程接口可能因服务而异。具有 AWS 集成的 API Gateway API 的优点是,可为您的客户端提供用于访问不同AWS服务的一致的应用程序协议。

在本演练中,我们创建了一个 API 来公开 Amazon SNS。有关将 API 与其他 AWS 服务集成的更多示例,请参阅 Amazon API Gateway 教程和研讨会

与 Lambda 代理集成不同,没有用于其他AWS服务的相应代理集成。因此,API 方法与单个 AWS 操作集成。为了获得更大的灵活性,可以按照类似于代理集成的方式来设置 Lambda 代理集成。然后,Lambda 函数会为其他AWS操作解析和处理请求。

当终端节点超时的时候,API Gateway 不会重新尝试。API 调用方必须实施重试逻辑来处理终端节点超时。

本演练以 使用 Lambda 集成构建 API Gateway REST API 中的说明和概念为基础。如果您尚未完成该演练,我们建议您先完成它。

先决条件

在开始本演练之前,请执行以下操作:

  1. 完成 开始使用 API Gateway 的先决条件 中的步骤。

  2. 创建名为 MyDemoAPI 的新 API。有关更多信息,请参阅 教程:使用 HTTP 非代理集成构建 REST API

  3. 至少将 API 部署到名为 test 的阶段一次。有关更多信息,请参阅中的部署 API使用 Lambda 集成构建 API Gateway REST API

  4. 完成中的剩余步骤使用 Lambda 集成构建 API Gateway REST API

  5. 在 Amazon Simple Notification Service (Amazon SNS) 中至少创建一个主题。您将使用已部署的 API 获取 Amazon SNS 中与您的AWS账户相关联的主题列表。要了解如何在 Amazon SNS 中创建主题,请参阅创建主题。(您不需要复制步骤 5 中提到的主题 ARN。)

步骤 1:创建 AWS 服务代理执行角色

要允许 API 调用 Amazon SNS 操作,您必须已将适当的 IAM policy 附加到 IAM 角色。

创建 AWS 服务代理执行角色
  1. 登录AWS Management Console,然后通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 选择 Roles(角色)。

  3. 选择 Create role(创建角色)。

  4. 选择受信任实体的类型下选择 AWS 服务,然后选择 API Gateway 并选择允许 API Gateway 将日志推送到 CloudWatch Logs

  5. 选择下一步,然后再次选择下一步

  6. 对于 Role name (角色名称),输入 APIGatewaySNSProxyPolicy,然后选择 Create role (创建角色)

  7. Roles 列表中,选择您刚创建的角色。您可能需要滚动或使用搜索栏来查找角色。

  8. 对于所选角色,选择添加权限选项卡。

  9. 从下拉列表中选择附加策略

  10. 在搜索栏中,输入 AmazonSNSReadOnlyAccess 然后选择添加权限

    注意

    为简单起见,本教程使用托管策略。作为最佳实践,您应创建自己的 IAM 策略以授予所需的最低权限。

  11. 记下新创建的角色 ARN,稍后将使用它。

步骤 2:创建资源

在此步骤中,您将创建一个资源,使 AWS 服务代理能够与 AWS 服务进行交互。

创建资源
  1. 通过以下网址登录到 Amazon API Gateway 控制台:https://console.aws.amazon.com/apigateway

  2. 选择 API。

  3. 选择根资源 /(由一个正斜杠 (/) 表示),然后选择创建资源

  4. 代理资源保持为关闭状态。

  5. 资源路径保持为 /

  6. 对于 Resource name (资源名称),输入 mydemoawsproxy

  7. CORS(跨源资源共享)保持为关闭状态。

  8. 选择创建资源

步骤 3:创建 GET 方法

在此步骤中,您将创建一个 GET 方法,使 AWS 服务代理能够与 AWS 服务进行交互。

创建 GET 方法
  1. 选择 /mydemoawsproxy 资源,然后选择创建方法

  2. 对于方法类型,选择 GET

  3. 对于集成类型,选择 AWS 服务

  4. 对于 AWS 区域,选择您创建 Amazon SNS 主题的 AWS 区域。

  5. 对于 AWS 服务,选择 Amazon SNS

  6. AWS 子域保留为空白。

  7. 对于 HTTP 方法,选择 GET

  8. 对于操作类型,选择使用操作名称

  9. 对于操作名称,输入 ListTopics

  10. 对于执行角色,输入 APIGatewaySNSProxyPolicy 的角色 ARN。

  11. 选择创建方法

步骤 4:指定方法设置并测试方法

现在,您可以测试 GET 方法来验证它是否已经过正确设置,可以列出您的 Amazon SNS 主题。

测试 GET 方法
  1. 选择 Test(测试)选项卡。您可能需要选择右箭头按钮以显示该选项卡。

  2. 选择测试

    结果显示与以下内容类似的响应:

    { "ListTopicsResponse": { "ListTopicsResult": { "NextToken": null, "Topics": [ { "TopicArn": "arn:aws:sns:us-east-1:80398EXAMPLE:MySNSTopic-1" }, { "TopicArn": "arn:aws:sns:us-east-1:80398EXAMPLE:MySNSTopic-2" }, ... { "TopicArn": "arn:aws:sns:us-east-1:80398EXAMPLE:MySNSTopic-N" } ] }, "ResponseMetadata": { "RequestId": "abc1de23-45fa-6789-b0c1-d2e345fa6b78" } } }

步骤 5:部署 API

在此步骤中,您将部署 API,以便在 API Gateway 控制台外部对其进行调用。

部署 API
  1. 选择 Deploy API (部署 API)

  2. 对于阶段,选择新建阶段

  3. 对于阶段名称,输入 test

  4. (可选)对于 Description (描述),输入描述。

  5. 选择 Deploy (部署)

步骤 6:测试 API

在本步骤中,您将转到 API Gateway 控制台外部,并使用您的AWS服务代理与 Amazon SNS 服务进行交互。

  1. 在主导航窗格中,选择阶段

  2. 阶段详细信息下,选择复制图标以复制您 API 的调用 URL。

    它应如下所示:

    https://my-api-id.execute-api.region-id.amazonaws.com/test
  3. 将 URL 输入到新浏览器标签页的地址框中。

  4. 附加 /mydemoawsproxy,使 URL 如下所示:

    https://my-api-id.execute-api.region-id.amazonaws.com/test/mydemoawsproxy

    浏览到该 URL。此时应显示以下信息:

    {"ListTopicsResponse":{"ListTopicsResult":{"NextToken": null,"Topics":[{"TopicArn": "arn:aws:sns:us-east-1:80398EXAMPLE:MySNSTopic-1"},{"TopicArn": "arn:aws:sns:us-east-1:80398EXAMPLE:MySNSTopic-2"},...{"TopicArn": "arn:aws:sns:us-east-1:80398EXAMPLE:MySNSTopic-N}]},"ResponseMetadata":{"RequestId":"abc1de23-45fa-6789-b0c1-d2e345fa6b78}}}

步骤 7:清除

您可以删除AWS服务代理运行所需的 IAM 资源。

警告

如果您删除AWS服务代理所依赖的 IAM 资源,那么该AWS服务代理和任何依赖它的 API 将无法正常运行。IAM 资源删除操作无法撤消。如果要再次使用 IAM 资源,您必须重新创建它。

删除相关联的 IAM 资源
  1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 详细信息区域中,选择角色

  3. 选择 APIGatewayAWSProxyExecRole,然后依次选择角色操作删除角色。在系统提示时,选择 Yes, Delete

  4. 详细信息区域中,选择策略

  5. 选择 APIGatewayAWSProxyExecPolicy,然后选择策略操作删除。系统提示时,选择删除

本演练到此结束。有关创建 API 作为AWS服务代理的更深入讨论,请参阅教程:在 API Gateway 中创建 REST API 作为 Amazon S3 代理教程:创建具有两个 AWS 服务集成和一个 Lambda 非代理集成的 Calc REST API教程:在 API Gateway 中创建 REST API 作为 Amazon Kinesis 代理