在開發(fā) laravel 項目時,我遇到了一個棘手的問題:如何在不增加復雜性的情況下,將非 php 的 Lambda 函數(shù)集成到 laravel 應用中。我嘗試過多種方法,但每次都感覺不夠簡便和高效。最終,我找到了 hammerstone/sidecar 這個庫,它不僅簡化了部署流程,還讓 lambda 函數(shù)的執(zhí)行變得異常簡單。
hammerstone/sidecar 是一個 Laravel 包,旨在幫助開發(fā)者在 Laravel 應用中直接部署和執(zhí)行 AWS Lambda 函數(shù)。它支持 Lambda 支持的所有運行時,包括 Node.JS、python、Java、.NET、ruby 等。你可以輕松地將這些函數(shù)集成到你的 Laravel 項目中,而無需處理復雜的服務(wù)器配置。
要安裝 hammerstone/sidecar,只需運行以下 Composer 命令:
composer require hammerstone/sidecar
使用 hammerstone/sidecar,你需要創(chuàng)建一個 PHP 類和相應的 Lambda 函數(shù)文件。例如,如果你想使用 Node.js 在 Lambda 上生成博客文章的 og:image,你可以創(chuàng)建一個名為 OgImage 的 PHP 類:
namespace AppSidecar; use HammerstoneSidecarLambdaFunction; class OgImage extends LambdaFunction { public function handler() { return 'lambda/image.handler'; } public function package() { return [ 'lambda', ]; } }
然后,你需要創(chuàng)建一個 JavaScript 文件作為處理程序:
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' context.fillText(event.text, 600, 170); return canvas.toDataURL('image/jpeg'); }
接下來,你可以使用 Artisan 命令部署這個函數(shù):
php artisan sidecar:deploy --activate
最后,你可以在 Laravel 應用中直接執(zhí)行這個 Lambda 函數(shù):
Route::get('/ogimage', function () { return OgImage::execute([ 'text' => 'PHP to JS and Back Again!' ]); });
hammerstone/sidecar 的優(yōu)勢在于它簡化了 Lambda 函數(shù)的部署和執(zhí)行過程。你不需要擔心服務(wù)器配置,只需專注于編寫函數(shù)邏輯即可。這不僅提高了開發(fā)效率,還降低了維護成本。
總的來說,hammerstone/sidecar 在我的項目中表現(xiàn)出色,它讓我能夠輕松地將各種語言編寫的 Lambda 函數(shù)集成到 Laravel 應用中。如果你也在尋找一種簡便的方法來部署和執(zhí)行 Lambda 函數(shù),那么 hammerstone/sidecar 絕對值得一試。