教程:使用Amazon集成构建 API Gateway REST API - Amazon API Gateway
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

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

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

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

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

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

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

Prerequisites

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

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

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

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

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

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

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

步骤 1:创建资源

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

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

  2. 选择 MyDemoAPI

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

  4. 对于资源名称,输入 MyDemoAWSProxy,然后选择创建资源

步骤 2:创建 GET 方法

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

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

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

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

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

创建 Amazon 服务代理执行角色及其策略
  1. 登录 Amazon Web Services Management Console,单击 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。

  2. 选择策略

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

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

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

  4. 选择 JSON,然后输入以下文本:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Resource": [ "*" ], "Action": [ "sns:ListTopics" ] } ] }
  5. 选择查看策略

  6. 输入策略的名称和说明。

  7. 选择 Create policy

  8. 选择 Roles (角色)

  9. 选择 Create Role (创建角色)

  10. Select type of trusted entity (选择受信实体类型) 下选择 Amazon Service (亚马逊云科技服务),然后选择 API Gateway

  11. 选择下一步: 权限

  12. 选择下一步: 标签

  13. 选择 Next: Review (下一步: 审核)

  14. 对于角色名称,输入执行角色的名称(例如,APIGatewayAWSProxyExecRole),也可以输入对此角色的说明,然后选择创建角色

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

  16. 对于所选的角色,选择 Attach policies (附加策略)

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

  18. 您刚刚创建的角色具有以下信任关系,该信任关系让 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 是您的 Amazon 账户 ID。

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

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

指定 GET 方法的设置并对其进行测试
  1. 在 API Gateway 控制台中,在名为 MyDemoAPI 的 API 的资源窗格中,在 /mydemoawsproxy 中选择 GET

  2. 选择 Integration Request (集成请求),然后选择 Amazon Service (亚马逊云科技服务)

  3. 对于 Amazon Region (亚马逊云科技区域) 区域,选择要在其中获取 Amazon SNS 主题的Amazon区域的名称。

  4. 对于Amazon 服务,选择 SNS

  5. 对于 HTTP 方法,选择 GET

  6. 对于 Action (操作),输入 ListTopics

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

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

  9. 选择保存

  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. 对于部署阶段,请选择 test

  3. 对于部署描述,输入 Calling Amazon service proxy walkthrough

  4. 选择 Deploy (部署)

步骤 6:测试 API

在本步骤中,您将转到 API Gateway 控制台外部,并使用您的Amazon服务代理与 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:清除

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

警告

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

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

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

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

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

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

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