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

使用 AWS 集成构建 API Gateway API

使用 Lambda 代理集成构建 API Gateway 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 服务集成的更多示例,请参阅 示例和教程

与 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,则选择 Resources

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

  4. 对于 Resource Name,键入 MyDemoAWSProxy,然后选择 Create Resource

步骤 2:创建 GET 方法

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

创建 GET 方法

  1. Resources 窗格中,选择 /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. 选择 Policies

  3. 执行以下任一操作:

    • 如果显示 Welcome to Managed Policies 页面,则选择 Get Started,然后选择 Create Policy

    • 如果出现策略列表,请选择 Create Policy

  4. Create Your Own Policy 旁,选择 Select

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

  6. 对于 Description,键入 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,然后选择 API Gateway

  11. 选择 Next: Permissions

  12. 选择 Next: Review

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

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

  15. 对于所选角色,选择 Attach policy

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

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

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

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

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

  2. Setup 窗格中,对于 Integration type,选择 Show advanced,然后选择 AWS Service Proxy

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

  4. 对于 AWS Service,选择 SNS

  5. 对于 HTTP method,选择 GET

  6. 对于 Action,键入 ListTopics

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

  8. Path Override 留空。

  9. 选择 Save

  10. Method Execution 窗格的 Client 框中,选择 TEST,然后选择 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. Resources 窗格中,选择 Deploy 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 复制到剪贴板。它应如下所示:

    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. Details 区域中,选择 Roles

  3. 选择 APIGatewayAWSProxyExecRole,然后选择 Role ActionsDelete Role。在系统提示时,选择 Yes, Delete

  4. Details 区域中,选择 Policies

  5. 依次选择 APIGatewayAWSProxyExecPolicyPolicy ActionsDelete。系统提示时,选择 Delete

本演练到此结束。有关创建 API 作为 AWS 服务代理的更详细讨论,请参阅创建 API 作为 Amazon S3 代理为 AWS Lambda 函数创建 API Gateway API创建 API Gateway API 作为 Amazon Kinesis 代理