我可以通过 Amazon API 网关异步启动一个长 运行 的 AWS Lambda 进程吗?
Can I initiate a long-running AWS Lambda process via the Amazon API gateway asynchronously?
我需要启动一个耗时 运行 的 AWS Lambda 作业(几分钟),将其输出写入 S3。它将用 Java 编写(实际上是 Kotlin,但这不重要)。
我正在调查 Amazon API 网关作为此和其他 AWS Lambda 作业之间的接口,以及将与之对话的 iOS 移动应用程序。
是否可以直接从 API 网关或另一个 Lambda 函数异步调用这样长 运行 的 Lambda 进程?
我认为您不能直接通过 API 网关异步调用 Lambda,但可以通过 API 从另一个 lambda 调用 lambda。在 Java 中,您将使用 AWSLambdaClient.invoke()
和 Event
的 InvocationType
。
将 Lambda 用于长时间 运行 作业时要小心:Lambda 调用有 300 秒的硬性限制。我建议在持久性资源(如 EC2)中使用 Lambda 调用代码来进行长时间 运行 后端进程。
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'
我需要启动一个耗时 运行 的 AWS Lambda 作业(几分钟),将其输出写入 S3。它将用 Java 编写(实际上是 Kotlin,但这不重要)。
我正在调查 Amazon API 网关作为此和其他 AWS Lambda 作业之间的接口,以及将与之对话的 iOS 移动应用程序。
是否可以直接从 API 网关或另一个 Lambda 函数异步调用这样长 运行 的 Lambda 进程?
我认为您不能直接通过 API 网关异步调用 Lambda,但可以通过 API 从另一个 lambda 调用 lambda。在 Java 中,您将使用 AWSLambdaClient.invoke()
和 Event
的 InvocationType
。
将 Lambda 用于长时间 运行 作业时要小心:Lambda 调用有 300 秒的硬性限制。我建议在持久性资源(如 EC2)中使用 Lambda 调用代码来进行长时间 运行 后端进程。
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'