Docs 菜单

使用 Bref 部署到Amazon Web Services Lambda

在本指南中,您可以学习;了解如何使用 Bref 将无服务器PHP应用程序部署到Amazon Web Services Lambda。本指南演示了如何部署使用PHP库构建的PHP应用程序,以及如何使用Amazon Web Services IAM身份验证连接到Atlas 集群。

在使用 Bref部署到Amazon Web Services Lambda之前,您必须设立以下组件:

Bref 文档中的设置教程 介绍了如何准备这些组件。

Bref 使用Lambda层提供PHP运行时。bref 层将 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:配置部署

初始化项目后,您可以添加 mongodb 扩展。在 bref/extra-php-extension 包提供的扩展列表中找到 Serverless config 名称。将其添加到 serverless.yaml文件中函数的 layers,如以下代码所示:

plugins:
- ./vendor/bref/bref
- ./vendor/bref/extra-php-extensions # Adds the extra Serverless plugin
functions:
api:
handler: index.php
runtime: php-83-fpm
layers:
- ${bref-extra:mongodb-php-81} # Adds the MongoDB layer

创建一个网页,通过使用以下代码替换 index.php 的内容来列出Atlas示例数据中的行星:

<?php
use MongoDB\Client;
require_once __DIR__ . '/vendor/autoload.php';
$uri = getenv('MONGODB_URI');
try {
$client = new Client($uri);
$planets = $client
->getCollection('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>
<?php foreach ($planets as $planet) : ?>
<li><?= $planet->name ?></li>
<?php endforeach ?>
</ul>
</body>
</html>

提示

查找操作

前面的代码使用 MongoDB\Collection::find() 方法检索文档。要学习;了解有关此方法的更多信息,请参阅检索数据指南。

Atlas支持使用Amazon Web Services凭证时的无密码身份验证。 在任何Lambda函数中, Amazon Web Services都会设置环境变量,其中包含为部署函数而分配的角色的访问权限令牌和秘密令牌。

以下步骤演示了如何在Atlas 集群中设立角色:

  1. 在Amazon Web Services控制台中打开Lambda函数。

  2. 导航到 Configuration > Permission,然后复制 Role name

  3. 将此角色添加到 Database Access 部分的Atlas 集群。选择 AWS IAM身份验证方法并设立内置角色Read and write any database

要学习;了解如何设立统一的Amazon Web Services访问权限,请参阅Atlas文档中的设置统一的Amazon Web Services访问。

配置权限后,将允许Lambda函数访问权限您的Atlas 集群。接下来,配置应用程序以使用Atlas端点。

对Atlas集群的访问也受到IP解决的限制。由于来自Amazon Web Services 的IP地址范围非常广泛,因此您可以允许从任何地方访问权限。 要学习;了解如何支持通用访问权限,请参阅Atlas文档中的配置IP访问列表条目

注意

建议使用虚拟私有云 (VPC)对等互连将Atlas 集群与互联网隔离。这需要将Lambda函数部署在Amazon Web Services VPC中。 要学习;了解更多信息,请参阅Atlas文档中的设置网络对等互连连接

接下来,复制连接字符串并删除<AWS access key>:<AWS secret key> 部分,因为会从环境变量中读取您的凭证。

在项目的 serverless.yml文件中,将 MONGODB_URI 环境变量设立为连接字符串:

provider:
environment:
MONGODB_URI: "<connection string without credentials>"

要学习;了解有关使用 MONGODB-AWS身份验证机制的更多信息,请参阅身份验证机制指南中的 MONGODB-AWS 部分。

最后,部署应用程序:

serverless deploy

部署完成后,您可以访问权限该URL并查看集合中的行星列表。