37

AWS CLI の使用

aws --version
aws-cli/1.11.21 Python/2.7.12 Darwin/15.3.0 botocore/1.4.78

https://github.com/arun-gupta/serverless/tree/master/aws/microservice#post-methodで説明されているように、API Gateway の POST メソッドを作成します。test-invoke-methodこのメソッドは、AWS コンソールを使用して正常に呼び出すことができます。

AWS CLI https://github.com/arun-gupta/serverless/tree/master/aws/microservice#get-methodを使用して GET メソッドを作成します。AWS コンソールを使用してこのメ​​ソッドを呼び出すtest-invoke-methodと、次のエラーが発生します。

{
    "status": 500,
    "body": "{\"message\": \"Internal server error\"}",
    "log": "Execution log for request test-request\nThu Dec 29 00:58:56 UTC 2016 : Starting execution for request: test-invoke-request\nThu Dec 29 00:58:56 UTC 2016 : HTTP Method: GET, Resource Path: /books\nThu Dec 29 00:58:56 UTC 2016 : Method request path: {}\nThu Dec 29 00:58:56 UTC 2016 : Method request query string: {}\nThu Dec 29 00:58:56 UTC 2016 : Method request headers: {}\nThu Dec 29 00:58:56 UTC 2016 : Method request body before transformations: \nThu Dec 29 00:58:56 UTC 2016 : Endpoint request URI: https://lambda.us-west-1.amazonaws.com/2015-03-31/functions/arn:aws:lambda:us-west-1:598307997273:function:MicroserviceGetAll/invocations\nThu Dec 29 00:58:56 UTC 2016 : Endpoint request headers: {x-amzn-lambda-integration-tag=test-request, Authorization=******************************************************************************************************************************************************************************************************************************************************************************************************482377, X-Amz-Date=20161229T005856Z, x-amzn-apigateway-api-id=sofl9ilki7, X-Amz-Source-Arn=arn:aws:execute-api:us-west-1:598307997273:sofl9ilki7/null/GET/books, Accept=application/json, User-Agent=AmazonAPIGateway_sofl9ilki7, Host=lambda.us-west-1.amazonaws.com, X-Amzn-Trace-Id=Root=1-58645fd0-7d733ae3c383f4378fcc0338}\nThu Dec 29 00:58:56 UTC 2016 : Endpoint request body after transformations: \nThu Dec 29 00:58:56 UTC 2016 : Endpoint response body before transformations: <AccessDeniedException>\n  <Message>Unable to determine service/operation name to be authorized</Message>\n</AccessDeniedException>\n\nThu Dec 29 00:58:56 UTC 2016 : Endpoint response headers: {x-amzn-RequestId=f95a8659-cd61-11e6-80f6-ddd6ce5b7e8b, Connection=keep-alive, Content-Length=130, Date=Thu, 29 Dec 2016 00:58:56 GMT}\nThu Dec 29 00:58:56 UTC 2016 : Lambda invocation failed with status: 403\nThu Dec 29 00:58:56 UTC 2016 : Execution failed due to configuration error: \nThu Dec 29 00:58:56 UTC 2016 : Method completed with status: 500\n",
    "latency": 39
}

エラー メッセージで特定された ARN は ですarn:aws:execute-api:us-west-1:598307997273:sofl9ilki7/null/GET/books。代わりnullに、testこれが失敗する原因になっているのではないかと思いますか?

4

4 に答える 4

76

GET メソッドでも Lambda 関数のエンドポイントに「GET」を使用していると思います。Lambda 統合の HTTP メソッドに「POST」を使用するように変更してください。

于 2016-12-30T02:32:51.193 に答える
3

ラムダ関数を呼び出すには、ラムダAPIに従って http メソッドを POST にする必要があります。

http://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.htmlにアクセス してください。

于 2017-03-01T09:47:13.470 に答える
0

ソース ARN の null は、test-invoke に API に関連付けるステージがないためです。Lambda 関数のポリシーが互換性のないソース ARN を想定していない限り、これは通常は問題になりません。Lambda 関数のポリシーを確認し、ソース ARN に対する制限が含まれているかどうかを確認します。その場合は、test-invoke ARN と互換性があるように編集するか、API をステージにデプロイして、test-invoke なしでメソッドを直接呼び出します。

于 2016-12-31T02:18:41.457 に答える
0

API Gateway は POST メソッドを使用して Lambda を呼び出しますが、x-amazon-apigateway-any-method を介して任意のメソッドを呼び出すことができることに注意してください。

于 2017-05-02T19:23:39.623 に答える