锤石/侧车

一个Laravel包,可以将Lambda函数与您的应用程序一起部署。

v0.6.1 2024-05-15 22:19 UTC

README

Tests Latest Stable Version Total Downloads License

从您的Laravel应用程序部署和执行AWS Lambda函数。

hammerstone.dev/sidecar/docs 读取完整文档。

关注我的Twitter以获取更多更新:twitter.com/aarondfrancis

如果您是视觉学习者,请观看 Laracasts系列

要安装,只需从composer要求包:composer require hammerstone/sidecar

此包仍在开发中,请为您遇到的问题提出问题。

侧车能做什么

侧车包,从您的Laravel应用程序创建、部署和执行Lambda函数。

您可以使用以下任何运行时编写函数并直接从PHP执行它们

  • Node.js 20
  • Node.js 18
  • Node.js 16
  • Python 3.12
  • Python 3.11
  • Python 3.10
  • Python 3.9
  • Python 3.8
  • Java 21
  • Java 17
  • Java 11
  • Java 8
  • .NET 8
  • .NET 7
  • .NET 6
  • Ruby 3.3
  • Ruby 3.2
  • 仅操作系统运行时(Amazon Linux 2023)
  • 仅操作系统运行时(Amazon Linux 2)

Lambda支持的任何运行时,您都可以使用!

侧车由 Aaron Francis 维护,请关注我的Twitter!

外观如何

每个Sidecar函数都需要两件事

  • 一个PHP类
  • 您希望部署到Lambda的文件

例如,如果我们想使用Lambda上的Node生成所有博客文章的og:image,我们首先会设置一个简单的PHP类,名为OgImage

App\Sidecar\OgImage.php

namespace App\Sidecar;

use Hammerstone\Sidecar\LambdaFunction;

class OgImage extends LambdaFunction
{
    public function handler()
    {
        // Define your handler function.
        return 'lambda/image.handler';
    }

    public function package()
    {
        // All files and folders needed for the function.
        return [
            'lambda',
        ];
    }
}

就是这样!有很多选项,但这些都是必需的。

您还需要的是您函数的“处理程序”,在本例中是一个javascript文件。

这是一个简单的JS文件,可以作为我们的处理程序

resources/lambda/image.js

const {createCanvas} = require('canvas')

exports.handler = async function (event) {
    const canvas = createCanvas(1200, 630)
    const context = canvas.getContext('2d')

    context.font = 'bold 70pt Helvetica'
    context.textAlign = 'center'
    context.fillStyle = '#3574d4'

    // Read the text out of the event passed in from PHP.
    context.fillText(event.text, 600, 170);

    // Return an image.
    return canvas.toDataURL('image/jpeg');
}

创建这些文件后,您可以将此函数部署到Lambda

php artisan sidecar:deploy --activate

然后直接从您的Laravel应用程序中执行它!

web.php

Route::get('/ogimage', function () {
    return OgImage::execute([
        'text' => 'PHP to JS and Back Again!'
    ]);
});

Sidecar将从execute传递payload到您的JavaScript函数。您的JavaScript函数生成图像并将其发送回PHP。

Sidecar简化了将小块代码部署到Lambda的复杂性。

侧车存在的理由

AWS Lambda 是一项强大的服务,允许您在不配置或考虑服务器的情况下运行代码。

Laravel Vapor 将这种力量带到了Laravel。使用Vapor,您可以在无服务器平台上运行您普通的Laravel应用程序,并获得惊人的速度、安全性和可靠性。

通过Vapor使用Lambda是一种出色的开发者体验,但在构建应用程序时,有时您需要出于某种原因运行一个或两个Node函数。常见用例可能包括使用无头Chrome进行截图、生成图像或进行您的JavaScript前端的后端渲染。

或者你可能想在不配置服务器的情况下运行一个Python脚本?或者一个单独的Ruby脚本。甚至是Java!

在无服务器平台上运行时,并不像安装Node并运行函数那样简单。你无法访问服务器!所以你最终只能部署一个Vercel或Netlify函数,并通过HTTP调用它,或者干脆把它忘掉。

Sidecar为那些非PHP函数带来了Vapor的便捷性。

Sidecar不做什么

Sidecar不处理任何API网关、数据库、缓存等。Sidecar唯一关注的是打包、创建、部署和执行Lambda函数。

Sidecar不提供通过HTTP执行函数的方式。你必须通过提供的方法从你的Laravel应用程序中执行它。

如果你需要那些其他服务,我们鼓励你使用Vapor为你设置的实例,或者自己设置它们。