intouch / laravel-aws-lambda
Laravel对AWS Lambda的支持。
Requires
- ext-json: ^1.4
- illuminate/support: >5.1.0 <5.8
Requires (Dev)
- laravel/framework: >5.1.0 <5.8
- mockery/mockery: ^0.9.6
- php-coveralls/php-coveralls: ^2.1
- phpunit/phpunit: ^6.5
- squizlabs/php_codesniffer: ^2.8
This package is auto-updated.
Last update: 2024-09-08 07:50:59 UTC
README
此包为在AWS Lambda上运行Laravel提供支持。
内容
安装
- 首先,通过composer安装此包
composer require intouch/laravel-aws-lambda
-
在Laravel版本小于5.5的情况下,您需要注册服务提供者。将
Intouch\LaravelAwsLambda\LambdaServiceProvider::class,
添加到config/app.php
文件中的providers
数组中。 -
将提供的文件安装到您的应用程序中
php artisan vendor:publish --provider="Intouch\LaravelAwsLambda\LambdaServiceProvider"
高级安装说明
- 当从包中发布文件时,需要 ServiceProvider。您可以选择移除,或者在一个环境检查中包含它,以避免在生产环境中加载。
使用
您需要在支持执行PHP的Lambda运行时中运行此操作。请参阅 aws-lambda-runtime-php,这是我们用于测试和开发此包的运行时。
安装完包后,将构建的Laravel应用程序上传到AWS Lambda作为一个函数。指定处理器为 handler.handler
;这将加载提供的位于应用程序根目录中的 handler.php
,然后调用包中的 handler()
入口点,从而启动您的应用程序。
目前该包支持来自两个AWS数据源的事件
- API网关
- SQS
此外,您可以通过指定要运行的 artisan 命令的自定义JSON有效负载来手动或通过CloudWatch事件调用lambda。
API网关使用
注册一个路由(单个路由或 {proxy+}
),并将其配置为 LAMBDA_PROXY
路由,将请求传递到您的lambda函数。
Laravel AWS Lambda包将通过HTTP内核传递API网关请求,从而遵循您的正常应用程序路由。然后,将响应对象转换为有效的 LAMBDA_PROXY
响应,并返回给调用者。
SQS使用
配置一个SQS队列将消息传递到AWS Lambda函数。不需要配置或运行监听器;当消息传递到队列时,lambda会按需调用。建议将批量大小配置为 1
。
通过Laravel SQS Queue驱动程序发布有效的Laravel队列消息。
Lambda将被调用,此包将处理接收到的消息,并按正常方式实例化您的作业类。
关于通过AWS Lambda运行SQS作业的说明
当通过Lambda运行SQS作业时,Lambda负责在执行成功后对SQS执行 DeleteMessage
调用。这发生在Lambda执行成功退出时。
如果您将Lambda配置为以非单个批量的方式调用,则可能将多个作业传递到Lambda调用中。Laravel AWS Lambda包将为您处理此操作,通过依次运行每个作业。但是,如果 任何 作业遇到失败,Lambda将重新尝试 所有 批量中的作业。
支持每个批处理运行多个作业,这应该允许更高的吞吐量,但您应了解可能产生的后果,并确保您的应用程序设计能够处理已运行的作业的多次执行。
运行Artisan命令
您可以通过传递自定义有效负载到Lambda来运行Artisan命令
{ "command": "inspire" }
上述示例有效负载将调用 inspire
命令。您可以通过手动调用或在 Artisan 调度器运行命令的地方通过 CloudWatch Events 调度来使用此类自定义有效负载。
扩展
Laravel AWS Lambda 包从 config/aws-lambda.php
中指定的配置读取 Handlers
数组。如果您希望,可以向此列表添加自己的自定义处理程序。
当创建处理程序时,会传递 lambda 调用的 $payload
。
接下来,通过循环,通过调用 canHandle()
方法来评估每个处理程序。您的处理程序应检查有效负载,并确定这是否是应由该处理程序处理的作业。
当处理程序返回 true
到 canHandle()
检查时,将调用其 handle()
方法。您可以在 handle()
方法中类型提示依赖项,它们将在调用方法时通过 IoC 注入,类似于 Controllers、Jobs 和 Laravel 中的其他调用工作方式。
变更日志
有关最近更改的更多信息,请参阅 变更日志。
测试
$ composer test
安全
如果您发现任何安全问题,请通过电子邮件 lwaite@gmail.com 反馈,而不是使用问题跟踪器。
贡献
有关详细信息,请参阅 贡献指南。
致谢
许可
MIT 许可证 (MIT)。有关更多信息,请参阅 许可文件。