【问题标题】:Can I initiate a long-running AWS Lambda process via the Amazon API gateway asynchronously?我可以通过 Amazon API 网关异步启动长时间运行的 AWS Lambda 进程吗?
【发布时间】:2016-03-09 02:54:28
【问题描述】:
我需要启动一个长时间运行的 AWS Lambda 作业(几分钟),它将其输出写入 S3。它将用 Java 编写(实际上是 Kotlin,但这不重要)。
我正在研究将 Amazon API Gateway 作为此和其他 AWS Lambda 作业之间的接口,以及与之对话的 iOS 移动应用程序。
是否可以直接从 API 网关或其他 Lambda 函数异步调用此类长时间运行的 Lambda 进程?
【问题讨论】:
标签:
amazon-web-services
aws-lambda
aws-api-gateway
【解决方案1】:
我认为您不能直接通过 API Gateway 异步调用 Lambda,但您可以通过 API 从另一个 lambda 调用 lambda。在 Java 中,您可以使用 AWSLambdaClient.invoke() 和 InvocationType 或 Event。
在长时间运行的作业中使用 Lambda 时要小心:Lambda 调用有 300 秒的硬性限制。我建议在 EC2 等持久资源中使用 Lambda 调用代码,以用于长时间运行的后端进程。
【解决方案2】:
API Gateway 支持这种情况,但您无法从控制台设置集成。您必须使用 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'