如何在 AWS 账户或区域之间迁移 API Gateway 的 REST API?
上次更新日期:2020 年 12 月 17 日
我想在 AWS 账户或区域之间迁移我的 Amazon API Gateway 的 API。该怎么做?
简短描述
要在 AWS 账户或区域之间迁移 Amazon API Gateway 的 API,请将 REST API 从 API Gateway 导出到 OpenAPI 2.0 (Swagger) 或 OpenAPI 3.0 定义文件。然后,将 API 导入另一个账户或区域中的 API Gateway。
注意:要导入 REST API,您还必须在目标账户或区域中重新创建集成的任何 API 资源。
解决方法
注意:如果您在运行 AWS 命令行界面 (AWS CLI) 命令时遇到错误,请确保您运行的是最新版本的 AWS CLI。
导出 API
使用 API Gateway 控制台或 AWS CLI 导出您的 API。
- 在 API Gateway 控制台中,选择您的 API。
- 将您的 API 部署到阶段。
- 在阶段编辑器窗格中,选择导出选项卡。
- 对于导出为,选择 Swagger 或 OpenAPI3。
- 根据上一步的选择,进行以下任一操作:
导出为 Swagger + API Gateway 扩展
导出为 OpenAPI 3 + API Gateway 扩展 - OpenAPI 的定义将显示在控制台中。然后,选择 JSON 或 YAML 将 OpenAPI 定义下载为您首选的文件类型。
或者在 AWS CLI 中使用 get-export 命令。
get-export 命令示例
aws apigateway get-export --parameters extensions='integrations' --rest-api-id a1b2c3d4e5 --stage-name dev --export-type swagger --accept application/yaml /path/to/filename.yaml
重要提示:请确保更改命令选项 --parameters、--export-type 和 --accept 的值以匹配您的首选导出格式。有关更多信息,请参阅 get-export(AWS CLI 命令参考)和从 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。
- 在目标 AWS 账户或区域中打开 API Gateway 控制台。
- 选择创建 API。
- 对于选择 API 类型,在 REST API 下,选择导入。
- 在从 Swagger 或 Open API 3 导入下,执行以下任一操作:
选择选择 Swagger 文件,然后选择已更新的 OpenAPI 定义文件。
将已更新的 OpenAPI 定义粘贴到文本编辑器字段中。 - 在设置下,对于终端节点类型,选择区域性、边缘优化型或私有。
- 请选择出现警告时放弃,从而在导入期间出现错误或警告时停止导入。或者,选择忽略警告以继续导入。
或者,为目标 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。