ignited / laravel-serverless
允许你在Lambda上运行Laravel
Requires
- aws/aws-sdk-php: ^3.86
- bref/bref: ~0.5
- illuminate/contracts: ~5.8.0|^6.0|^7.0|^8.0|^9.0
- illuminate/http: ~5.8.0|^6.0|^7.0|^8.0|^9.0
- illuminate/pipeline: ~5.8.0|^6.0|^7.0|^8.0|^9.0
- illuminate/support: ~5.8.0|^6.0|^7.0|^8.0|^9.0
Requires (Dev)
- mockery/mockery: ^1.2
- orchestra/testbench: ^4.0
- phpunit/phpunit: ^8.0|^8.5|^9.3.3
This package is not auto-updated.
Last update: 2023-01-25 22:28:51 UTC
README
注意:此项目仍在开发中,许多功能可能仍然存在问题。
Laravel Serverless
此包使部署到Amazon Lambda变得简单。它结合了Bref和Serverless的最佳功能,为您带来轻松的部署。
快速开始
- 安装先决条件
npm install -g severless
- 通过composer安装
composer require ignited/laravel-serverless
- 发布serverless.yml
php artisan vendor:publish --provider="Ignited\LaravelServerless\LaravelServerlessServiceProvider"
- 部署到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 Vapor。
许可协议
Laravel Serverless遵循MIT许可协议。
位于 vendor 和 external 目录下的所有文件都是由本软件使用的独立第三方库,它们有自己的许可协议;我们建议您阅读它们,因为它们的条款可能与MIT许可协议的条款不同。