如何在 AWS 账户或区域之间迁移 API Gateway 的 API?

上次更新时间:2019 年 12 月 20 日

我想在 AWS 账户或区域之间迁移我的 Amazon API Gateway 的 API。该如何操作?

简短描述

您可以将 REST API 从 API Gateway 导出到 OpenAPI 2.0 (Swagger) 或 OpenAPI 3.0 定义文件。然后,将 API 导入另一个账户或区域中的 API Gateway。

注意:要成功导入 API,您还必须在目标账户或区域中重新创建集成的任何 API 资源。

解决方法

导出 API

使用 API Gateway 控制台 AWS 命令行界面 (AWS CLI) 导出 API。

  1. API Gateway 控制台中,选择您的 API。
  2. 将您的 API 部署到阶段
  3. 阶段编辑器窗格中,选择导出选项卡。
  4. 对于导出为,选择 Swagger OpenAPI3
  5. 根据上一步的选择,将进行以下任一操作:
    导出为 Swagger + API Gateway 扩展
    导出为 OpenAPI 3 + API Gateway 扩展
  6. 选择 JSON YAML。您的 OpenAPI 定义将出现在控制台中,并且定义文件将自动开始下载。

或者,在 AWS CLI 中使用 get-export 命令。例如:

$ aws apigateway get-export --parameters extensions='integrations' --rest-api-id a1b2c3d4e5 --stage-name dev --export-type swagger /path/to/filename.json

此示例命令返回一个具有阶段的 API Gateway 扩展的 JSON Swagger 模板。更改命令选项 -parameters-export-type 的值,以使用您首选的属性和类型进行导出。

有关更多信息,请参阅从 API Gateway 导出 REST API

在您的 OpenAPI 定义中更改资源 ARN

在导出的 OpenAPI 定义中更新 API 资源的 Amazon 资源名称 (ARN)。将它们更改为您想要迁移到的 AWS 账户和区域中的资源。例如,请参阅以下具有 AWS Lambda 集成的 API 的 Swagger 模板片段:

"x-amazon-apigateway-integration": {
          "uri": "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:12345678910:function:mylambda/invocations",
          "responses": {
            "default": {
              "statusCode": "200"
            }
          }

在此示例中,替换 arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:12345678910:function:mylambda/invocations 为目标账户中 Lambda 函数的 ARN。

导入 API

脱机更新 API 资源的 ARN 后,将 OpenAPI 定义导入其他 AWS 账户或区域中的 API Gateway。

  1. 在目标 AWS 账户或区域中打开 API Gateway 控制台
  2. 选择创建 API
  3. 对于选择 API 类型,在 REST API 下,选择导入
  4. 从 Swagger 或 Open API 3 导入下,执行以下任一操作:
    选择选择 Swagger 文件,然后选择已更新的 OpenAPI 定义文件。
    将已更新的 OpenAPI 定义粘贴到文本编辑器字段中。
  5. 设置下,对于终端节点类型,选择区域性边缘优化型私有
  6. 请选择出现警告时放弃,从而在导入期间出现错误或警告时停止导入。或者,选择忽略警告以继续导入。

或者,为目标 AWS 账户或区域配置 AWS CLI,然后使用 import-rest-api 命令。例如:

$ aws apigateway import-rest-api --endpointConfigurationTypes 'REGIONAL' --fail-on-warnings --body 'file:/// path/to/filename.json'

有关更多信息,请参阅将 REST API 导入 API Gateway


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?