Estoy intentando exportar y luego importar la API de AWS Gateway, siguiendo las instrucciones en https://aws.amazon.com/premiumsupport/knowledge-center/api-gateway-migrate-accounts-regions/ .
La exportación está funcionando:
aws apigateway get-export --parameters extensions='apigateway' --rest-api-id MY_REST_API_ID --stage-name Prod --export-type swagger my-api-apigateway.json Se generan archivos idénticos para mi API con --parameters extensions='apigateway' y --parameters extensions='integrations' .
Pero cuando trato de hacer la importación desde el archivo exportado:
aws apigateway import-rest-api --fail-on-warnings --body file://%cd%/my-api-gateway.json, siempre obtengo el error "Base64 no válido:". Me gusta esto:
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", ...No hay documentación ni ejemplos en Google que digan que el cuerpo debería ser Base64.
El mismo JSON parece funcionar cuando lo importo a través de la interfaz de usuario (Acciones -> Importar API).
También he intentado usar --cli-input-json :
archivo my-api-apigateway-cli-json.json (según aws apigateway import-rest-api --generate-cli-skeleton ):
{ "failOnWarnings": true, "parameters": { "endpointConfigurationTypes": "REGIONAL" }, "body": {... JSON FROM EXPORT ...} }Comando de importación:
aws apigateway import-rest-api --cli-input-json file://./my-api-apigateway-cli-json.json, pero dice
Parameter validation failed: Invalid type for parameter body, value: {'swagger': '2.0', ...Entonces, las preguntas son:
Ninguno de los enlaces dice que la respuesta del cuerpo debe ser Base64
body está claramente documentado como // raw byte array representing the api definitionAl importar rest-api en AWS API Gateway mediante AWS CLI, no es obligatorio codificar el json como base64.
Sospecho que está utilizando AWS CLI v2 y este problema al que se enfrenta, creo que se debe a los cambios introducidos en AWS CLI versión 2 . es decir
AWS CLI versión 2 ahora pasa todos los parámetros de entrada y salida binaria como cadenas codificadas en base64 de forma predeterminada
Resolución:
Deberá agregar --cli-binary-format raw-in-base64-out para que le indique a AWS CLI v2 que vuelva al comportamiento de AWS CLI v1:
aws apigateway import-rest-api --cli-binary-format raw-in-base64-out --body file://my-api-apigateway.jsonUsar fileb:// en lugar de file:// funcionó para mí. Por ejemplo,
aws apigateway import-rest-api --body fileb://my-api.json