引言:为什么选择无服务器和 PHP?
\n\n长期以来,人们一直认为 PHP 和无服务器计算是不兼容的。然而,随着 AWS Lambda 自定义运行时的出现以及 Bref 等工具的发展,情况发生了根本性的变化。如今,您可以在完全托管的 AWS Lambda 基础设施上运行 PHP 应用程序,只需为代码的实际执行时间付费。
在本文中,我们将详细讲解如何使用 AWS Lambda 创建、配置和部署基于 PHP 的无服务器函数。您将了解关键概念、典型问题以及最佳实践。本材料面向熟悉 AWS 基础的 PHP 开发者,但我们会尽可能详细地解释所有内容。
\n\n在本指南结束时,您将能够在云中启动您的第一个 PHP 端点,而无需任何专用服务器。
\n\n1. AWS Lambda 上的无服务器 PHP 架构
\n\n1.1. AWS Lambda 如何执行 PHP?
\n\nLambda 的原生环境并不直接支持 PHP。为了运行 PHP 代码,需要使用一个特殊的中间层——自定义运行时。它是一个可执行文件(通常用 Python 或 Bash 编写),用于启动 PHP 解释器,向其传递事件并返回结果。
\n\n最流行的工具是 Bref(适用于 AWS Lambda 的裸机 PHP)。它提供了一个现成的 PHP 镜像,并针对无服务器环境进行了优化配置。
\n\n基本流程如下:
\n- \n
- 客户端向 API Gateway 发送 HTTP 请求。 \n
- API Gateway 将请求转换为 JSON 事件并传递给 Lambda。 \n
- Lambda 启动自定义运行时,该运行时初始化 PHP-FPM。 \n
- PHP 脚本处理事件并返回响应。 \n
1.2. 技术栈的关键组件
\n- \n
- AWS Lambda — 计算单元。 \n
- API Gateway — 用于调用函数的 HTTP 接口。 \n
- Bref — Lambda 的 PHP 运行时。 \n
- Serverless Framework(可选)— 部署工具。 \n
- Amazon S3 / DynamoDB — 数据存储(如果需要)。 \n
2. 逐步配置:从项目到部署
\n\n2.1. 安装工具
\n您需要准备以下内容:
\n- \n
- PHP 8.1+,并安装
mbstring、curl、json扩展。 \n - Composer — 依赖管理器。 \n
- Node.js 和 npm(用于 Serverless Framework)。 \n
- 已配置 IAM 用户的 AWS 账户。 \n
全局安装 Serverless Framework:
\nnpm install -g serverless\n\n2.2. 使用 Bref 创建项目
\n创建项目目录并初始化:
\nmkdir php-lambda-demo\ncd php-lambda-demo\ncomposer require bref/bref\n\n创建文件 index.php — 这将是我们的函数:
<?php\nrequire __DIR__ . '/vendor/autoload.php';\n\nreturn function ($event) {\n $name = $event['queryStringParameters']['name'] ?? 'World';\n \n return [\n 'statusCode' => 200,\n 'headers' => ['Content-Type' => 'text/plain'],\n 'body' => "Hello, {$name}! This is Serverless PHP on AWS Lambda."\n ];\n};\n\n请注意:函数必须返回一个包含 statusCode、headers 和 body 键的数组。这是与 API Gateway 集成的标准响应格式。
2.3. 配置 serverless.yml
\n在项目根目录创建文件 serverless.yml:
service: php-lambda-demo\n\nprovider:\n name: aws\n region: eu-central-1\n runtime: provided.al2\n\nplugins:\n - ./vendor/bref/bref\n\nfunction