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

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

教程:使用 Lambda 代理集成构建 Hello World REST API选择 Amazon Lambda 集成教程主题介绍如何创建 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 调用方必须实施重试逻辑来处理终端节点超时。

本演练以 选择 Amazon Lambda 集成教程 中的说明和概念为基础。如果您尚未完成该演练,我们建议您先完成它。

先决条件

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

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

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

  3. 至少将 API 部署到名为 test 的阶段一次。有关更多信息,请参阅中的部署 API选择 Amazon Lambda 集成教程

  4. 完成中的剩余步骤选择 Amazon Lambda 集成教程

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

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

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

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

  2. 选择角色

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

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

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

  6. 对于角色名称,输入 APIGatewaySNSProxyPolicy,然后选择创建角色

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

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

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

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

    注意

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

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

步骤 2:创建资源

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

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

  2. 选择 API。

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

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

  5. 资源路径保持为 /

  6. 对于资源名称,输入 mydemoawsproxy

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

  8. 选择创建资源

步骤 3:创建 GET 方法

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

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

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

  3. 对于集成类型,选择 Amazon Web Service

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

  5. 对于 Amazon Web Service,选择 Amazon SNS

  6. Amazon 子域保留为空白。

  7. 对于 HTTP 方法,选择 GET

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

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

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

  11. 选择创建方法

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

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

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

  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. 选择部署 API

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

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

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

  5. 选择 Deploy (部署)

步骤 6:测试 API

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

您可以删除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 非代理集成创建计算器 REST API教程:在 API Gateway 中创建 REST API 作为 Amazon Kinesis 代理