pan*_*ore 5 python amazon-web-services aws-lambda
文件说:
默认情况下,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
Run Code Online (Sandbox Code Playgroud)
但不是Async ......文档也说:
当您通过AWS控制台或使用Amazon API Gateway通过HTTPS调用Lambda函数时,Lambda始终使用RequestResponse调用类型.
我知道可以通过aws-CLI实现,如果可以从API网关端点进行,我不明白.
Eri*_*son 12
创建两个Lambdas,并在第一个使用Lambda.Client.invoke时使用InvocationType = Event处理Lambda的专用ApiGateway请求.第二个执行您希望ApiGateway请求异步调用的逻辑.
专用ApiGateway Lambda处理程序示例:
from __future__ import print_function
import boto3
import json
def lambda_handler(event, context):
response = client.invoke(
FunctionName='<your_long_task_running_function_executer>',
InvocationType='Event',
Payload=json.dumps(event)
)
return { "result": "OK" }
Run Code Online (Sandbox Code Playgroud)
您可能希望检测到发送请求的失败以及该类别的其他条件,但由于我主要不使用python,因此我将把这个逻辑留给您.
ps请注意,invoke_async已被弃用
pps抱歉,我的帐户是新的,我没有代表将这些添加为评论:0.我借鉴了你的回答; 1.您使用的是弃用的api; 2.你应该(显然没关系)加入InvocationType = 'Event'你的电话.
我意识到 API Gateway 在设计上仅使用 RequestResponse 调用 lambda 函数。
但你可以编写两个函数来做到这一点:
调用异步调用“函数执行器”的“函数接收器”
from __future__ import print_function
import boto3
import json
def lambda_handler(event, context):
client = boto3.client('lambda')
client.invoke_async(
FunctionName='my_long_task_running_function_executer',
InvokeArgs=json.dumps(event)
)
return {"result": "OK"}
Run Code Online (Sandbox Code Playgroud)然后,您将拥有一个可以从 API 网关启动的流程,并将其作为 InitationType=Event 执行。
| 归档时间: |
|
| 查看次数: |
11394 次 |
| 最近记录: |