2017-01-03 83 views
1

我正在测试我的备份过程的API,在我的API Gateway中。API网关未导入导出的定义

因此,我从我的AWS账户中的API Console导出我的API,然后我进入API Gateway并创建一个新的API - “从swagger导入”。

我粘贴导出的定义并创建,这会引发大量错误。

从我的阅读 - 这似乎是一个已知的问题/痛苦。

我怀疑错误的原因是因为我使用了自定义授权人;

"security" : [ { 
     "TestAuthorizer" : [ ] 
    }, { 
     "api_key" : [ ] 
    } ] 

我在每种方法上都使用这个,因此我得到了很多错误。

奇怪的是我可以很好地克隆这个API,因此,我认为我可以采用导出的定义并重新导入而不会出现问题。

关于如何纠正这些错误的任何想法(最好在我的API网关中,以便我可以无任何问题导出/导入)。

使用这个授权我的GET方法中的一个例子是:提前

"/api/example" : { 
    "get" : { 
    "produces" : [ "application/json" ], 
    "parameters" : [ { 
     "name" : "Authorization", 
     "in" : "header", 
     "required" : true, 
     "type" : "string" 
    } ], 
    "responses" : { 
     "200" : { 
     "description" : "200 response", 
     "schema" : { 
      "$ref" : "#/definitions/exampleModel" 
     }, 
     "headers" : { 
      "Access-Control-Allow-Origin" : { 
      "type" : "string" 
      } 
     } 
     } 
    }, 
    "security" : [ { 
     "TestAuthorizer" : [ ] 
    }, { 
     "api_key" : [ ] 
    } ] 
    } 

感谢

UPDATE

错误(S)导入定义时,我得到的我刚刚输出的是: Your API was not imported due to errors in the Swagger file. Unable to put method 'GET' on resource at path '/api/v1/MethodName': Invalid authorizer ID specified. Setting the authorization type to CUSTOM or COGNITO_USER_POOLS requires a valid authorizer.

我得到消息f或者我的API中的每个方法 - 所以有很多。

额外性,就在邮件的末尾,我得到这个: Additionally, these warnings were found: Unable to create authorizer from security definition: 'TestAuthorizer'. Extension x-amazon-apigateway-authorizer is required. Any methods with security: 'TestAuthorizer' will not be created. If this security definition is not a configured authorizer, remove the x-amazon-apigateway-authtype extension and it will be ignored.

我已经与忽略的错误,同样的结果尝试。

+0

您好,我有我自己的API,有一个自定义的授权测试,它导出/导入成功,所以我认为这可能是别的。你能发布你在导入时看到的确切的错误信息吗?另外,你有没有尝试禁用导入时的“失败警告”选项? –

+0

@LorenzodeLara感谢您的反馈,我已更新我的原始问题与所需的信息,让我知道如果你需要别的东西。 – Hexie

回答

1

对于任何可能遇到此问题的人。

经过多次故障排除并最终涉及到AWS Support Team后,已解决此问题并将其识别为AWS CLI客户端错误(从AWS Support Team确认);

最终回复。

谢谢您提供所需的详细信息。在查看AWS CLI版本和错误详细信息后,我可以确认错误是由于Powershell AWS CLI的已知问题。对由于错误造成的不便,我表示歉意。为了解决我建议通过以下步骤会错误

  1. 创建一个名为data.json在当前目录下的文件,其中PowerShell命令被执行

  2. 保存下列内容到文件{ “扩展”:“授权人,集成”}

  3. 在Powershell的控制台中,确保当前工作目录是一样的,其中data.json存在于位置

  4. 执行以下命令aws apigateway get-export --parameters file://data.json --rest-api-id APIID --stage-name dev --export-type swagger C:\ temp \ export.json

使用这个,最终解决了我的问题 - 我期待在即将到来的版本之一的修复。

PS - 这是目前最新的版本:

aws --version

aws-cli/1.11.44 Python/2.7.9 Windows/8 botocore/1.5.7

0

确保您使用集成和授权人扩展功能导出您的swagger。

尝试使用导出您AWS CLI招摇:

aws apigateway get-export \ 
    --parameters '{"extensions":"integrations,authorizers"}' \ 
    --rest-api-id {api_id} \ 
    --stage-name {stage_name} \ 
    --export-type swagger swagger.json 

输出将被发送到swagger.json文件。

有关swagger自定义扩展的更多详细信息,请参阅this

+0

使用你的链接和例子,我能够把大部分内容都弄清楚,绝对是指向正确的方向。现在我只需要一件事,就是为我的CLI脚本添加多个扩展,这就是我得到的: 'aws apigateway get-export --parameters extensions ='authorizers'--rest-api-id APIID - stage-name dev --export-type swagger C:\ temp \ export.json',我假设我还需要添加集成扩展以及? – Hexie

+0

@Hexie是的,没错。如果您想通过导入swagger规范来重新创建API,则还需要集成扩展。 尝试使用JSON表示法参数: 'aws apigateway get-export --parameters'{“extensions”:“integrations,authorizers”}'--rest-api-id APIID --stage-name dev --export-键入swagger C:\ temp \ export.json' – vnasc

+0

仍然没有运气,我试图将参数更改为JSON表示法,但然后得到这个:'解析参数错误 - 参数':预期:'=',收到:' ''输入: '{extensions:authorizers,integrations}''其他建议? 该命令现在看起来像这样:'aws apigateway get-export --parameters'{“extensions”:“authorizers,integrations”}'--rest-api-id APIID --stage-name dev --export-type swagger C:\ temp \ export.json' – Hexie