2

カスタムオーソライザーを使用して関数をデプロイするサーバーレスフレームワークを使用しています。この問題は、このスレッドで説明されている問題と似ていますが、詳細な解決策はありません。

基本的に、ドキュメントで仕様として設定されたカスタムオーソライザーと関数を持っていますが、(エンドポイントを使用して) 関数をデプロイすると、次のエラーが表示されます。

Serverless:   POST - exampleTest: Endpoint exampleTest~POST has an 'authorizerFunction' specified that does not exist in this project.  Make sure the function's 'authorizer' property is filled in

エンドポイントの s-function.json 部分は次のとおりです。

  "endpoints": [
{
  "path": "exampleTest",
  "method": "POST",
  "type": "AWS",
  "authorizationType": "custom",
  "authorizerFunction": "exampleAuth",
  "apiKeyRequired": false,
  "requestParameters": {},
  "requestTemplates": "$${apiRequestTemplate}",
  "responses": {
    "400": {
      "statusCode": "400"
    },
    "default": {
      "statusCode": "200",
      "responseParameters": {},
      "responseModels": {
        "application/json;charset=UTF-8": "Empty"
      },
      "responseTemplates": {
        "application/json;charset=UTF-8": ""
      }
    }
  }
}

カスタム オーソライザーの s-function.json 全体を次に示します。

    {
  "name": "exampleAuth",
  "runtime": "nodejs4.3",
  "description": "Custom Auth Function for API",
  "customName": false,
  "customRole": false,
  "handler": "handler.handler",
  "timeout": 30,
  "memorySize": 256,
  "authorizer": {},
  "custom": {
    "excludePatterns": []
  },
  "endpoints": [],
  "events": [],
  "environment": {
    "SERVERLESS_PROJECT": "${project}",
    "SERVERLESS_STAGE": "${stage}",
    "SERVERLESS_REGION": "${region}"
  },
  "vpc": {
    "securityGroupIds": [],
    "subnetIds": []
  }
}

問題があるかどうかはわかりませんが、関数とカスタム オーソライザーは同じプロジェクトにありますが、フォルダーが異なります (つまり、オーソライザーは関数のサブフォルダーではありません)。

最後に、カスタムオーソライザーを手動で追加すると、すべて正常に動作します。

助けや指示をありがとう!

編集: 追加の調査の後、問題はs-function.jsonの「オーソライザー」部分に関連していると思います。これは、エンドポイントではなく、ファイルのヘッダーにあります。この設定のサンプルが表示されず、ここに何を入れればよいかわかりません。アイデアや例をいただければ幸いです。

4

1 に答える 1

3

したがって、私の s-function.json のエラーは、(認証コードを実装するエンドポイントまたは関数ではなく) カスタム認証関数の 'authorizer' フィールドが原因でした。

これを s-function.json に追加する必要がありました。

"authorizer": {
        "type": "TOKEN",
        "identitySource": "method.request.header.Authorization",
        "authorizerResultTtlInSeconds": "300"
      },

同じ問題に苦しんでいる人のために、ここにカスタム承認用の完成した s-function.json があります。

    {
  "name": "exampleAuth",
  "runtime": "nodejs4.3",
  "description": "Custom Auth Function for exampleAPI",
  "customName": false,
  "customRole": false,
  "handler": "handler.handler",
  "timeout": 30,
  "memorySize": 256,
  "authorizer": {
    "type": "TOKEN",
    "identitySource": "method.request.header.Authorization",
    "authorizerResultTtlInSeconds": "300"
  },
  "custom": {
    "excludePatterns": []
  },
  "endpoints": [],
  "events": [],
  "environment": {
    "SERVERLESS_PROJECT": "${project}",
    "SERVERLESS_STAGE": "${stage}",
    "SERVERLESS_REGION": "${region}"
  },
  "vpc": {
    "securityGroupIds": [],
    "subnetIds": []
  }
}

Token Validation Expression を追加する方法がまだわかりません。リージョンと名前を反映するコンソールに問題があることは理解していますが、それ以外は完璧に機能します。

于 2016-07-14T19:06:01.800 に答える