Amazon web services aws apigateway导入rest api返回“;无效的base64“;错误

Amazon web services aws apigateway导入rest api返回“;无效的base64“;错误,amazon-web-services,base64,aws-api-gateway,aws-cli,Amazon Web Services,Base64,Aws Api Gateway,Aws Cli,我正在尝试按照中的说明导出和导入AWS网关API 导出正在工作: aws apigateway get-export --parameters extensions='apigateway' --rest-api-id MY_REST_API_ID --stage-name Prod --export-type swagger my-api-apigateway.json 使用--parameters extensions='apigateway' 和——参数扩展='integrations

我正在尝试按照中的说明导出和导入AWS网关API

导出正在工作:

aws apigateway get-export --parameters extensions='apigateway' --rest-api-id MY_REST_API_ID --stage-name Prod --export-type swagger my-api-apigateway.json
使用
--parameters extensions='apigateway'
——参数扩展='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",
  ...
谷歌上没有任何文档和例子表明body应该是Base64

当我通过UI(操作->导入API)导入JSON时,同样的JSON似乎也能工作

我还尝试使用
--cli输入json

{
  "failOnWarnings": true,
  "parameters": {
    "endpointConfigurationTypes": "REGIONAL"
  },
  "body": {... JSON FROM EXPORT ...}
}
my api apigateway cli json.json
文件(根据
aws apigateway导入rest api——生成cli框架
):

导入命令:

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

  • --这里,
    body
    清楚地记录为表示api定义的原始字节数组

使用AWS CLI将rest api导入AWS api网关时,不强制将json编码为base64

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

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

分辨率:

您需要添加--cli二进制格式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

使用
fileb://
而不是
file://
对我来说很有效。比如说,

aws apigateway import-rest-api --body fileb://my-api.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
执行(根据,这是错误的),AFAIR我已经安装了这两个版本。这适用于apigateway的其他选项,例如
put rest api