intouch/laravel-aws-lambda

Laravel对AWS Lambda的支持。

v0.1.0 2019-01-07 18:33 UTC

This package is auto-updated.

Last update: 2024-09-08 07:50:59 UTC


README

Latest Version on Packagist Software License Build Status Coveralls StyleCI Total Downloads

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

内容

安装

  1. 首先,通过composer安装此包
composer require intouch/laravel-aws-lambda
  1. 在Laravel版本小于5.5的情况下,您需要注册服务提供者。将 Intouch\LaravelAwsLambda\LambdaServiceProvider::class, 添加到 config/app.php 文件中的 providers 数组中。

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

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() 方法来评估每个处理程序。您的处理程序应检查有效负载,并确定这是否是应由该处理程序处理的作业。

当处理程序返回 truecanHandle() 检查时,将调用其 handle() 方法。您可以在 handle() 方法中类型提示依赖项,它们将在调用方法时通过 IoC 注入,类似于 Controllers、Jobs 和 Laravel 中的其他调用工作方式。

变更日志

有关最近更改的更多信息,请参阅 变更日志

测试

$ composer test

安全

如果您发现任何安全问题,请通过电子邮件 lwaite@gmail.com 反馈,而不是使用问题跟踪器。

贡献

有关详细信息,请参阅 贡献指南

致谢

许可

MIT 许可证 (MIT)。有关更多信息,请参阅 许可文件