使用 Bref 部署到Amazon Web Services Lambda
Overview
在本指南中,您可以学习;了解如何使用 Bref 将无服务器PHP应用程序部署到Amazon Web Services Lambda。本指南演示了如何部署使用PHP库构建的PHP应用程序,以及如何使用Amazon Web Services IAM身份验证连接到Atlas 集群。
开始之前
在使用 Bref部署到Amazon Web Services Lambda之前,您必须设立以下组件:
Amazon Web Services帐户和访问权限密钥
安装依赖项
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扩展添加到您的配置中
初始化项目后,您可以添加 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示例数据中的行星:
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> foreach ($planets as $planet) : <li>$planet->name </li> endforeach </ul> </body> </html>
设置Amazon Web Services档案
Atlas支持使用Amazon Web Services凭证时的无密码身份验证。 在任何Lambda函数中, Amazon Web Services都会设置环境变量,其中包含为部署函数而分配的角色的访问权限令牌和秘密令牌。
以下步骤演示了如何在Atlas 集群中设立角色:
在Amazon Web Services控制台中打开Lambda函数。
导航到 Configuration > Permission,然后复制 Role name。
将此角色添加到 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并查看集合中的行星列表。