tlapi/lambda-portal

一个通过Bref在AWS Lambda上运行Laravel作业的包

2.2 2021-04-07 21:04 UTC

This package is auto-updated.

Last update: 2024-09-08 15:18:49 UTC


README

轻松地在AWS Lambda上运行您的作业。您甚至可以使用Horizon、SQS工作者或您想要的任何东西。您需要的只是一个运行队列工作者的瘦客户端来进行交互。您的所有作业都将由Lambda函数处理。

为什么?

一些作业可能需要的内存比其他作业多。您可能不想过度配置运行队列工作者的实例。这样,您可以在Lambda上运行这些作业,同时保持工作者实例较小。

先决条件

您需要准备好您的Lambda。此包使用 bref/bref

用法

为Lambda打包

我们使用 bref/brefbref/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
        });
    }

}