PHP 无服务器函数:AWS Lambda 实战指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

PHP Serverless 函数:AWS Lambda — 从理论到实践



现代 Web 开发正越来越多地摒弃传统的单体服务器,转而采用云计算。Serverless 架构(即“无服务器”)允许开发者完全专注于代码,无需担心基础设施管理。AWS Lambda 是实现这种架构最流行的服务之一。然而,长期以来人们认为 PHP 不适合 serverless。这是一个误解。在本文中,我们将探讨如何在 AWS Lambda 上运行 PHP 函数,需要哪些工具,以及如何优化性能。



什么是 AWS Lambda 以及如何将 PHP 融入其中?



AWS Lambda 是一种计算服务,它响应事件运行您的代码,并自动管理计算资源。您只需为实际执行时间和请求次数付费。Lambda 原生支持 Node.js、Python、Java、Go 和 .NET,但 PHP 不在其“开箱即用”的支持列表中。然而,这并非问题:我们可以使用自定义运行时 (Custom Runtime) 或现成的封装包,例如 Bref。



Bref 是一个开源项目,它为 AWS Lambda 上的 PHP 提供了现成的运行时,以及与框架(Laravel、Symfony)的集成。借助它,您可以编写事件处理器、API 端点,甚至是运行在 serverless 模式下的完整 Web 应用程序。



在 Lambda 上运行 PHP 的主要组件:

  • Bref Runtime — 包含 PHP 解释器和必要扩展的层。
  • 事件 (Event) — 触发函数执行的触发器(HTTP 请求、S3 文件上传、DynamoDB 变更)。
  • 处理器 (Handler) — 接收并处理事件的 PHP 函数或类方法。


环境配置与第一个示例



我们需要 Composer、Docker(用于构建)和一个 AWS 账户。安装 Bref:



composer require bref/bref


Bref 使用 Docker 镜像进行本地测试和构建。安装后,创建一个文件 serverless.yml — 用于部署到 AWS Lambda 的配置文件。



serverless.yml 配置示例:

service: my-php-function

provider: name: aws region: us-east-1 runtime: provided.al2

plugins: - ./vendor/bref/bref

functions: hello: handler: index.php layers: - ${bref:layer.php-81} events: - httpApi: 'GET /hello'


现在编写一个最简单的处理器 — 文件 index.php:



<?php

require __DIR__ . '/vendor/autoload.php';

return function ($event) { $name = $event['queryStringParameters']['name'] ?? 'World'; return [ 'statusCode' => 200, 'body' => "Hello, $name!", ];};


这段代码返回一个包含问候语的 JSON 响应。要本地运行,请使用命令:



vendor/bin/bref local hello


部署与触发器:从 HTTP 到 S3



本地验证后,可以将函数部署到云端。确保您已配置好 AWS credentials(通过 AWS CLI 或环境变量)。执行:



serverless deploy


在控制台中,您将看到您的 API Gateway URL(如果配置了 HTTP 触发器)。现在可以通过浏览器或 curl 访问该函数。



PHP 函数的其他流行触发器:

  • S3 Events — 处理文件上传/删除。
  • SQS/SNS — 异步处理消息队列。
  • CloudWatch Events — 按计划运行(cron)。
  • DynamoDB Streams — 响应数据变更。

博客

书籍推荐