API网关不导入导出的定义

时间:2017-01-03 00:16:21

标签: amazon-web-services aws-lambda aws-api-gateway

我正在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" : [ ]
    } ]
  }

提前致谢

更新

导入刚刚导出的定义时得到的错误是: 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.

我在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.

我尝试过忽略错误,结果相同。

2 个答案:

答案 0 :(得分:1)

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

经过大量的问题排查并最终涉及AWS Support Team后,此问题已得到解决并被识别为AWS CLI客户端错误(已从AWS Support Team确认);

最终回复。

  

感谢您提供所要求的详细信息。在浏览AWS CLI版本和错误详细信息后,我可以确认错误是由于Powershell AWS CLI的已知问题。对由于错误导致的不便,我深表歉意。为了解决这个错误,我建议您完成以下步骤

     
      
  1. 在要执行powershell命令的当前目录中创建名为data.json的文件

  2.   
  3. 将以下内容保存到文件{“extensions”:“authorizers,integration”}

  4.   
  5. 在Powershell控制台中,确保当前工作目录与data.json所在的位置相同

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

  8.   

使用它,最终解决了我的问题 - 我期待在即将推出的版本之一中修复。

PS - 目前是最新版本:

aws --version

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

答案 1 :(得分: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