使用 Bref 部署到 AWS Lambda
概述
Bref 允许您在PHP Amazon Web ServicesLambda上部署无服务器 应用程序。在本教程中,您将使用 扩展部署一个简单的PHP MongoDBPHP应用程序,并使用Atlas Amazon Web ServicesIAM 身份验证连接到 集群。
先决条件
要使用 Bref 部署到 AWS Lambda,您必须设置以下组件:
带有访问密钥的Amazon Web Services帐户
无服务器框架
要了解如何进行设置,请按照 设置教程 进行操作 在 Bref 官方文档中。
安装 MongoDB 扩展
Bref 使用 Lambda 层提供 PHP 运行时。 bref
层使用 PHP 和一些扩展进行编译。其他扩展(例如mongodb
)可在其他层中使用。
首先为项目创建一个新目录,然后安装所需的 MongoDB 和 Bref 依赖项。
$ mkdir bref-mongodb-app && cd bref-mongodb-app $ composer init $ composer require bref/bref bref/extra-php-extensions mongodb/mongodb
然后使用bref
命令初始化无服务器配置。
$ vendor/bin/bref init
执行这一系列命令后,您应该拥有以下文件:
composer.json
用于安装在vendor
目录中的 PHP 依赖项index.php
示例网页serverless.yml
用于配置部署
要验证设置,请尝试部署此默认应用程序。 这将输出一个呈现带有 Bref 徽标的网页的 URL:
$ serverless deploy
现在您已初始化项目,接下来将添加mongodb
扩展。在 bref/extra-php-extension 提供的扩展列表中找到“Serverless config”名称 。将其添加到layers
serverless.yaml
中,此文件将如下所示:
plugins: - ./vendor/bref/bref - ./vendor/bref/extra-php-extensions functions: api: handler: index.php runtime: php-83-fpm layers: - ${bref-extra:mongodb-php-83}
让我们将 MongoDB 驱动程序与网页一起使用,列出 Atlas样本数据集的行星。将index.php
的内容替换为以下内容:
use MongoDB\Client; require_once __DIR__ . '/vendor/autoload.php'; $uri = getenv('MONGODB_URI'); try { $client = new Client($uri); $planets = $client ->selectCollection('sample_guides', 'planets') ->find([], ['sort' => ['orderFromSun' => 1]]); } catch (Throwable $exception) { exit($exception->getMessage()); } <!DOCTYPE html> <html lang="en"> <head> <title>MongoDB Planets</title> </head> <body> <ul> foreach ($planets as $planet) : <li>$planet->name </li> endforeach </ul> </body> </html>
使用新的index.php
重新部署应用程序:
$ serverless deploy
应用程序将显示一条错误消息,因为尚未设置MONGODB_URI
环境变量。我们将在下一节中了解如何设置此变量。
AWS 凭证
Atlas 支持使用 AWS 档案进行无密码身份验证。在任何 Lambda 函数中,AWS 都会设置包含访问令牌和密钥令牌的环境变量,以及分配给已部署函数的角色。
Lambda在Amazon Web Services 控制台中打开 函数
在 Configuration > Permission中,复制Role name
使用内置角色将此角色添加到 Atlas 集群:“读取和写入任何数据库”
要了解如何设置统一 AWS 访问,请参阅 MongoDB Atlas 文档中的设置统一 AWS 访问。
现在已配置权限,允许 Lambda 函数访问您的 Atlas 集群。 您可以使用 Atlas 端点配置应用程序。
对 Atlas 集群的访问也受到 IP 地址的限制。 IP由于来自Amazon Web Services 的 范围非常广泛,因此您可以 允许从任何地方进行访问。
注意
建议使用 VPC 对等互连,将 Atlas 集群与互联网隔离。 这需要在此Lambda 中部署Amazon Web ServicesVPC 函数。
在 Atlas 用户界面Atlas > Deployment > Database > Connect中查找连接 URI。选择3. AWS IAM 。从 URI 中删除<AWS access key>:<AWS secret key>
部分,将从环境变量中读取档案。
更新serverless.yml
文件以传递环境变量MONGODB_URI
。
provider: environment: MONGODB_URI: "mongodb+srv://cluster0.example.mongodb.net/?authSource=%24external&authMechanism=MONGODB-AWS&retryWrites=true&w=majority"
最后,使用新配置进行部署。 部署完成后,您可以访问函数 URL 并查看 Atlas 集群中的planet列表。
$ serverless deploy