【问题标题】:aws apigateway import-rest-api returns "Invalid base64" erroraws apigateway import-rest-api 返回“无效的 base64”错误
【发布时间】:2021-06-02 05:36:32
【问题描述】:

我正在尝试按照中的说明导出和导入 AWS Gateway API https://aws.amazon.com/premiumsupport/knowledge-center/api-gateway-migrate-accounts-regions/.

导出正常:

aws apigateway get-export --parameters extensions='apigateway' --rest-api-id MY_REST_API_ID --stage-name Prod --export-type swagger my-api-apigateway.json

我的 API 的相同文件是使用 --parameters extensions='apigateway' 生成的 和--parameters extensions='integrations'

但是当我尝试从导出的​​文件中导入时:

aws apigateway import-rest-api --fail-on-warnings --body file://%cd%/my-api-gateway.json

,我总是收到“Invalid base64:”错误。像这样:

Invalid base64: "{
  "swagger" : "2.0",
  "info" : {
    "version" : "1.0",
    "title" : "my-stack-name"
  },
  "host" : "MY_REST_API_ID.execute-api.eu-central-1.amazonaws.com",
  "basePath" : "/Prod",
  ...

Google 上没有文档和示例说 body 应该是 Base64。

当我通过 UI(操作 -> 导入 API)导入相同的 JSON 时,它似乎可以工作。

我也尝试过使用--cli-input-json

my-api-apigateway-cli-json.json文件(根据aws apigateway import-rest-api --generate-cli-skeleton):

{
  "failOnWarnings": true,
  "parameters": {
    "endpointConfigurationTypes": "REGIONAL"
  },
  "body": {... JSON FROM EXPORT ...}
}

导入命令:

aws apigateway import-rest-api --cli-input-json file://./my-api-apigateway-cli-json.json

,但它说

Parameter validation failed:
Invalid type for parameter body, value: {'swagger': '2.0', ...

所以,问题是:

  • 我们应该将 json 编码为 base64 吗?
  • 为什么没有记录此错误和行为(或者如果是,那么在哪里?)?
  • 如何从cli成功执行导入?

有用的链接

没有一个链接说正文响应应该是 Base64

【问题讨论】:

    标签: amazon-web-services base64 aws-api-gateway aws-cli


    【解决方案1】:

    使用 AWS CLI 将 rest-api 导入 AWS API Gateway 时,不必将 json 编码为 base64。

    我怀疑您使用的是 AWS CLI v2,而您面临的这个问题,我相信这是 AWS CLI version 2 中引入的更改的结果。

    AWS CLI 版本 2 现在可以传递所有二进制输入和二进制输出 参数默认为base64编码的字符串

    分辨率:

    您需要添加 --cli-binary-format raw-in-base64-out 以便它告诉 AWS CLI v2 恢复到 AWS CLI v1 行为:

    aws apigateway import-rest-api --cli-binary-format raw-in-base64-out --body file://my-api-apigateway.json
    

    【讨论】:

    • 酷,这似乎有效。真的不明显。看起来我的 aws-cli 版本实际上是 2.0:aws --version 显示 aws-cli/2.0.0dev5 Python/3.7.5 Windows/10 botocore/2.0.0dev4。我以为 aws-cli 2 实际上会以aws2 执行(根据docs.aws.amazon.com/cli/latest/userguide/… 这是错误的),而且我已经安装了它们。
    • 这适用于 apigateway 的其他选项,例如 put-rest-api
    • 这应该完全记录在边缘帮助页面中。例如aws apigateway put-rest-api help
    【解决方案2】:

    使用 fileb:// 而不是 file:// 对我有用。例如,

    aws apigateway import-rest-api --body fileb://my-api.json
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-27
      • 1970-01-01
      • 2018-03-23
      • 1970-01-01
      • 2023-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多