Aws lambda AccessDeniedException:无法确定要授权的服务/操作名称

Aws lambda AccessDeniedException:无法确定要授权的服务/操作名称,aws-lambda,aws-api-gateway,aws-cli,serverless-architecture,Aws Lambda,Aws Api Gateway,Aws Cli,Serverless Architecture,使用AWS CLI aws --version aws-cli/1.11.21 Python/2.7.12 Darwin/15.3.0 botocore/1.4.78 创建API网关的POST方法,如中所述。可以使用测试调用方法和AWS控制台成功调用此方法 使用AWS CLI创建GET方法。使用测试调用方法和AWS控制台调用此方法会出现以下错误: { "status": 500, "body": "{\"message\": \"Internal server error\"}

使用AWS CLI

aws --version
aws-cli/1.11.21 Python/2.7.12 Darwin/15.3.0 botocore/1.4.78
创建API网关的POST方法,如中所述。可以使用
测试调用方法
和AWS控制台成功调用此方法

使用AWS CLI创建GET方法。使用
测试调用方法
和AWS控制台调用此方法会出现以下错误:

{
    "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
}
{
“地位”:500,
“正文”:“{\”消息\“:\”内部服务器错误\“}”,
“日志”:“请求测试请求的执行日志\n 2016年12月29日00:58:56 UTC:开始执行请求:测试调用请求\n 2016年12月29日00:58:56 UTC:HTTP方法:获取,资源路径:/books\n 2016年12月29日00:58:56 UTC:方法请求路径:{}\n 2016年12月29日00:58:56 UTC:方法请求查询字符串:{}”\nThu Dec 29 00:58:56 UTC 2016:方法请求头:{}\nThu Dec 29 00:58:56 UTC 2016:转换前的方法请求正文:\nThu Dec 29 00:58:56 UTC 2016:端点请求URI:https://lambda.us-west-1.amazonaws.com/2015-03-31/functions/arn:aws:lambda:us-west-1:598307997273:函数:MicroserviceGetAll/调用\n休斯12月29日00:58:56 UTC 2016:端点请求头:{x-amzn-lambda-integration-tag=测试请求,授权=******************************************************************************************************************************************************************************************************************************************************************************************************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=amazonaateway\u-sofl9ilki7,Host=lambda.us-west-1.amazonaws.com,X-amzn-Trace-id=Root=1-58645fd0-7d733a33c38}\nThu Dec 29 00:58:56 UTC 2016:转换后的端点请求正文:\nThu Dec 29 00:58:56 UTC 2016:转换前的端点响应正文:\n无法确定要授权的服务/操作名称\n\n\nThu Dec 29 00:58:56 UTC 2016:端点响应标头:{x-amzn-RequestId=f95a8659-cd61-11e6-80f6-ddd6ce5b7e8b,连接=保持活动状态,内容长度=130,日期=周四,2016年12月29日00:58:56 GMT}\nThu Dec 29 00:58:56 UTC 2016:Lambda调用失败,状态为:403\nThu Dec 29 00:58:56 UTC 2016:由于配置错误,执行失败:\nThu Dec 29 00:58:56 UTC 2016:方法已完成,状态为:500\n“,
“延迟”:39
}

错误消息中标识的ARN是
ARN:aws:execute api:us-west-1:598307997273:sofl9ilki7/null/GET/books
。想知道是不是
null
而不是
test
导致此失败?

我认为您在GET方法上对Lambda函数端点使用了“GET”。请将其更改为“POST”对于Lambda集成HTTP方法。

源ARN中的null是因为测试调用没有与API关联的阶段。这通常不是问题,除非Lambda函数上的策略预期源ARN不兼容。请检查Lambda函数上的策略,并查看它是否包含对源ARN的限制源ARN。如果是,请编辑它以与测试调用ARN兼容,或将API部署到一个阶段,并直接调用该方法,而无需测试调用。

要调用lambda函数,应根据lambdaAPI发布http方法。


访问。

请仔细注意API Gateway使用POST方法by调用Lambda,同时允许任何方法通过x-amazon-apigateway-any-method调用它。

这就成功了,非常感谢!为什么
GET
HTTP需要使用
POST
集成方法?集成就是您要代理的API,方法是t您将向您的客户公开的API。由于Lambda使用POST方法定义了其调用API,因此您必须遵循他们定义的API。我对此感到困惑。AWS文档给出了一个通过GET:调用Lambda的示例,正如AWS论坛上所指出的,可以单独通过控制台使其工作:。当您执行此操作时来自cli的集成设置,例如,当您需要自动部署脚本时,您需要为GET方法指定--integration http method POST。我不相信aws官方文档中的任何地方都记录了这一点。aws cli命令应该如下所示:aws apigateway put integration--rest api id xxxx--资源id xxx--http methodGET--integration http method POST--type AWS_PROXY--uri arn:AWS:apigateway:us-west-2:lambda:path/2015-03-31/functions/[lambda function arn]/invocation我也遇到了类似的问题。看看我今天刚刚发表的帖子。我刚刚把你的问题提高到3000分。祝你3000分快乐,我的朋友。