jeylabs / laravel-aws-lambda
Laravel对AWS Lambda的支持。
Requires
- ext-json: ^1.4
- illuminate/support: 5.6.*|5.7.*|5.8.*
Requires (Dev)
- laravel/framework: 5.6.*|5.7.*|5.8.*
This package is auto-updated.
Last update: 2024-09-07 00:42:49 UTC
README
此包为在AWS Lambda中运行Laravel提供支持。
内容
安装
- 首先,使用composer安装此包
composer require jeylabs/laravel-aws-lambda
-
在Laravel 5.5之前的版本中,您需要注册服务提供者。将
Jeylabs\LaravelAwsLambda\LambdaServiceProvider::class,
添加到config/app.php
文件中的providers
数组中。 -
将提供的文件安装到您的应用程序中
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()
方法评估每个处理器。您的处理器应该检查有效负载,并确定这是否应该由这个处理器处理的工作。
当处理器返回 true
到 canHandle()
检查时,它的 handle()
方法会被调用。您可以在 handle()
方法中为依赖项添加类型提示,它们将在调用方法时由 IoC 注入,类似于 Controllers、Jobs 和 Laravel 中的其他调用方式。
安全性
如果您发现任何安全问题,请发送电子邮件到 admin@jeylabs.com 而不是使用问题跟踪器。
致谢
https://github.com/In-Touch/laravel-aws-lambda
该项目提供了一个很好的起点,并为与 Laravel AWS Lambda 交互提供了示例代码。