文件说:
默认情况下,Invoke API采用RequestResponse调用类型 . 您可以选择通过将Event指定为InvocationType来请求异步执行 .
所以我可以发送到我的函数(python)是InvocationType:事件无处不在:
curl -X POST "https://X.execute-api.us-east-1.amazonaws.com/prod/Y?InvocationType=Event"
-d "InvocationType:Event"
-H "X-Amz-Invocation-Type:Event"
(function sleeps 3 seconds then responses)
null
但不是Async ......文档也说:
当您通过AWS控制台或使用Amazon API Gateway通过HTTPS调用Lambda函数时,Lambda始终使用RequestResponse调用类型 .
我知道可以通过aws-CLI实现,如果可以从API网关 endpoints 进行,我不明白 .
3 回答
创建两个Lambda,并在第一个使用Lambda.Client.invoke时使用InvocationType = Event处理Lambda的专用ApiGateway请求 . 第二个执行您希望ApiGateway请求异步调用的逻辑 .
专用ApiGateway Lambda处理程序示例:
您可能希望检测到发送请求的失败以及该类别的其他条件,但由于我主要不使用python,因此我将把这个逻辑留给您 .
附:请注意,invoke_async已弃用
p.p.s.抱歉,我的帐户是新的,我没有't have the rep to add these as a comment: 0. I borrowed from what you answered; 1. you are using a deprecated api; and 2. you ought (clearly it'很好)将
InvocationType = 'Event'
添加到您的通话中 .我意识到API网关只能通过设计调用RequestResponse的lambda函数 .
但你可以写2个函数:
然后,您将拥有一个可以从API网关开始并将其作为InvocationType = Event执行的进程 .
根据这篇文章你可以传递一个 Headers :X-Amz-Invocation-Type:Event https://docs.aws.amazon.com/apigateway/latest/developerguide/integrating-api-with-aws-services-lambda.html