aws apigateway import-rest-api возвращает ошибку «Invalid base64» - PullRequest
4 голосов
/ 18 марта 2020

Я пытаюсь экспортировать и затем импортировать AWS 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

, я всегда получаю " Неверный 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, утверждающих, что тело должно быть Base64.

Похоже, что то же самое JSON работает, когда я импортирую его через пользовательский интерфейс (Действия -> API импорта).

Я также пытался использовать файл --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

1 Ответ

5 голосов
/ 19 марта 2020

При импорте rest-api в AWS API Gateway с использованием AWS CLI не обязательно кодировать json как base64.

Я подозреваю, что вы используете AWS CLI v2, и это проблема, с которой вы столкнулись, я полагаю, что это связано с изменениями, внесенными в AWS CLI версии 2 . т.е.

AWS CLI версии 2 теперь передает все двоичные входные и двоичные выходные параметры как строки в кодировке base64 по умолчанию

Разрешение:

Вам потребуется добавить - raw-in-base64-out cli-двоичного формата , чтобы оно говорит AWS CLI v2 вернуться к поведению AWS CLI v1:

aws apigateway import-rest-api --cli-binary-format raw-in-base64-out --body file://my-api-apigateway.json
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...