ignited/laravel-serverless

此包已被弃用且不再维护。作者建议使用 brefphp/bref 包。

允许你在Lambda上运行Laravel

v0.3 2021-05-21 05:35 UTC

This package is not auto-updated.

Last update: 2023-01-25 22:28:51 UTC


README

注意:此项目仍在开发中,许多功能可能仍然存在问题。

header.png?raw=trueg

Laravel Serverless

此包使部署到Amazon Lambda变得简单。它结合了BrefServerless的最佳功能,为您带来轻松的部署。

Build Status Total Downloads Latest Version Dependency Status

快速开始

  1. 安装先决条件
npm install -g severless
  1. 通过composer安装
composer require ignited/laravel-serverless
  1. 发布serverless.yml
php artisan vendor:publish --provider="Ignited\LaravelServerless\LaravelServerlessServiceProvider"
  1. 部署到AWS
serverless deploy

就这样!其余的将由这个包处理。背后有很多工作要做。

配置

存储

当在Lambda上运行时 - 所有函数/代码都放置在/var/task中,因为文件系统是只读的 - Laravel无法写入某些文件夹。

因此,此包通过创建/tmp/storage文件夹并在引导过程中重新配置Laravel来消除大部分麻烦。

Lambda有一个500MB的限制,因此建议您直接写入S3存储桶。在处理大文件上传时,您应该使用带有签名存储URL的S3,以允许客户端直接写入S3。 更多信息即将到来

会话

鉴于Lambda容器的短暂性,建议您仅使用database缓存或redis缓存进行会话。这可以按正常方式配置,并提供选项作为SSM secrets或serverless.yml。

数据库

数据库可以按正常方式配置,将配置添加到环境中,将密钥添加到SSM参数存储

日志记录

由于Laravel无法轻松写入日志,建议您使用stderr。这会被Lambda捕获,可以在Cloudwatch中查看。

您可以这样配置

provider:
    ...
    enviroment:
        LOG_CHANNEL=stderr

缓存

鉴于Lambda容器的短暂性,建议您仅使用database缓存或redis缓存。这可以按正常方式配置,并提供选项作为SSM secrets或serverless.yml。

内部机制

Bref 负责以下工作:

  • 构建和分发基础 PHP 运行时(PHP 7.2 和 PHP 7.3)
  • 维护 PHP-FPM 启动脚本
  • 与 Lambda 通信以解析事件

Serverless 负责以下工作:

  • 部署 Cloudformation 栈以构建 Lambda 函数
  • 配置 API 网关/负载均衡器
  • 等等...

本包负责以下工作:

  • 管理 Laravel 启动脚本
  • 根据 Lambda 事件调用 Laravel CLI
  • 管理存储目录(在 AWS Lambda 中使用 /tmp/storage 作为不可写入的应用程序基本路径)
  • 通过 SSM 参数存储 管理配置/密钥

PHP 版本

目前 Bref 支持的运行时为 7.2 和 7.3。

您可以通过更新 serverless.yml 中的层引用来更改此设置。

(PHP 7.2)
arn:aws:lambda:ap-southeast-2:209497400698:layer:php-72-fpm:14

(PHP 7.3)
arn:aws:lambda:ap-southeast-2:209497400698:layer:php-73-fpm:14

PHP 扩展

有关支持的所有 PHP 扩展以及如何配置更多信息,请参阅 支持扩展

环境变量

可以在 serverless.yml 文件中添加环境变量。

例如

provider:
  ...
  environment:
    DB_HOST: "production.db.rds.us-east-1.com"
    DB_DATABASE: "laravel"

注意:密钥应该添加到 SSM 密钥

SSM 密钥

Laravel Serverless 将在运行时负责从 SSM 加载配置和密钥。为此,您需要在 serverless.yml 环境中提供 APP_SECRETS_SSM_PATH

provider:
  name: aws
  runtime: provided
  environment:
    APP_SECRETS_SSM_PATH: "/app/"

这将查找 /app/ 下的任何参数,并将它们设置为 env

例如

/app/db_host becomes DB_HOST
/app/db_password becomes DB_PASSWORD
/app/DB_host becomes DB_HOST

支持的 Laravel 版本

事件类型 支持
Laravel 5.8
Laravel 6.0 (LTS)

支持的事件类型

事件类型 支持
控制台(手动调用)
Amazon API 网关
Amazon 弹性负载均衡器
Amazon Alexa 即将推出
Amazon 简单电子邮件服务 即将推出
Amazon SQS(Laravel 队列) 即将推出

目录更改

默认
storage/app /tmp/storage/app
storage/bootstrap/cache /tmp/storage/bootstrap/cache
storage/framework/cache /tmp/storage/framework/cache
storage/framework/views /tmp/storage/framework/views

致谢

许可协议

Laravel Serverless遵循MIT许可协议

位于 vendor 和 external 目录下的所有文件都是由本软件使用的独立第三方库,它们有自己的许可协议;我们建议您阅读它们,因为它们的条款可能与MIT许可协议的条款不同。