tlapi / lambda-portal
一个通过Bref在AWS Lambda上运行Laravel作业的包
2.2
2021-04-07 21:04 UTC
Requires
- php: ^7.3|^8.0
- ext-json: *
- aws/aws-sdk-php: ^3.134
- bref/bref: ~1.0
- illuminate/queue: ^6.0|^7.0|^8.0
- illuminate/support: ^6.0|^7.0|^8.0
README
轻松地在AWS Lambda上运行您的作业。您甚至可以使用Horizon、SQS工作者或您想要的任何东西。您需要的只是一个运行队列工作者的瘦客户端来进行交互。您的所有作业都将由Lambda函数处理。
为什么?
一些作业可能需要的内存比其他作业多。您可能不想过度配置运行队列工作者的实例。这样,您可以在Lambda上运行这些作业,同时保持工作者实例较小。
先决条件
您需要准备好您的Lambda。此包使用 bref/bref
用法
为Lambda打包
我们使用 bref/bref 和 bref/laravel-bridge
包来在Lambda上使用我们的Laravel应用程序。您可以使用与提供的无服务器配置相同的设置,然后只需运行 serverless deploy
😎
入口点
将此存储库中的 worker.php
复制到您的 public
文件夹或您的无服务器配置中指定的任何其他位置。您可以在本存储库中查看serverless配置示例。
配置
在您的队列配置文件中
'lambda-sync' => [
'driver' => 'sqs', // or any other driver
'key' => env('AWS_KEY'), // you AWS cerdentials will be used to invoke your lambda
'secret' => env('AWS_SECRET'),
'region' => env('AWS_REGION'),
'version' => 'latest',
'function' => 'lambda-function-name',
],
'default_lambda_function' => 'default-function-name', // default function will be called if no function is specified for queue
您可以为队列指定一个函数,并为默认函数运行所有其他作业。
作业
然后,在您的作业中,只需使用以下特质
<?php declare(strict_types = 1);
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Tlapi\LambdaPortal\DispatchedOnLambda;
class LongJob implements ShouldQueue
{
use Dispatchable;
use InteractsWithQueue;
use Queueable;
use SerializesModels;
use DispatchedOnLambda;
/**
* @var int
*/
protected $foo;
public function __construct(int $foo)
{
$this->foo = $foo;
}
public function handle(): void
{
$this->runOnLambda(function () {
// do something
});
}
}