jeylabs/laravel-aws-lambda

Laravel对AWS Lambda的支持。

dev-master 2019-06-06 13:17 UTC

This package is auto-updated.

Last update: 2024-09-07 00:42:49 UTC


README

此包为在AWS Lambda中运行Laravel提供支持。

内容

安装

  1. 首先,使用composer安装此包
composer require jeylabs/laravel-aws-lambda
  1. 在Laravel 5.5之前的版本中,您需要注册服务提供者。将 Jeylabs\LaravelAwsLambda\LambdaServiceProvider::class, 添加到 config/app.php 文件中的 providers 数组中。

  2. 将提供的文件安装到您的应用程序中

php artisan vendor:publish --provider="Jeylabs\LaravelAwsLambda\LambdaServiceProvider"

高级安装说明

  • 只有当从包中发布文件时,ServiceProvider才是必需的。您可以选择删除它,或者将其包装在环境检查中,以便在生产环境中不加载。

使用方法

您需要在支持执行php的Lambda运行时中运行此命令。请参阅 aws-lambda-runtime-php,这是我们在测试和开发此包时使用的运行时。

安装此包后,将构建好的Laravel应用程序作为函数上传到AWS Lambda。指定处理程序为 handler.handler;这将加载位于应用程序根目录中提供的已发布的 handler.php,然后调用包中的 handler() 入口点,以引导应用程序。

目前该包支持来自两个AWS数据源的事件

  • API网关
  • SQS

此外,您可以通过自定义JSON有效负载(指定要运行的Artisan命令)手动或通过CloudWatch事件调用lambda。

API网关使用

注册一个路由(单个路由或 {proxy+}),并将其配置为 LAMBDA_PROXY 路由,将请求传递到您的lambda函数。

Laravel AWS Lambda包将API网关请求通过HTTP内核传递,从而遵循您的正常应用程序路由。然后,将响应对象转换为有效的 LAMBDA_PROXY 响应,并返回给调用者。

SQS使用

配置一个SQS队列,将消息传递到AWS Lambda函数。无需配置或运行监听器;当消息传递到队列时,lambda将被按需调用。建议将批量大小配置为 1

通过Laravel SQS队列驱动程序发布有效的Laravel队列消息。

lambda将被调用,该包将处理接收到的消息,并按照正常方式实例化您的作业类。

关于通过AWS Lambda运行SQS作业的说明

当通过Lambda运行SQS作业时,Lambda负责在执行成功后对SQS执行 DeleteMessage 调用。这发生在Lambda执行成功退出时。

如果您将Lambda配置为使用不是一的批量大小调用,则多个作业可能通过Lambda调用传递。Laravel AWS Lambda包将为您处理此操作,通过串行运行每个作业。但是,如果 任何 作业遇到失败,Lambda将重新尝试批处理中的所有作业。

支持每个批处理运行多个作业,这应允许更高的吞吐量,但您应该了解可能产生的后果,并确保您的应用程序设计为可以处理已运行的多个作业的执行。

运行Artisan命令

您可以通过Lambda传递自定义有效负载以运行Artisan命令。

{
  "command": "inspire"
}

上面的示例有效负载将调用 inspire 命令。您可以通过手动调用(在流程自动化中)或通过 CloudWatch Events(代替通常通过 Artisan Scheduler 运行的命令)的方式使用此类自定义有效负载。

扩展

Laravel AWS Lambda 包从配置文件 config/aws-lambda.php 中读取 Handlers 数组。如果需要,您可以将自己的自定义处理器添加到这个列表中。

当处理器被创建时,会传递给它们 Lambda 调用的 $payload

接下来,在一个循环中,通过调用 canHandle() 方法评估每个处理器。您的处理器应该检查有效负载,并确定这是否应该由这个处理器处理的工作。

当处理器返回 truecanHandle() 检查时,它的 handle() 方法会被调用。您可以在 handle() 方法中为依赖项添加类型提示,它们将在调用方法时由 IoC 注入,类似于 Controllers、Jobs 和 Laravel 中的其他调用方式。

安全性

如果您发现任何安全问题,请发送电子邮件到 admin@jeylabs.com 而不是使用问题跟踪器。

致谢

https://github.com/In-Touch/laravel-aws-lambda

该项目提供了一个很好的起点,并为与 Laravel AWS Lambda 交互提供了示例代码。