我的lambda在本地工作并返回JSON。
我的API网关在本地工作,即调用lambda并返回JSON。
但是,当我将API发布到DEV阶段,然后尝试使用调用URL时-https://jbpqyp3142.execute-api.us-east-2.amazonaws.com/DEV我得到
{"message":"Missing Authentication Token"}
Lambda:
require 'json'
def lambda_handler(event:, context:)
if event['queryStringParameters'].nil?
input = 1
else
if event['queryStringParameters']['in']
input = event['queryStringParameters']['in'].to_i
else
input = 1
end
end
triple = (input * 3).to_s
{ statusCode: 200, body: JSON.generate("Hello from Lambda! Result is " + input.to_s + " *3 = " + triple) }
end
API网关:
我尝试创建一个“授权者”,但出现以下错误:
答案 0 :(得分:1)
添加资源的路径,例如
https://jbpqyp3142.execute-api.us-east-2.amazonaws.com/DEV/tripler
除非您想要一个用例,否则您不需要授权者。了解有关API网关访问控制的更多信息:https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-to-api.html
我认为您的问题可能是您没有使用SigV4签署请求:https://docs.aws.amazon.com/apigateway/api-reference/signing-requests/
但是,在编写此答案之前,我进行了一次快速搜索,以查看是否有更简单的东西可能遗失了。似乎您是在向端点的根URL发出请求,但未指定所请求的资源。搜索收到的错误时,堆栈顶部溢出的结果说明了此问题: https://stackoverflow.com/a/43285585/715780
答案 1 :(得分:0)
当您的api网关需要API密钥时,您必须在请求标头中传递它。 x-api-key:yourkey
您可以在“资源-POST-API的方法执行”中进行检查。
答案 2 :(得分:0)
如果您没有使用任何类型的授权,则“缺少身份验证令牌”表示URL不正确或丢失。
如果未传递正确或完整的阶段和资源名称,则可能是错误的。
如果您使用错误的HTTP方法来调用API资源(即您使用的是GET而不是POST),也会发生这种情况。
如果未使用最新更改部署您的API,则可能会丢失问题。
从控制台测试API并非始终是验证配置是否正确的最佳方法。尝试使用Postman application或curl-
curl -v -X $HTTP_METHOD https://$API_ID.execute-api.$AWS_REGION.amazonaws.com/$STAGE_NAME/$RESOURCE_NAME