

# 教程：利用 AWS 集成创建 REST API
<a name="getting-started-aws-proxy"></a>

 [教程：利用 Lambda 代理集成创建 REST API](api-gateway-create-api-as-simple-proxy-for-lambda.md) 和 [教程：利用 Lambda 非代理集成创建 REST API](getting-started-lambda-non-proxy-integration.md)主题介绍如何创建 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 教程和研讨会](api-gateway-tutorials.md)。

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

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

 本演练以 [教程：利用 Lambda 非代理集成创建 REST API](getting-started-lambda-non-proxy-integration.md) 中的说明和概念为基础。如果您尚未完成该演练，我们建议您先完成它。



**Topics**
+ [先决条件](#getting-started-aws-proxy-prerequisites)
+ [步骤 1：创建 AWS 服务代理执行角色](#getting-started-aws-proxy-add-roles)
+ [步骤 2：创建资源](#getting-started-aws-proxy-add-resources)
+ [步骤 3：创建 GET 方法](#getting-started-aws-proxy-add-methods)
+ [步骤 4：指定方法设置并测试方法](#getting-started-aws-proxy-set-methods)
+ [步骤 5：部署 API](#getting-started-aws-proxy-deploy)
+ [步骤 6：测试 API](#getting-started-aws-proxy-test)
+ [步骤 7：清除](#getting-started-aws-proxy-clean-up)

## 先决条件
<a name="getting-started-aws-proxy-prerequisites"></a>

在开始本演练之前，请执行以下操作：

1. 完成 [设置为使用 API Gateway](setting-up.md) 中的步骤。

1.  创建名为 `MyDemoAPI` 的新 API。有关更多信息，请参阅 [教程：使用 HTTP 非代理集成创建 REST API](api-gateway-create-api-step-by-step.md)。

1. 至少将 API 部署到名为 `test` 的阶段一次。有关更多信息，请参阅[中的](getting-started-lambda-non-proxy-integration.md#getting-started-deploy-api)部署 API[选择 AWS Lambda 集成教程](getting-started-with-lambda-integration.md)。

1. 完成中的剩余步骤[选择 AWS Lambda 集成教程](getting-started-with-lambda-integration.md)

1. 在 Amazon Simple Notification Service (Amazon SNS) 中至少创建一个主题。您将使用已部署的 API 获取 Amazon SNS 中与您的AWS账户相关联的主题列表。要了解如何在 Amazon SNS 中创建主题，请参阅[创建主题](https://docs.aws.amazon.com/sns/latest/dg/sns-create-topic.html)。(您不需要复制步骤 5 中提到的主题 ARN。)

## 步骤 1：创建 AWS 服务代理执行角色
<a name="getting-started-aws-proxy-add-roles"></a>

 要允许 API 调用 Amazon SNS 操作，您必须已将适当的 IAM 策略附加到 IAM 角色。在此步骤中，您将创建新 IAM 角色。

**创建 AWS 服务代理执行角色**

1. 登录 AWS 管理控制台，然后使用以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 选择**角色**。

1. 选择**创建角色**。

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

1.  选择**下一步**，然后再次选择**下一步**。

1. 对于**角色名称**，输入 **APIGatewaySNSProxyPolicy**，然后选择**创建角色**。

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

1. 对于所选角色，选择**添加权限**选项卡。

1. 从下拉列表中选择**附加策略**。

1. 在搜索栏中，输入 **AmazonSNSReadOnlyAccess** 然后选择**添加权限**。
**注意**  
为简单起见，本教程使用托管策略。作为最佳实践，您应创建自己的 IAM 策略以授予所需的最低权限。

1. 记下新创建的**角色 ARN**，稍后将使用它。

## 步骤 2：创建资源
<a name="getting-started-aws-proxy-add-resources"></a>

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

**创建资源**

1. 通过以下网址登录到 Amazon API Gateway 控制台：[https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway)。

1. 选择 API。

1. 选择根资源 **/**（由一个正斜杠 (**/**) 表示），然后选择**创建资源**。

1. 将**代理资源**保持为关闭状态。

1. 将**资源路径**保持为 `/`。

1. 对于**资源名称**，输入 **mydemoawsproxy**。

1. 将 **CORS（跨源资源共享）**保持为关闭状态。

1. 选择**创建资源**。

## 步骤 3：创建 GET 方法
<a name="getting-started-aws-proxy-add-methods"></a>

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

**创建 `GET` 方法**

1. 选择 **/mydemoawsproxy** 资源，然后选择**创建方法**。

1. 对于方法类型，选择 **GET**。

1. 对于**集成类型**，选择 **AWS 服务**。

1. 对于 **AWS 区域**，选择您创建 Amazon SNS 主题的 AWS 区域。

1. 对于 **AWS 服务**，选择 **Amazon SNS**。

1. 将 **AWS 子域**保留为空白。

1. 对于 **HTTP 方法**，选择 **GET**。

1. 对于**操作类型**，选择**使用操作名称**。

1. 对于**操作名称**，输入 **ListTopics**。

1. 对于**执行角色**，输入 **APIGatewaySNSProxyPolicy** 的角色 ARN。

1. 选择**创建方法**。

## 步骤 4：指定方法设置并测试方法
<a name="getting-started-aws-proxy-set-methods"></a>

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

**测试 `GET` 方法**

1. 选择**测试**选项卡。您可能需要选择右箭头按钮，以显示该选项卡。

1. 选择**测试**。

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

   ```
   {
     "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
<a name="getting-started-aws-proxy-deploy"></a>

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

**部署 API**

1. 选择**部署 API**。

1. 对于**阶段**，选择**新建阶段**。

1. 对于**阶段名称**，输入 **test**。

1. （可选）对于**描述**，输入描述。

1. 选择 **Deploy (部署)**。

## 步骤 6：测试 API
<a name="getting-started-aws-proxy-test"></a>

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

1. 在主导航窗格中，选择**阶段**。

1. 在**阶段详细信息**下，选择复制图标以复制您 API 的调用 URL。

   它应如下所示：

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

1. 将 URL 输入到新浏览器标签页的地址框中。

1. 附加 `/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：清除
<a name="getting-started-aws-proxy-clean-up"></a>

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

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

**删除相关联的 IAM 资源**

1. 通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在**详细信息**区域中，选择**角色**。

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

1. 在**详细信息**区域中，选择**策略**。

1. 选择 **APIGatewayAWSProxyExecPolicy**，然后选择**策略操作**和**删除**。系统提示时，选择**删除**。

 本演练到此结束。有关创建 API 作为AWS服务代理的更深入讨论，请参阅[教程：创建 REST API 作为 Amazon S3 代理](integrating-api-with-aws-services-s3.md)、[教程：通过两种 AWS 服务集成和一种 Lambda 非代理集成创建计算器 REST API](integrating-api-with-aws-services-lambda.md)或[教程：创建 REST API 作为 Amazon Kinesis 代理](integrating-api-with-aws-services-kinesis.md)。