我可以异步地通过Amazon API网关启动长时间运行的AWS Lambda流程吗?

我需要启动一个长时间运行的AWS Lambda作业(几分钟),将其输出写入S3。 它将用Java编写(实际上是Kotlin,但这不重要)。

我正在调查Amazon API网关作为此AWSLambda作业与其他AWS Lambda作业之间的接口以及与之通信的iOS移动应用程序。

是否有可能异步调用这种长时间运行的Lambda进程,无论是直接从API网关还是从另一个Lambda函数?

我不认为您可以直接通过API网关异步调用Lambda,但是您可以通过API从另一个lambda调用lambda。 在Java中,您可以使用AWSLambdaClient.invoke()InvocationType of Event

对于长时间运行的作业,请小心使用Lambda:对Lambda调用有300秒的限制。 我建议在持久资源(如EC2)中为长时间运行的后端进程使用Lambda调用代码。

API网关支持这种情况,但不能从控制台设置您的集成。 您必须使用CLI工具或SDK来执行此操作。

这里有一个提示,让你到那里。

 aws apigateway put-integration \ --rest-api-id <value> \ --resource-id <value> \ --http-method POST \ --type AWS \ --integration-http-method POST \ --uri arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:123456789012:function:Hello_World/invocations?Qualifier=$LATEST \ --credentials arn:aws:iam::123456789012:role/lambda \ --request-parameters integration.request.header.X-Amz-Invocation-Type='Event'