Amazon API Gateway
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

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

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

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

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

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

此演练建立在使用 Lambda 集成构建 API Gateway API中的说明和概念的基础之上。如果您尚未完成该演练,我们建议您先完成该演练。

先决条件

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

  1. 完成 为构建 API Gateway API 做好准备 中的步骤。

  2. 确保 IAM 用户有权在 IAM 中创建策略和角色。您需要在此演练中创建 IAM 策略和角色。

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

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

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

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

步骤 1:创建资源

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

创建资源

  1. 通过 https://console.amazonaws.cn/apigateway 登录 API Gateway 控制台。

  2. 如果显示 MyDemoAPI,则选择资源

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

  4. 对于资源名称,键入 MyDemoAWSProxy,然后选择 Create Resource (创建资源)

步骤 2:创建 GET 方法

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

创建 GET 方法

  1. 资源窗格中,选择 /mydemoawsproxy,然后选择 Create Method (创建方法)

  2. 对于 HTTP 方法,请选择 GET,然后保存您的选择。

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

在此步骤中,您将创建一个 IAM 角色,您的 AWS 服务代理将使用该角色与 AWS 服务进行交互。我们将这一 IAM 角色称为 AWS 服务代理执行角色。如果没有这个角色,API Gateway 将无法与 AWS 服务进行交互。在后面的步骤中,您将在刚才创建的 GET 方法的设置中指定此角色。

创建 AWS 服务代理执行角色及其策略

  1. 登录 AWS 管理控制台 并通过以下网址打开 IAM 控制台 https://console.amazonaws.cn/iam/

  2. 选择策略

  3. 请执行下列操作之一:

    • 如果显示 Welcome to Managed Policies (欢迎使用管理的策略) 页面,则选择 (开始使用),然后选择 Create Policy (创建策略)

    • 如果出现策略列表,请选择 Create Policy (创建策略)

  4. Create Your Own Policy 旁,选择 Select

  5. 对于策略名称,键入策略的名称(例如 APIGatewayAWSProxyExecPolicy)。

  6. 对于描述,键入 Enables API Gateway to call AWS services

  7. 对于 Policy Document,键入以下内容,然后选择 Create Policy

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Resource": [ "*" ], "Action": [ "sns:ListTopics" ] } ] }

    此策略文档允许调用方获取 AWS 账户的 Amazon SNS 主题列表。

  8. 选择 Roles

  9. 选择 Create Role

  10. Select role type (选择角色类型) 下选择 AWS Service (AWS 服务),然后选择 API Gateway (API 网关)

  11. 选择 Next: Permissions (下一步:权限)

  12. 选择 Next: Review

  13. 对于 Role Name (角色名称),键入执行角色的名称(例如,APIGatewayAWSProxyExecRole),也可以键入对此角色的说明,然后选择 Create role (创建角色)

  14. Roles 列表中,选择您刚创建的角色。您可能需要向下滚动该列表。

  15. 对于所选的角色,选择附加策略

  16. 选中您之前创建的策略(例如 APIGatewayAWSProxyExecPolicy)旁的复选框,然后选择 Attach policy (附加策略)

  17. 您刚刚创建的角色具有以下信任关系,该信任关系让 API Gateway 为附加的策略所允许的任何操作承担该角色:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "apigateway.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

    对于 Role ARN (角色 ARN),请记下执行角色的 Amazon 资源名称 (ARN)。稍后您将需要用到它。该 ARN 应该类似于:arn:aws:iam::123456789012:role/APIGatewayAWSProxyExecRole,其中 123456789012 是您的 AWS 账户 ID。

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

在此步骤中,您将指定 GET 方法的设置,以便它可以通过 AWS 服务代理与 AWS 服务进行交互。然后,您将测试该方法。

指定 GET 方法的设置并对其进行测试

  1. 在 API Gateway 控制台中,在名为 MyDemoAPI 的 API 的资源窗格中,选择 /mydemoawsproxy,然后选择 GET

  2. 设置窗格中,对于 Integration type (集成类型),选择 Show advanced (显示高级),然后选择 AWS Service Proxy (&AWS; 服务代理)

  3. 对于 AWS 区域,选择要获取 Amazon SNS 主题的 AWS 区域的名称。

  4. 对于AWS 服务,选择 SNS

  5. 对于 HTTP 方法,选择 GET

  6. 对于 Action,键入 ListTopics

  7. 对于 Execution Role (执行角色),键入执行角色的 ARN。

  8. Path Override (路径覆盖) 留空。

  9. 选择 Save

  10. Method Execution (方法执行) 窗格的客户端框中,选择 TEST,然后选择测试。如果成功,Response Body (响应正文) 将显示类似于以下内容的响应:

    { "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. 对于 Deployment stage (部署阶段),选择 test

  3. 对于 Deployment description (部署描述),键入 Calling AWS service proxy walkthrough

  4. 选择 Deploy (部署)

步骤 6:测试 API

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

  1. Stage Editor (阶段编辑器) 窗格的 Invoke URL (调用 URL) 旁边,将 URL 复制到剪贴板。它应如下所示:

    https://my-api-id.execute-api.region-id.amazonaws.com/test
  2. 将 URL 粘贴到新浏览器选项卡的地址框中。

  3. 附加 /mydemoawsproxy,使之如下所示:

    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.amazonaws.cn/iam/

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

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

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

  5. 选择 APIGatewayAWSProxyExecPolicy,然后依次选择 Policy Actions (策略操作)删除。系统提示时,选择删除

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